In search this blog

Loading

piątek, 10 lutego 2012

GNU & Unix Commands


Shells in the Environment

Zmienne shell'a to to samo co zmienne środowiskowe. Wyświetlić ustawienia zmiennych można przy pomocy polecenia env (nie wszystkich zmiennych), żeby sprawdzić że shell jest przypisany do ciebie możesz edytować plik /etc/passwd

gdm:x:42:42::/var/gdm:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
nonus25:x:500:500:Augustyn Chmiel:/home/nonus25:/bin/bash
vboxadd:x:103:1::/var/run/vboxadd:/bin/false

W moim przypadku widać to w linijce zaczynającej się od nonus25. Zmienne profilowe przetrzymywane są w pliku /etc/profile, oczywiście to wszystko w zależności jakiego systemu używamy, zmienne te mogą również odnosić się do plików w /etc/profile.d/ jak i również do /etc/profile.d/. Jeżeli szukamy zmiennych dokładnie tyczących się danego użytkownika to każde konto zawiera pliki w katalogu domowym danego użytkownika i są to .bashrc, .bash_profile i .profile. Aby wyświetlić zmienna odpowiadającą za komend prompt $PS1 należy wywołać ja bezpośrednio w linii komend.

[nonus25@localhost ~]$ echo $PS1
[\u@\h \W]\$
[nonus25@localhost ~]$ echo $PS2
>
[nonus25@localhost ~]$ echo $PS4
+

Następną zmienna którą trzeba tak edytować jest np. $PAGER odpowiada ona za ustawienie domyślnego edytora tekstu. Zmienne ta jest nie zawsze ustawiona, więc pokaże poniżej jak ustawić taką zmienna przy pomocy komend.

[nonus25@localhost ~]$ echo $PAGER

[nonus25@localhost ~]$ export PAGER=less
[nonus25@localhost ~]$ echo $PAGER
less
[nonus25@localhost ~]$ unset PAGER
[nonus25@localhost ~]$ echo $PAGER
 

Jeżeli używamy innego środowiska niż bash do ustawienia zmienne posłuży nam komenda set. W przykładzie widzimy nadanie wartości zmiennej a później odwołanie tego poprzez komendę unset.

Dots and the PATH

Zacznę od kropek,

  • . - aktualna ścieżka
  • .. - ścieżka poziom wyżej
[nonus25@localhost ~]$ ls .
Desktop
[nonus25@localhost ~]$ ls ..
nonus25
[nonus25@localhost ~]$ ls ../..
bin   dev  home  lost+found  misc  net  proc  sbin     srv  tmp  var
boot  etc  lib   media       mnt   opt  root  selinux  sys  usr

To tyle by mówić o kropkach w systemie Linux, następna do omówienia rzecz to zmienna PATH. Ta zmienna daje nam prawo do uruchomienia programów bez podawania ścieżki do nich o ile ścieżki te są wy listowane w tej zmiennej, ścieżki rozdziela się przy pomocy :, aby sprawdzić jakie ścieżki zawarte są w zmiennej należy wywołać komendę echo $PATH, znak dolara konieczny przed zmienna.

[nonus25@localhost ~]$ echo $PATH 
/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/sbin

History and Command Completion

Aby ułatwić życie administratorom w systemie są zapisywane komendy które wykonywaliśmy, aby je przejrzeć należy wyświetlić plik znajdujący się w HOME .bash_history lub też wyświetlić je za pomocą komendy history, różnica miedzy plikiem a komendą polega na tym, że komenda wyświetla aktualne polecenia wykonane w danej sesji, a do pliku zapisywane są komendy jakie wykonaliśmy podczas bieżącej sesji gdy się wylogowujemy z systemu. Maksymalną ilość przechowywanych komend możemy sprawdzić typując echo $HISTSIZE, przeważnie jest ustawiony na 1000 komend.

[nonus25@localhost ~]$ echo $HISTSIZE
1000
[nonus25@localhost ~]$ history 
    1  pwd
    2  su
    3  pwd
    4  whoami
    5  clear
    6  sudo su
    7  su
    8  clear
    9  lspci
   10  dmesg 
   11  lspci
   12  lsusb

