In search this blog

Loading

niedziela, 12 lutego 2012

More GNU and Unix Commands


Text Stream Management

Strumień tekstu a strumień wyjścia oznacza to samo, Mamy kilka ważnych poleceń o których tutaj krótko opowiem co i jak się je.

  • cat filename - przekaże plik na wyjście i tym samym wyświetli jego zawartość.
  • head filename - wyświetli nam 10 pierwszych linijek pliku
    • head -n lines filename - określa n linii zamiast tych 10
  • tail filename - wyświetli nam 10 ostatnich linijek pliku z tym, że
    • tail -n lines filename - określa n linii zamiast tych 10
    • tail -f filename - zakłada monitor na plik i reaguje jak plik zostaje z aktualizowany, aby przerwać polecenie należy użyć Ctrl + C.

Następne dwa polecenia pozwalają nam na przeglądanie pliku czy też wyjścia, są to komendy less i more. W tego typu edytorach mamy kilka zasad poruszania się, oto one:

  • <Enter> - powoduje przejście o jedną linie w dół
  • <Spacebar> - powoduje przejście o jedną stronę
  • <q> - wyjście z programu
  • more - nie pozwala na cofanie się
  • less - wspiera takie przyciski jak strzałki, PgDn, PgUp i posiada możliwość wyszukiwania tak samo jak edytor vi.
  • wc /path/to/file - program podaje statystyki na temat danego pliku
    • wc -l path/to/file - zlicza ilość linii w pliku
    • wc -w path/to/file - zlicza ilość słów w pliku
    • wc -c path/to/file - zlicza ilość znaków w pliku
  • fmt path/to/file - limit wyjścia na kolumny, domyślnie 75
    • fmt -wnum path/to/file - sami definiujemy limit kolumn na wyjście
  • expand - zamienia tabulator na 8 spacji
  • unexpand - zamienia spacje na tabulator ale to polecenie działa tylko na grupie, aby zastosować polecenie na całym pliku należy użyć przełącznika unexpand -a filename
  • nl - dodaje numer linii w pliku
  • tr - przekształca z jednego zakresu do drugiego
    • cat file | tr A-Z a-z - komenda usuwa duże litery w pliku

