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:
    [nonus25@localhost ~]$ tail -n5 nicks
    gdm
    sabayon
    nonus25
    vboxadd
    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.
    [nonus25@localhost ~]$ tail -n5 user_info 
    gdm:/var/gdm
    sabayon:/home/sabayon
    nonus25:/home/nonus25
    vboxadd:/var/run/vboxadd
    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:
    [nonus25@localhost ~]$ tail -n5 num_user_info 
    44 gdm /var/gdm
    45 sabayon /home/sabayon
    46 nonus25 /home/nonus25
    47 vboxadd /var/run/vboxadd
    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:
    [nonus25@localhost ~]$ ls num_nick_??
    num_nick_aa  num_nick_ac  num_nick_ae  num_nick_ag  num_nick_ai
    num_nick_ab  num_nick_ad  num_nick_af  num_nick_ah  num_nick_aj
    [nonus25@localhost ~]$ cat num_nick_ai
        41  ricci
        42  haldaemon
        43  avahi-autoipd
        44  gdm
        45  sabayon
    [nonus25@localhost ~]$ cat num_nick_aj
        46  nonus25
        47  vboxadd
        48  oprofile
    
  • sort num_nick_aj - komenda posortuje plik według pierwszej kolumny
    [nonus25@localhost ~]$ cat num_nick_ai >> num_nick_aj
    [nonus25@localhost ~]$ cat num_nick_aj
        46  nonus25
        47  vboxadd
        48  oprofile
        41  ricci
        42  haldaemon
        43  avahi-autoipd
        44  gdm
        45  sabayon
    [nonus25@localhost ~]$ sort num_nick_aj | tee 8_users
        41  ricci
        42  haldaemon
        43  avahi-autoipd
        44  gdm
        45  sabayon
        46  nonus25
        47  vboxadd
        48  oprofile
    
    • sort -r 8_users - odwraca kolejność sortowania
      [nonus25@localhost ~]$ sort -r num_nick_aj | tee 8_users_rev
          48  oprofile
          47  vboxadd
          46  nonus25
          45  sabayon
          44  gdm
          43  avahi-autoipd
          42  haldaemon
          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.
    [nonus25@localhost ~]$ od num_nick_ai
    0000000 020040 020040 030464 071011 061551 064543 020012 020040
    0000020 032040 004462 060550 062154 062541 067555 005156 020040
    0000040 020040 031464 060411 060566 064550 060455 072165 064557
    0000060 062160 020012 020040 032040 004464 062147 005155 020040
    0000100 020040 032464 071411 061141 074541 067157 000012
    0000115
    
    • od -t x filename - konwertuje do hexadecimal (base 16) formatu, przykład pod spodem:
      [nonus25@localhost ~]$ od -t x num_nick_ai
      0000000 20202020 72093134 69636369 2020200a
      0000020 09323420 646c6168 6f6d6561 20200a6e
      0000040 33342020 61766109 612d6968 696f7475
      0000060 200a6470 34202020 64670934 20200a6d
      0000100 35342020 62617309 6e6f7961 0000000a
      0000115
      