Teraz każda kżda komenda wyświetlona przy pomocy komendy history posiada numer. Więc jeśli chcemy odwołać się do jakieś komendy wystarczy, że podamy !3, lub też kilka pierwszych liter !w

[nonus25@localhost ~]$ !3
pwd
/home/nonus25
[nonus25@localhost ~]$ !w
whoami
nonus25

Uzupełnienie do komendy, ścieżek czy tez zmiennych środowiskowych uzyskamy przy kliknięciu TAB jeśli jest więcej niż jedna podpowiedz drugie wciśnięcie klawisza spowoduje wyświetlenie ich wszystkich.

Basic Shell Commands

Na pierwszy ogień idą takie komendy jak man, pwd, exec i uname.

  • pwd - podaje nam bieżącą ścieżkę w której pracujemy. Również wyświetla zmienną środowiskową PWD
    [nonus25@localhost ~]$ pwd
    /home/nonus25
    [nonus25@localhost ~]$ env | grep PWD
    PWD=/home/nonus25
    [nonus25@localhost ~]$ cd Desktop/
    [nonus25@localhost Desktop]$ pwd
    /home/nonus25/Desktop
    [nonus25@localhost Desktop]$ env | grep PWD
    PWD=/home/nonus25/Desktop
    OLDPWD=/home/nonus25
    
  • man - wyświetla nam strony z opisem programu/komendy, strony organizowane są w kilku rozdziałach przeważnie.
    • man -k termin - działa tak samo jak komenda apropos, czyli przeszukuje strony man w poszukiwaniu terminu.
      [nonus25@localhost ~]$ man -k email
      PhishTag [Mail::SpamAssassin::Plugin::PhishTag] (3pm)  - SpamAssassin plugin for redirecting links in incoming emails
      mailpost             (8)  - feed an email message into a news group
      mailto.conf [mailto] (5)  - configuration file for cups email notifier
      nautilus-sendto      (1)  - convenience application to send a file via email or instant messenger
      news2mail            (8)  - a channel script to gateway news into email
      spamassassin         (1)  - extensible email filter used to identify spam
      spamassassin        (rpm) - Spam filter for email which can be invoked from mail delivery agents.
      [nonus25@localhost ~]$ apropos email
      PhishTag [Mail::SpamAssassin::Plugin::PhishTag] (3pm)  - SpamAssassin plugin for redirecting links in incoming emails
      mailpost             (8)  - feed an email message into a news group
      mailto.conf [mailto] (5)  - configuration file for cups email notifier
      nautilus-sendto      (1)  - convenience application to send a file via email or instant messenger
      news2mail            (8)  - a channel script to gateway news into email
      spamassassin         (1)  - extensible email filter used to identify spam
      spamassassin        (rpm) - Spam filter for email which can be invoked from mail delivery agents.
      [nonus25@localhost ~]$
      
    • man -f komenda - wyświetli wszystkie powiązane man strony.
      [nonus25@localhost ~]$ man -f man
      man                  (1)  - format and display the on-line manual pages
      man                  (1p)  - display system documentation
      man                  (7)  - macros to format man pages
      man                 (rpm) - A set of documentation tools: man, apropos and whatis.
      man-pages           (rpm) - Man (manual) pages from the Linux Documentation Project.
      man-pages-overrides (rpm) - Complementary and updated manual pages
      man.config [man]     (5)  - configuration data for man
      
    • man 5 komenda - czyta 5 stronę ze stron man.
      [nonus25@localhost ~]$ man 7 man
      MAN(7)                     Linux Programmer’s Manual                    MAN(7)
      
      NAME
             man - macros to format man pages
      
      SYNOPSIS
             groff -Tascii -man file ...
      
             groff -Tps -man file ...
      
             man [section] title
      
      DESCRIPTION
             This manual page explains the groff tmac.an macro package (often called
             the man macro package) and  related  conventions  for  creating  manual
             (man)  pages.   This  macro  package  should be used by developers when
             writing or porting man pages for Linux.  It is fairly  compatible  with
             other  versions  of this macro package, so porting man pages should not
             be a major problem (exceptions include the  NET-2  BSD  release,  which
             uses a totally different macro package called mdoc; see mdoc(7)).
      
             Note  that  NET-2  BSD  mdoc man pages can be used with groff simply by
             specifying the -mdoc option instead of  the  -man  option.   Using  the
      
  • uname - podaje info o systemie
    • uname -a - podaje wszystkie informacje
      [nonus25@localhost ~]$ uname -a
      Linux localhost.localdomain 2.6.18-274.17.1.el5.centos.plus #1 SMP Wed Jan 11 10:58:19 EST 2012 i686 i686 i386 GNU/Linux
      
    • uname -s - nazwę kernel'a, -s, jest domyślnym przełącznikiem dla tej komendy
      [nonus25@localhost ~]$ uname -s
      Linux
      [nonus25@localhost ~]$ uname 
      Linux
      
    • uname -n podaje nazwę hosta,
      [nonus25@localhost ~]$ uname -n
      localhost.localdomain
      
    • uname -r - podaje wersje jądra
      [nonus25@localhost ~]$ uname -r
      2.6.18-274.17.1.el5.centos.plus
      
    • uname -v podaje datę instalacji jądra
      [nonus25@localhost ~]$ uname -v
      #1 SMP Wed Jan 11 10:58:19 EST 2012
      
    • uname -i lub uname -p - podaje architekturę platformy, podaje architekturę procesora
      [nonus25@localhost ~]$ uname -i
      i386
      [nonus25@localhost ~]$ uname -p
      i686
      
    • uname -o - podaje nazwę systemu operacyjnego,
      [nonus25@localhost ~]$ uname -o
      GNU/Linux
      
  • exec - zastępuje powłokę, co mam na myśli, chyba będzie najlepiej pokazać na przykładzie:
    [nonus25@localhost ~]$ touch nonus25_{1..5}.txt
    [nonus25@localhost ~]$ ls .
    Desktop        nonus25_2.txt  nonus25_4.txt
    nonus25_1.txt  nonus25_3.txt  nonus25_5.txt
    [nonus25@localhost ~]$ find . -name 'non*' -exec rm {} \;
    [nonus25@localhost ~]$ ls .
    Desktop
    
    I małe wytłumaczenie co tu się stało, utworzyłem pięć plików nonus25_(1-5).txt, pokazałem zawartość bieżącej ścieżki, a następnie wyszukałem wszystkie pliki zaczynające się na nazwę non, i oddzielnie dla każdego znaleźnego pliku wtrąciłem komendę rm, która to usunęła te pliki, co pokazuje ostatnia wykonana komenda.