Text Filter Commands

  • cut -d: -f1 /etc/passwd | tee nicks - program działa na kolumnach, przy przełączniku -d; podajemy delimiter dla pliku, dokładnie jak z plikiem csv, gdzie domyślnym delimiter jest ;, zaś dla przełącznika -f1 podajemy numer kolumny, która nas interesuje, a tu wynik komendy:
    1. [nonus25@localhost ~]$ tail -n5 nicks  
    2. gdm  
    3. sabayon  
    4. nonus25  
    5. vboxadd  
    6. oprofile  
  • paste -d: nick nick_path | tee user_info - komenda może połączyć pliki, można poprzez znacznik -d: określić delimiter, domyślnie używana jest tabulacja.
    1. [nonus25@localhost ~]$ tail -n5 user_info   
    2. gdm:/var/gdm  
    3. sabayon:/home/sabayon  
    4. nonus25:/home/nonus25  
    5. vboxadd:/var/run/vboxadd  
    6. oprofile:/home/oprofile  
  • join num_nick num_nick_path | tee num_user_info - komenda łączy kolumny z tym że plik musi posiadać numer linii i na tej podstawie są one łączone, uprzednio przygotowałem pliki aby można było zastosować do nich tą komendę a tu mamy wynik:
    1. [nonus25@localhost ~]$ tail -n5 num_user_info   
    2. 44 gdm /var/gdm  
    3. 45 sabayon /home/sabayon  
    4. 46 nonus25 /home/nonus25  
    5. 47 vboxadd /var/run/vboxadd  
    6. 48 oprofile /home/oprofile  
  • split -5 num_nick num_nick_ - podzieli plik względem linii które żeśmy podali w przełączniku i utworzy pliki, num_nick_aa, num_nick_ab, poniżej zamieszczam wynik tej komendy:
    1. [nonus25@localhost ~]$ ls num_nick_??  
    2. num_nick_aa  num_nick_ac  num_nick_ae  num_nick_ag  num_nick_ai  
    3. num_nick_ab  num_nick_ad  num_nick_af  num_nick_ah  num_nick_aj  
    4. [nonus25@localhost ~]$ cat num_nick_ai  
    5.     41  ricci  
    6.     42  haldaemon  
    7.     43  avahi-autoipd  
    8.     44  gdm  
    9.     45  sabayon  
    10. [nonus25@localhost ~]$ cat num_nick_aj  
    11.     46  nonus25  
    12.     47  vboxadd  
    13.     48  oprofile  
  • sort num_nick_aj - komenda posortuje plik według pierwszej kolumny
    1. [nonus25@localhost ~]$ cat num_nick_ai >> num_nick_aj  
    2. [nonus25@localhost ~]$ cat num_nick_aj  
    3.     46  nonus25  
    4.     47  vboxadd  
    5.     48  oprofile  
    6.     41  ricci  
    7.     42  haldaemon  
    8.     43  avahi-autoipd  
    9.     44  gdm  
    10.     45  sabayon  
    11. [nonus25@localhost ~]$ sort num_nick_aj | tee 8_users  
    12.     41  ricci  
    13.     42  haldaemon  
    14.     43  avahi-autoipd  
    15.     44  gdm  
    16.     45  sabayon  
    17.     46  nonus25  
    18.     47  vboxadd  
    19.     48  oprofile  
    • sort -r 8_users - odwraca kolejność sortowania
      1. [nonus25@localhost ~]$ sort -r num_nick_aj | tee 8_users_rev  
      2.     48  oprofile  
      3.     47  vboxadd  
      4.     46  nonus25  
      5.     45  sabayon  
      6.     44  gdm  
      7.     43  avahi-autoipd  
      8.     42  haldaemon  
      9.     41  ricci  
  • uniq filename - usuwa z pliku takie same linie
  • pr filename - formatuje wyjście do drukowania, używa 56 linii na stronę
  • od filename - konwertuje wyjście do octal (base 8) formatu, przykład pod spodem.
    1. [nonus25@localhost ~]$ od num_nick_ai  
    2. 0000000 020040 020040 030464 071011 061551 064543 020012 020040  
    3. 0000020 032040 004462 060550 062154 062541 067555 005156 020040  
    4. 0000040 020040 031464 060411 060566 064550 060455 072165 064557  
    5. 0000060 062160 020012 020040 032040 004464 062147 005155 020040  
    6. 0000100 020040 032464 071411 061141 074541 067157 000012  
    7. 0000115  
    • od -t x filename - konwertuje do hexadecimal (base 16) formatu, przykład pod spodem:
      1. [nonus25@localhost ~]$ od -t x num_nick_ai  
      2. 0000000 20202020 72093134 69636369 2020200a  
      3. 0000020 09323420 646c6168 6f6d6561 20200a6e  
      4. 0000040 33342020 61766109 612d6968 696f7475  
      5. 0000060 200a6470 34202020 64670934 20200a6d  
      6. 0000100 35342020 62617309 6e6f7961 0000000a  
      7. 0000115  