Text Search Commands

  • grep word infile - komenda wyszukuje słowa w podanym pliku
    [nonus25@localhost ~]$ grep nonus25 /etc/passwd
    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
    [nonus25@localhost ~]$ grep -v -e bash -e bin /etc/passwd
    news:x:9:13:news:/etc/news:
    
  • rpm -qa | grep network - wyświetli nam pakiety zawierające w nazwie network
    [nonus25@localhost ~]$ rpm -qa | grep network
    system-config-network-tui-1.3.99.19-2.el5
    system-config-network-1.3.99.19-2.el5
    
  • grep -l search * - wyszuka plików zawierających dany wzorzec (search)
    [nonus25@localhost ~]$ sudo grep -l nonus25 /etc/*
    /etc/group
    /etc/group-
    /etc/gshadow
    /etc/gshadow-
    /etc/passwd
    /etc/passwd-
    /etc/shadow
    /etc/shadow-
    /etc/sudoers
    
  • grep -L search * - zwraca wszystkie pliki które nie zawierają poszukiwanego wzorca (search)
    [nonus25@localhost ~]$ sudo grep -L nonus25 /etc/*
    /etc/a2ps.cfg
    /etc/a2ps-site.cfg
    /etc/acpi
    /etc/adjtime
    /etc/ais
    /etc/alchemist
    ...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
    [nonus25@localhost ~]$ egrep /bin/*sh /etc/passwd
    /etc/passwd:root:x:0:0:root:/root:/bin/bash
    /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
    [nonus25@localhost ~]$ sudo fgrep nonus25 /etc/*
    /etc/group:nonus25:x:500:nonus25
    /etc/group-:nonus25:x:500:nonus25,adm
    /etc/gshadow:nonus25:!!::nonus25
    /etc/gshadow-:nonus25:!!::nonus25,adm
    /etc/passwd:nonus25:x:500:500:Augustyn Chmiel:/home/nonus25:/bin/bash
    /etc/passwd-:nonus25:x:500:500:Augustyn Chmiel:/home/nonus25:/bin/bash
    /etc/shadow:nonus25:$1$2sT4zRXm$sKcf4kdHiJ/yyCPlyFgCE0:15364:0:99999:7:::
    /etc/shadow-:nonus25:$1$2sT4zRXm$sKcf4kdHiJ/yyCPlyFgCE0:15364:0:99999:7:::
    /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:

[nonus25@localhost ~]$ cat num_nick_aj
    46  nonus25
    47  vboxadd
    48  oprofile
    41  ricci
    42  haldaemon
    43  avahi-autoipd
    44  gdm
    45  sabayon
[nonus25@localhost ~]$ sed '4d' num_nick_aj
    46  nonus25
    47  vboxadd
    48  oprofile
    42  haldaemon
    43  avahi-autoipd
    44  gdm
    45  sabayon
[nonus25@localhost ~]$ sed '4,6d' num_nick_aj
    46  nonus25
    47  vboxadd
    48  oprofile
    44  gdm
    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

[nonus25@localhost ~]$ cat num_nick_aj
    46  nonus25
    47  vboxadd
    48  oprofile
    41  ricci
    42  haldaemon
    43  avahi-autoipd
    44  gdm
    45  sabayon
[nonus25@localhost ~]$ sed 'y/can/_|N/' num_nick_aj
    46  NoNus25
    47  vbox|dd
    48  oprofile
    41  ri__i
    42  h|ld|emoN
    43  |v|hi-|utoipd
    44  gdm
    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:

[nonus25@localhost ~]$ cat num_nick_aj
    46  nonus25
    47  vboxadd
    48  oprofile
    41  ricci
    42  haldaemon
    43  avahi-autoipd
    44  gdm
    45  sabayon
[nonus25@localhost ~]$ sed 's/ricci/NONUS25/' num_nick_aj
    46  nonus25
    47  vboxadd
    48  oprofile
    41  NONUS25
    42  haldaemon
    43  avahi-autoipd
    44  gdm
    45  sabayon
[nonus25@localhost ~]$ sed -i 's/ricci/NONUS25/' num_nick_aj
[nonus25@localhost ~]$ cat num_nick_aj
    46  nonus25
    47  vboxadd
    48  oprofile
    41  NONUS25
    42  haldaemon
    43  avahi-autoipd
    44  gdm
    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
    [nonus25@localhost ~]$ ps
      PID TTY          TIME CMD
     2316 pts/0    00:00:00 ps
     4561 pts/0    00:00:06 bash
    16511 pts/0    00:00:02 yum
    16513 pts/0    00:00:00 yum
    
    • ps a - wyświetla listę wszystkich uruchomionych shell'ów
      [nonus25@localhost ~]$ ps a
        PID TTY      STAT   TIME COMMAND
       2342 pts/0    R+     0:00 ps a
       3207 tty1     Ss+    0:00 /sbin/mingetty tty1
       3208 tty2     Ss+    0:00 /sbin/mingetty tty2
       3209 tty3     Ss+    0:00 /sbin/mingetty tty3
       3212 tty4     Ss+    0:00 /sbin/mingetty tty4
       3213 tty5     Ss+    0:00 /sbin/mingetty tty5
       3216 tty6     Ss+    0:00 /sbin/mingetty tty6
       3256 tty7     Ss+   51:16 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth
       4561 pts/0    Ss     0:06 bash
      16511 pts/0    T      0:02 /usr/bin/python /usr/bin/yum info passwd
      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
      [nonus25@localhost ~]$ ps -u nonus25
        PID TTY          TIME CMD
       2338 pts/0    00:00:00 ps
       3271 ?        00:00:00 gnome-session
       3301 ?        00:00:01 VBoxClient
       3309 ?        00:00:00 VBoxClient
       3313 ?        00:00:00 VBoxClient
       3335 ?        00:00:17 ssh-agent
      ... etc.
      
    • ps aux - listuje wszystkie uruchomione procesy
      [nonus25@localhost ~]$ ps aux
      USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      root         1  0.0  0.1   2160   636 ?        Ss   Feb11   0:35 init [5]      
      root         2  0.0  0.0      0     0 ?        S<   Feb11   0:00 [migration/0]
      root         3  0.0  0.0      0     0 ?        SN   Feb11   0:00 [ksoftirqd/0]
      root         4  0.0  0.0      0     0 ?        S<   Feb11   0:00 [watchdog/0]
      root         5  0.0  0.0      0     0 ?        S<   Feb11   1:45 [events/0]
      ... etc.
      
    • ps -C command - listuje nam procesy dla danej komendy
      [nonus25@localhost ~]$ ps -C bash
        PID TTY          TIME CMD
       4561 pts/0    00:00:06 bash
      
    • pstree - listuje procesy jako drzewo hierarchii
      [nonus25@localhost ~]$ pstree
      init─┬─/usr/bin/sealer
           ├─3*[VBoxClient───{VBoxClient}]
           ├─VBoxService───6*[{VBoxService}]
           ├─acpid
           ├─at-spi-registry
           ├─atd
           ├─auditd─┬─audispd───{audispd}
           │        └─{auditd}
           └──┬─ ... 
              └─ etc.
      
  • top - podaje listę procesów
    top - 17:20:14 up 1 day, 15:23,  2 users,  load average: 0.60, 0.61, 0.56
    Tasks: 147 total,   3 running, 142 sleeping,   2 stopped,   0 zombie
    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
    Mem:    514900k total,   480068k used,    34832k free,    67372k buffers
    Swap:  1048568k total,      112k used,  1048456k free,   192204k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                    
     4558 nonus25   15   0 66348  18m  10m R 12.4  3.6   6:22.53 gnome-terminal                                                                                             
     3256 root      15   0 44692  11m 7132 S  9.6  2.2  51:36.07 Xorg                                                                                                       
     3374 nonus25   15   0 18068 9376 3332 S  3.8  1.8  29:11.95 at-spi-registry  
     ... etc.
    
    • uporządkowane poprzez użycie CPU & RAM
    • zawiera również informacje o swap
  • uptime - zawiera Informacje o stanie maszyny
    [nonus25@localhost ~]$ uptime 
     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:
    [nonus25@localhost ~]$ free
                 total       used       free     shared    buffers     cached
    Mem:        514900     482396      32504          0      67592     193520
    -/+ buffers/cache:     221284     293616
    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

[nonus25@localhost ~]$ top &
[3] 2453
[nonus25@localhost ~]$ sleep 11111 &
[4] 2454

[3]+  Stopped                 top
[nonus25@localhost ~]$ jobs -p && jobs 
16511
16513
2453
2454
[1]   Stopped                 yum info passwd
[2]-  Stopped                 yum check-update
[3]+  Stopped                 top
[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

Brak komentarzy:

Prześlij komentarz

Powered By Blogger