Wildcards - Globs - and Search Commands

Więc tak, komenda ls aa* poda nam wszystkie nazwy znajdujące się w katalogu i zaczynające się na aa włączając w to także nazwę aa, zaś wzorzec ls aa? wy listuje nam wszystkie nazwy zawierające 3 znaki. Następnym wzorcem jaki możemy użyć są klamry, np. przy tworzeniu jakiejś ilości plików touch doc{0..9}{0..9}.txt polecenie to będzie również działać z literami, {a..z}, {A..Z}. Możemy również używać nawiasów kwadratowych które określają jakiś zakres np. jeśli chcemy wyszukać ileś plików zawierających liczby od 1 do 3 w nazwie zbudujemy takie zapytanie, ls doc[1-3]?.txt lub ls doc[1-3][1-3].txt, również możemy użyć wykrzyknika który powoduje negacje danego wzorca np. ls doc[!1-3][1-3].txt wy listuje wszystkie pliki oprócz tych plików które w nazwie będą zawierały pierwszą liczbę od 1 do 3. Następnymi komendami które pomagają wyszukiwaniu czegoś są locate, komenda ta przeszukuje bazę danych lokalnych plików, baza danych jest uaktualniana poprzez skrypt /etc/corn.daily, baza ta zawiera informację o wszystkich zainstalowanych pakietach i bazuje ona na slocate lub mlocate. Inną komendą pomagającą w przeszukiwaniu jest komenda find i umożliwia ona przeszukiwanie w czasie rzeczywistym, np. find . -name '*.png' wyszuka wszystkie obrazki w bieżącej ścieżce.


File and Directory Commands

