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 plikuhead -n lines filename
- określa n linii zamiast tych 10
tail filename
- wyświetli nam 10 ostatnich linijek pliku z tym, żetail -n lines filename
- określa n linii zamiast tych 10tail -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 programumore
- 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 plikuwc -l path/to/file
- zlicza ilość linii w plikuwc -w path/to/file
- zlicza ilość słów w plikuwc -c path/to/file
- zlicza ilość znaków w pliku
fmt path/to/file
- limit wyjścia na kolumny, domyślnie 75fmt -wnum path/to/file
- sami definiujemy limit kolumn na wyjście
expand
- zamienia tabulator na 8 spacjiunexpand
- zamienia spacje na tabulator ale to polecenie działa tylko na grupie, aby zastosować polecenie na całym pliku należy użyć przełącznikaunexpand -a filename
nl
- dodaje numer linii w plikutr
- przekształca z jednego zakresu do drugiegocat 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 liniepr 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ść literegrep /bin/*sh /etc/passwd
- wyszuka wszystkie możliwości wzorca, komenda ta wykonuje dokładnie to samo co komendagrep -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 komendagrep -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.
Brak komentarzy:
Prześlij komentarz