Text Search Commands

  • grep word infile - komenda wyszukuje słowa w podanym pliku
    1. [nonus25@localhost ~]$ grep nonus25 /etc/passwd  
    2. nonus25:x:500:500:Augustyn Chmiel:/home/nonus25:/bin/bash  
  • grep -v word infile - poda wszystkie linie w których nie występuje dane słowo
    1. [nonus25@localhost ~]$ grep -v -e bash -e bin /etc/passwd  
    2. news:x:9:13:news:/etc/news:  
  • rpm -qa | grep network - wyświetli nam pakiety zawierające w nazwie network
    1. [nonus25@localhost ~]$ rpm -qa | grep network  
    2. system-config-network-tui-1.3.99.19-2.el5  
    3. system-config-network-1.3.99.19-2.el5  
  • grep -l search * - wyszuka plików zawierających dany wzorzec (search)
    1. [nonus25@localhost ~]$ sudo grep -l nonus25 /etc/*  
    2. /etc/group  
    3. /etc/group-  
    4. /etc/gshadow  
    5. /etc/gshadow-  
    6. /etc/passwd  
    7. /etc/passwd-  
    8. /etc/shadow  
    9. /etc/shadow-  
    10. /etc/sudoers  
  • grep -L search * - zwraca wszystkie pliki które nie zawierają poszukiwanego wzorca (search)
    1. [nonus25@localhost ~]$ sudo grep -L nonus25 /etc/*  
    2. /etc/a2ps.cfg  
    3. /etc/a2ps-site.cfg  
    4. /etc/acpi  
    5. /etc/adjtime  
    6. /etc/ais  
    7. /etc/alchemist  
    8. ...etc.  
  • grep -i word infile - poszukuje słowa w pliku ignorując wielkość liter
  • egrep /bin/*sh /etc/passwd - wyszuka wszystkie możliwości wzorca, komenda ta wykonuje dokładnie to samo co komenda grep -E
    1. [nonus25@localhost ~]$ egrep /bin/*sh /etc/passwd  
    2. /etc/passwd:root:x:0:0:root:/root:/bin/bash  
    3. /etc/passwd:nonus25:x:500:500:Augustyn Chmiel:/home/nonus25:/bin/bash  
  • fgrep nonus25 /etc/* - komenda wyświetli pliki i linie w których występuje zadany wzorzec, komenda działa dokładnie tak samo co komenda grep -F
    1. [nonus25@localhost ~]$ sudo fgrep nonus25 /etc/*  
    2. /etc/group:nonus25:x:500:nonus25  
    3. /etc/group-:nonus25:x:500:nonus25,adm  
    4. /etc/gshadow:nonus25:!!::nonus25  
    5. /etc/gshadow-:nonus25:!!::nonus25,adm  
    6. /etc/passwd:nonus25:x:500:500:Augustyn Chmiel:/home/nonus25:/bin/bash  
    7. /etc/passwd-:nonus25:x:500:500:Augustyn Chmiel:/home/nonus25:/bin/bash  
    8. /etc/shadow:nonus25:$1$2sT4zRXm$sKcf4kdHiJ/yyCPlyFgCE0:15364:0:99999:7:::  
    9. /etc/shadow-:nonus25:$1$2sT4zRXm$sKcf4kdHiJ/yyCPlyFgCE0:15364:0:99999:7:::  
    10. /etc/sudoers:nonus25 ALL=(ALL)  ALL  

The Stream Editor

Komendą odpowiedzialną za zamianę jakiegoś ciągu znaków na inny w pliku jest sed -switch 'action/string_in_file/sub_string/flag' filename, komenda posiada taką oto składnię, poniżej zaprezentuje kilka przykładów z wykorzystaniem tej komendy:

  1. [nonus25@localhost ~]$ cat num_nick_aj  
  2.     46  nonus25  
  3.     47  vboxadd  
  4.     48  oprofile  
  5.     41  ricci  
  6.     42  haldaemon  
  7.     43  avahi-autoipd  
  8.     44  gdm  
  9.     45  sabayon  
  10. [nonus25@localhost ~]$ sed '4d' num_nick_aj  
  11.     46  nonus25  
  12.     47  vboxadd  
  13.     48  oprofile  
  14.     42  haldaemon  
  15.     43  avahi-autoipd  
  16.     44  gdm  
  17.     45  sabayon  
  18. [nonus25@localhost ~]$ sed '4,6d' num_nick_aj  
  19.     46  nonus25  
  20.     47  vboxadd  
  21.     48  oprofile  
  22.     44  gdm  
  23.     45  sabayon  

Pierwsza komenda usuwa wiersz 4, zaś komenda druga usuwa dwa wiersze 4 i 6. W następnym przykładzie pokaże jak zamienić dane litery w tekście, oto przykład

  1. [nonus25@localhost ~]$ cat num_nick_aj  
  2.     46  nonus25  
  3.     47  vboxadd  
  4.     48  oprofile  
  5.     41  ricci  
  6.     42  haldaemon  
  7.     43  avahi-autoipd  
  8.     44  gdm  
  9.     45  sabayon  
  10. [nonus25@localhost ~]$ sed 'y/can/_|N/' num_nick_aj  
  11.     46  NoNus25  
  12.     47  vbox|dd  
  13.     48  oprofile  
  14.     41  ri__i  
  15.     42  h|ld|emoN  
  16.     43  |v|hi-|utoipd  
  17.     44  gdm  
  18.     45  s|b|yoN  

Na koniec zostawiłem przykład z zmianą słów, przełącznik -i powoduje wstawienie zmian do pliku, więc teraz i on:

  1. [nonus25@localhost ~]$ cat num_nick_aj  
  2.     46  nonus25  
  3.     47  vboxadd  
  4.     48  oprofile  
  5.     41  ricci  
  6.     42  haldaemon  
  7.     43  avahi-autoipd  
  8.     44  gdm  
  9.     45  sabayon  
  10. [nonus25@localhost ~]$ sed 's/ricci/NONUS25/' num_nick_aj  
  11.     46  nonus25  
  12.     47  vboxadd  
  13.     48  oprofile  
  14.     41  NONUS25  
  15.     42  haldaemon  
  16.     43  avahi-autoipd  
  17.     44  gdm  
  18.     45  sabayon  
  19. [nonus25@localhost ~]$ sed -i 's/ricci/NONUS25/' num_nick_aj  
  20. [nonus25@localhost ~]$ cat num_nick_aj  
  21.     46  nonus25  
  22.     47  vboxadd  
  23.     48  oprofile  
  24.     41  NONUS25  
  25.     42  haldaemon  
  26.     43  avahi-autoipd  
  27.     44  gdm  
  28.     45  sabayon  

The Basics of the vi Editor

Edytor ten nie jest moim ulubionym edytorem ale na potrzeby egzaminu muszę się z nim zapoznać więc z stąd małe notatki i o tym edytorze. Na początek kilka wskazówek jak się poruszać w tym edytorze.

  • W edytorze działają strzałki jaki i klawisze stron PgUp
  • h, j, k, l - odpowiednio (lewo, dół, góra, prawo)
  • G - przenosi na sam koniec dokumentu
  • gg - przenosi na samą gorę dokumentu

Teraz kilka ważniejszych komend dla edytora vi:

  • dd - usuwa dany wiersz
  • u - cofa dokonaną zmianę
  • dw - usuwa dany wyraz
  • yy - pobiera linie do buffer'a, 2yy - analogicznie pobiera 2 linie do buffer'a
  • p - wstaw to co znajduje się w buffer'rze
  • cc - usuwa wiersz i wprowadza nas w stan insert, znaczy że możemy sami wpisać coś, wychodzimy z insert'a naciskając klawisz <Esc>
  • cw - usuwa wyraz i wprowadza nas w stan insert
  • i - insert mode tam gdzie znajduje się kursor
  • Esc - powracamy do stanu komend
  • a - insert mode przed kursorem
  • A - insert mode na końcu linii
  • o - otwiera następną linię
  • O - otwiera poprzednią linię
  • :!shellcommend - wykonuje komendę, będąc dalej w edytorze
  • :w - zapisz do pliku
  • :w newfile - zapisz do nowego pliku "newfile"
  • :q - wyjdź z edytora bez zapisywania zmian
  • :wq - zapisz zmiany i wyjdź

Monitor Your Processes

Zapoznamy się tutaj z takimi programami jak ps, top, uptime, free

  • ps - pokazuje listę procesów w aktualnym shell'u
    1. [nonus25@localhost ~]$ ps  
    2.   PID TTY          TIME CMD  
    3.  2316 pts/0    00:00:00 ps  
    4.  4561 pts/0    00:00:06 bash  
    5. 16511 pts/0    00:00:02 yum  
    6. 16513 pts/0    00:00:00 yum  
    • ps a - wyświetla listę wszystkich uruchomionych shell'ów
      1. [nonus25@localhost ~]$ ps a  
      2.   PID TTY      STAT   TIME COMMAND  
      3.  2342 pts/0    R+     0:00 ps a  
      4.  3207 tty1     Ss+    0:00 /sbin/mingetty tty1  
      5.  3208 tty2     Ss+    0:00 /sbin/mingetty tty2  
      6.  3209 tty3     Ss+    0:00 /sbin/mingetty tty3  
      7.  3212 tty4     Ss+    0:00 /sbin/mingetty tty4  
      8.  3213 tty5     Ss+    0:00 /sbin/mingetty tty5  
      9.  3216 tty6     Ss+    0:00 /sbin/mingetty tty6  
      10.  3256 tty7     Ss+   51:16 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth  
      11.  4561 pts/0    Ss     0:06 bash  
      12. 16511 pts/0    T      0:02 /usr/bin/python /usr/bin/yum info passwd  
      13. 16513 pts/0    T      0:00 /usr/bin/python /usr/bin/yum check-update  
    • ps -u username - wyświetla procesy należące do użytkownika
      1. [nonus25@localhost ~]$ ps -u nonus25  
      2.   PID TTY          TIME CMD  
      3.  2338 pts/0    00:00:00 ps  
      4.  3271 ?        00:00:00 gnome-session  
      5.  3301 ?        00:00:01 VBoxClient  
      6.  3309 ?        00:00:00 VBoxClient  
      7.  3313 ?        00:00:00 VBoxClient  
      8.  3335 ?        00:00:17 ssh-agent  
      9. ... etc.  
    • ps aux - listuje wszystkie uruchomione procesy
      1. [nonus25@localhost ~]$ ps aux  
      2. USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  
      3. root         1  0.0  0.1   2160   636 ?        Ss   Feb11   0:35 init [5]        
      4. root         2  0.0  0.0      0     0 ?        S<   Feb11   0:00 [migration/0]  
      5. root         3  0.0  0.0      0     0 ?        SN   Feb11   0:00 [ksoftirqd/0]  
      6. root         4  0.0  0.0      0     0 ?        S<   Feb11   0:00 [watchdog/0]  
      7. root         5  0.0  0.0      0     0 ?        S<   Feb11   1:45 [events/0]  
      8. ... etc.  
    • ps -C command - listuje nam procesy dla danej komendy
      1. [nonus25@localhost ~]$ ps -C bash  
      2.   PID TTY          TIME CMD  
      3.  4561 pts/0    00:00:06 bash  
    • pstree - listuje procesy jako drzewo hierarchii
      1. [nonus25@localhost ~]$ pstree  
      2. init─┬─/usr/bin/sealer  
      3.      ├─3*[VBoxClient───{VBoxClient}]  
      4.      ├─VBoxService───6*[{VBoxService}]  
      5.      ├─acpid  
      6.      ├─at-spi-registry  
      7.      ├─atd  
      8.      ├─auditd─┬─audispd───{audispd}  
      9.      │        └─{auditd}  
      10.      └──┬─ ...   
      11.         └─ etc.  
  • top - podaje listę procesów
    1. top - 17:20:14 up 1 day, 15:23,  2 users,  load average: 0.60, 0.61, 0.56  
    2. Tasks: 147 total,   3 running, 142 sleeping,   2 stopped,   0 zombie  
    3. Cpu(s):  4.2%us, 25.0%sy,  0.0%ni, 65.1%id,  0.0%wa,  3.5%hi,  2.2%si,  0.0%st  
    4. Mem:    514900k total,   480068k used,    34832k free,    67372k buffers  
    5. Swap:  1048568k total,      112k used,  1048456k free,   192204k cached  
    6.   
    7.   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                      
    8.  4558 nonus25   15   0 66348  18m  10m R 12.4  3.6   6:22.53 gnome-terminal                                                                                               
    9.  3256 root      15   0 44692  11m 7132 S  9.6  2.2  51:36.07 Xorg                                                                                                         
    10.  3374 nonus25   15   0 18068 9376 3332 S  3.8  1.8  29:11.95 at-spi-registry    
    11.  ... etc.  
    • uporządkowane poprzez użycie CPU & RAM
    • zawiera również informacje o swap
  • uptime - zawiera Informacje o stanie maszyny
    1. [nonus25@localhost ~]$ uptime   
    2.  17:21:17 up 1 day, 15:24,  2 users,  load average: 0.61, 0.61, 0.55  
    • aktualny czas działania maszyny, ilość użytkowników, średnie obciążenie
  • free - pokazuje info o pamięci:
    1. [nonus25@localhost ~]$ free  
    2.              total       used       free     shared    buffers     cached  
    3. Mem:        514900     482396      32504          0      67592     193520  
    4. -/+ buffers/cache:     221284     293616  
    5. Swap:      1048568        112    1048456  
    • pojemność pamięci, wykorzystanie pamięci RAM, przestrzeń wymiany (swap)

Different Job Priorities

Komendy, które tutaj przedstawię będą potrzebowały PID, numer ten można uzyskać przy pomocy wcześniej omówionych komend takich jak ps, lub top

  • kill PID - komenda wysyła sygnał aby zabić proces
    • domyślnie proces jest zabijany sygnałem 15, który zakańcza dany proces w sposób czysty
    • kill -1 PID wysyła sygnał 1, który jest odpowiedzialny za restart procesu.
    • kill -9 PID zabija proces siłowo, w sposób nie czysty.
  • killall command - zabija wszystkie procesy powiązane z tą komendą.

Można również zmieniać priorytet danemu procesowi w tym celu służą komendy nice, renice. Nawyższy stopień priorytetu to -20, zaś najniższy to 19

Aby wystartować nowy proces z priorytetem -10 używamy komendy nice --10 newproccess lub komendy nice -n -10 newproccess. Obie komendy działają tak samo. Aby zmienić priorytet danemu procesowi używa się komendy renice -13 PID. Jeżeli chcemy uruchomić proces w tle używa się do tego znaku & na końcu linii. Np. gedit &, w ten sposób nie blokujemy sobie terminala. Aby wy listować procesy działające w tle należy użyć komendy jobs, a poniżej przykład z zastosowaniem tych oto komend, komenda jobs -p podaje listę PID

  1. [nonus25@localhost ~]$ top &  
  2. [3] 2453  
  3. [nonus25@localhost ~]$ sleep 11111 &  
  4. [4] 2454  
  5.   
  6. [3]+  Stopped                 top  
  7. [nonus25@localhost ~]$ jobs -p && jobs   
  8. 16511  
  9. 16513  
  10. 2453  
  11. 2454  
  12. [1]   Stopped                 yum info passwd  
  13. [2]-  Stopped                 yum check-update  
  14. [3]+  Stopped                 top  
  15. [4]   Running                 sleep 11111 &  

Aby przywrócić komendę do wątku głównego należy użyć komendy fg [num], aby z powrotem odesłać komendę w tło należy zawiesić komendę naciskając <Ctrl + Z>, a następnie typując komendę bg. Ostatnią komendą o jakiej tutaj wspomnę będzie komenda która pozwala na wykonywanie zadania po wylogowaniu się z systemu. Np. jeśli wykonuje się jakieś zadanie, które zazwyczaj trwa za długo aby czekać aż się zakończy, a akurat musimy wyjść z pracy/domu. Taką komendę powiniśmy uruchomić w ten oto sposób: nohub path/to/script. Komenda ta zachowa wykonywanie naszej komendy po wylogowaniu sie z systemu.


stat4u stat4u

Brak komentarzy:

Prześlij komentarz

Powered By Blogger