Na początek komendy touch i ls

  • touch filename - tworzy nowy plik o podanej nazwie,
    [nonus25@localhost ~]$ touch nonus25_{1..5}.txt
    [nonus25@localhost ~]$ ls .
    Desktop        nonus25_2.txt  nonus25_4.txt
    nonus25_1.txt  nonus25_3.txt  nonus25_5.txt
    
  • ls - wy listuje pliki w bieżącej ścieżce,
    [nonus25@localhost ~]$ ls
    Desktop        nonus25_2.txt  nonus25_4.txt
    nonus25_1.txt  nonus25_3.txt  nonus25_5.txt
    
    • ls -a wy listuje również pliki ukryte, zaczynające się od kropki,
      [nonus25@localhost ~]$ ls -a
      .              .gnome             nonus25_4.txt
      ..             .gnome2            nonus25_5.txt
      .bash_history  .gnome2_private    .recently-used.xbel
      .bash_logout   .gstreamer-0.10    .redhat
      .bash_profile  .gtkrc-1.2-gnome2  .themes
      .bashrc        .ICEauthority      .thumbnails
      .config        .icons             .Trash
      Desktop        .metacity          .vboxclient-clipboard.pid
      .dmrc          .mozilla           .vboxclient-display.pid
      .eggcups       .nautilus          .vboxclient-seamless.pid
      .esd_auth      nonus25_1.txt      .xsession-errors
      .gconf         nonus25_2.txt
      .gconfd        nonus25_3.txt
      
    • ls -i - czyta numery i-węzłów plików
      [nonus25@localhost ~]$ ls -i
      1083873 Desktop        1085007 nonus25_2.txt  1085009 nonus25_4.txt
      1084998 nonus25_1.txt  1085008 nonus25_3.txt  1085010 nonus25_5.txt
      
    • ls -t - wyświetla listę plików bazującą na czasie modyfikacji
      [nonus25@localhost ~]$ ls -t
      nonus25_1.txt  nonus25_3.txt  nonus25_5.txt
      nonus25_2.txt  nonus25_4.txt  Desktop
      
    • ls -r - odwraca kolejność wyszukiwania plików
      [nonus25@localhost ~]$ ls -r
      nonus25_5.txt  nonus25_3.txt  nonus25_1.txt
      nonus25_4.txt  nonus25_2.txt  Desktop
      
    • ls -l - wyświetla listę w długim formacie, format zawiera: typ, uprawnienia, rozmiar, datę ostatniej modyfikacji i nazwę pliku.
      [nonus25@localhost ~]$ ls -l
      total 28
      drwxr-xr-x 2 nonus25 nonus25 4096 Feb  5 04:16 Desktop
      -rw-rw-r-- 1 nonus25 nonus25    0 Feb  8 06:42 nonus25_1.txt
      -rw-rw-r-- 1 nonus25 nonus25    0 Feb  8 06:42 nonus25_2.txt
      -rw-rw-r-- 1 nonus25 nonus25    0 Feb  8 06:42 nonus25_3.txt
      -rw-rw-r-- 1 nonus25 nonus25    0 Feb  8 06:42 nonus25_4.txt
      -rw-rw-r-- 1 nonus25 nonus25    0 Feb  8 06:42 nonus25_5.txt
      
    • ls -F - dodaje symbole plików
      [nonus25@localhost ~]$ ls -F /etc/
      audisp/                jvm-commmon/     rc.d/
      audit/                 jwhois.conf      rc.local@
      autofs_ldap_auth.conf  kdump.conf       rc.news*
      auto.master            krb5.conf        rc.sysinit@
      auto.misc              ldap.conf        readahead.d/
      auto.net*              ld.so.cache      reader.conf
      auto.smb*              ld.so.conf       reader.conf.d/
      avahi/                 ld.so.conf.d/    redhat-lsb/
      bashrc                 lftp.conf        redhat-release
      blkid/                 libaudit.conf    request-key.conf
      bluetooth/             libuser.conf     resolv.conf
      bonobo-activation/     libvirt/         resolv.conf.predhclient
      capi.conf              localtime        rmt@
      cdrecord.conf          login.defs       rndc.key@
      
      widzimy tu dodane symbole więc:
      • * do plików wykonywalnych
      • / do folderów
      • @ do symbolicznych linków
      • = do gniazd (sockets)
      • | do strumieni (pipes)
  • file * - listuje pliki z krótkim opisem
    [nonus25@localhost ~]$ file *
    Desktop:       directory
    link.txt:      empty
    non.bin:       empty
    non.deb:       empty
    nonus25_1.txt: ASCII text
    nonus25_2.txt: empty
    nonus25_3.txt: empty
    nonus25_4.txt: empty
    nonus25_5.txt: empty
    

Teraz przejdę do poleceń takich jak cp, mv, rm

  • cp file1 file2 - kopiuje zawartość pliku 1 i nadpisuje zawartość pliku 2
    [nonus25@localhost ~]$ cp nonus25_1.txt nonus25_5.txt 
    [nonus25@localhost ~]$ file *
    Desktop:       directory
    link.txt:      ASCII text
    non.bin:       empty
    non.deb:       empty
    nonus25_1.txt: ASCII text
    nonus25_2.txt: empty
    nonus25_3.txt: empty
    nonus25_4.txt: empty
    nonus25_5.txt: ASCII text
    
    • cp -r - kopiuje rekurencyjnie
    • cp -a - kopiuje rekurencyjnie z zachowaniem linków, własności, dat
  • mv - podobne do polecenia cp z tym że usuwa oryginalny plik
    [nonus25@localhost ~]$ ls -l
    total 56
    drwxr-xr-x 2 nonus25 nonus25 4096 Feb  5 04:16 Desktop
    -rw-rw-r-- 2 nonus25 nonus25   23 Feb  8 07:46 link.txt
    -rw-rw-r-- 1 nonus25 nonus25    0 Feb  8 07:12 non.bin
    -rw-rw-r-- 1 nonus25 nonus25   23 Feb  8 07:45 nonus25_1.txt
    -rw-rw-r-- 1 nonus25 nonus25   23 Feb  8 07:48 nonus25_2.txt
    -rw-rw-r-- 1 nonus25 nonus25   23 Feb  8 07:45 nonus25_3.txt
    -rw-rw-r-- 1 nonus25 nonus25    0 Feb  8 07:12 nonus25_4.txt
    -rw-rw-r-- 2 nonus25 nonus25   23 Feb  8 07:46 nonus25_5.txt
    
  • rm usuwa dane pliki
    [nonus25@localhost ~]$ ls -l
    total 52
    drwxr-xr-x 2 nonus25 nonus25 4096 Feb  5 04:16 Desktop
    -rw-rw-r-- 2 nonus25 nonus25   23 Feb  8 07:46 link.txt
    -rw-rw-r-- 1 nonus25 nonus25   23 Feb  8 07:45 nonus25_1.txt
    -rw-rw-r-- 1 nonus25 nonus25   23 Feb  8 07:48 nonus25_2.txt
    -rw-rw-r-- 1 nonus25 nonus25   23 Feb  8 07:45 nonus25_3.txt
    -rw-rw-r-- 1 nonus25 nonus25    0 Feb  8 07:12 nonus25_4.txt
    -rw-rw-r-- 2 nonus25 nonus25   23 Feb  8 07:46 nonus25_5.txt
    
    • rm -r - usuwa pliki i katalogi rekurencyjnie
    • rm -rf - usuwa pliki rekurencyjnie i siłowo
    • rm -rf /path/to/file - ostrożnie z tym poleceniem

Komendy odpowiedzialne za zarządzanie katalogami mkdir, rmdir

  • mkdir dir tworzy nowy katalog
    [nonus25@localhost ~]$ mkdir dir1
    [nonus25@localhost ~]$ ls -l
    total 24
    drwxr-xr-x 2 nonus25 nonus25 4096 Feb  5 04:16 Desktop
    drwxrwxr-x 2 nonus25 nonus25 4096 Feb  8 08:18 dir1
    -rw-rw-r-- 1 nonus25 nonus25   23 Feb  8 07:46 link.txt
    
    • mkdir -p path/to/dir - tworzy całą strukturę katalogów
  • rmdir dir - usuwa katalog jeśli katalog jest pusty
    [nonus25@localhost ~]$ rmdir dir1/
    [nonus25@localhost ~]$ ls -l
    total 16
    drwxr-xr-x 2 nonus25 nonus25 4096 Feb  5 04:16 Desktop
    -rw-rw-r-- 1 nonus25 nonus25   23 Feb  8 07:46 link.txt
    
    • rmdir -p path/to/dir - usuwa cała strukturę katalogów jeśli katalogi są puste.

Archives and Compression

Jednym z głównych narzędzi archiwizujących pod Linux'em jest tar. Program ten tworzy jak i rozpakowuje

  • tar czf backupmail.tar.gz .evolution/
    • c - tworzy nowe archiwum
    • z - kompresuje algorytmem gzip
    • f - używa nazwy która następuje
  • tar cf backupmail.tar .evolution/ - tworzy nie skompresowane archiwum tar
    • c - tworzy nowe archiwum
    • f - używa nazwy która następuje
  • gzip backupmail.tar - utworzone wcześniej nie skompresowane archiwum możemy skompresować w ten sposób, efektem tego będzie dodanie nowego rozszerzenia do pliku .gz. Plik ten będziemy mogli rozpakować przy pomocy gunzip lub gzip -d.
  • bzip2 backupmail.tar - utworzone wcześniej nie skompresowane archiwum możemy skompresować też w inny sposób, efektem tego będzie dodanie nowego rozszerzenia do pliku .bz2. Plik ten będziemy mogli rozpakować przy pomocy bunzip2 lub bzip2 -d. Także tar j kompresuje pliki do bzip2
  • cpio w dosłownym znaczeniu kopia wejścia, program również odpowiada za tworzenie archiwów.
    • find / -name *.doc | cpio -o > docfiles - więc skrypt zaczyna szukać wszystkich plików z rozszerzeniem .doc zaczynając od root'a, następnie przekazuje każdy znaleziony plik do drugiej komendy gdzie tworzone jest archiwum.
    • cpio -i < docfiles rozpakowanie archiwum utworzonego powyżej.
    • odnosi się także do archiwów utworzonych za pomocą rpm2cpio
  • dd if=/dev/hda1 of=/dev/hdb1 backup możemy również utworzyć korzystając z narzędzia dd, w pierwszej części komendy podajemy wejście partycji if=, zaś w drugiej części podajemy partycje wyjścia of=
  • dd if=/dev/hda of=/mbr.bk bs=512 count=1 - poleceniem tym jesteśmy w stanie zrobić backup naszego MBR
  • dd if=/mbr.bk of=/dev/hda bs=512 count=1 - poleceniem tym przywracamy wcześniej utworzoną kopie zapasową.

Basic Data Redirection

Aby przekierować strumień w Linux'ie używamy komend >, 1>, 2>, <, itp.. Np. ls . > filename przekieruje nam strumień do pliku o nazwie filename, komenda > i 1> wykonują te samo polecenie, czyli przekierują strumień do pliku. Następna komenda to komenda która spowoduje dopisanie jakiś informacji, danych do pliku ls . >> filename. Zaś jeśli chcemy przekierować strumień błędów używamy polecenia ls nodirectory 2> errorfile, gdzie za każdym razem tworzymy nowy plik lub jak to woli nadpisujemy dane zawarte w tym że pliku. Aby dopisać dane o błędach do pliku nalęży użyć podobnej składni jak powyżej czyli ls nodirectory 2>> errorfile. To były polecenia aby przekierować output naszych strumieni, a żeby przekierować input należy użyć polecenia database < data.


Tees - Pipes - Redirection

Czasami zachodzi potrzeba przekazania wyjścia na wejście innej komendy w tym celu posługujemy się poleceniem |, lub ||. Oczywiście najlepiej to widać na przykładzie rpm -qa | grep system, komenda rpm -qa zwraca nam informacje na temat zainstalowanych pakietów w systemie, teraz druga komenda filtruje czy na wejściu pokazał się taki wzorzec jakiego poszukiwaliśmy, jeśli tak jest on wyświetlany na wyjściu. Innym przypadkiem może być np. jeśli chcemy przekierować dane i umieścić je zarazem w pliku, możemy tego dokonać za pomocą komendy tee, a oto przykład ls . | tee filename, polecenie to wyświetli nam plik i zapisze dane do pliku. Następną komendą używaną przy przekierowaniach jest komenda xargs, a tu przykład jej użycia ls *.png | xargs rm. Gdzie komenda xargs pobiera całą listę plików a następnie przekazuje ją do komendy rm, która to usuwa wszystkie te pliki.


stat4u

Brak komentarzy:

Prześlij komentarz

Powered By Blogger