wprowadzenie do systemu unix
DESCRIPTION
Wprowadzenie do systemu UNIX. dr inż. Mariusz Kopeć pok. 216, D-10 tel. 617 4528 [email protected]. Program wykładów. Podstawowe wiadomości o Uniksie Rozpoczynamy pracę z systemem Gdzie szukać pomocy? Poznajemy podstawowe polecenia systemu Podstawy pracy w powłoce bash - PowerPoint PPT PresentationTRANSCRIPT
(C) Mariusz Kopeć, WFiTJ AGH, 2008 1
Wprowadzenie do systemu UNIX
dr inż. Mariusz Kopećpok. 216, D-10tel. 617 [email protected]
(C) Mariusz Kopeć, WFiTJ AGH, 2008 2
Program wykładów1. Podstawowe wiadomości o Uniksie2. Rozpoczynamy pracę z systemem3. Gdzie szukać pomocy?4. Poznajemy podstawowe polecenia systemu5. Podstawy pracy w powłoce bash6. Poznajemy filtry7. Tworzymy własne skrypty8. Przetwarzamy pliki9. Programy komunikacyjne i narzędzia sieciowe
(C) Mariusz Kopeć, WFiTJ AGH, 2008 3
Początki UNIXa 1965 MULTICS (MIT+ AT&T Bell Labs + GE)
MULTiplexed Information and Computing Service
1969 AT&T Bell Labs wycofuje się z projektu; Ken Thompson i Dennis Ritchie (Bell Labs)
pracując na własną rękę, tworzą w oparciu o idee MULTICSa nowy system UNICS,(UNiplexed Information and Computing Service), który implementują na PDP-7
(C) Mariusz Kopeć, WFiTJ AGH, 2008 4
Początki UNIXa, cd 1971 AT&T UNIX First Edition (11/3/1971)
pierwsza oficjalna wersja systemu, zawierająca procesor tekstu, zaimplementowana na PDP-11
1973 3-th Edition UNIX (3/73) pojawiły się potoki (pipes) i filtry oraz kompilator języka C. Jądro systemu napisane w asemblerze.
1973 4-th Edition UNIX (11/73) jądro systemu napisane w C.
1975 6-th Edition UNIX (V6 UNIX) pierwsza wersja systemu powszechnie
dostępna poza Bell Labs.
(C) Mariusz Kopeć, WFiTJ AGH, 2008 5
BSD UNIX Na skutek problemów prawnych AT&T nie mogło zarabiać na
sprzedaży UNIXa – postanowiło więc udostępnić go uniwersytetom, gdzie system był dalej rozwijany.
1977 Bill Joy z Uniwersytetu Kalifornijskiego w Berkeley wydaje pierwszą wersję Berkeley Software Distribution, znaną jako 1BSD.
1980 W następstwie otrzymania kontraktu DARPA (Defense Advanced Research Projects Agency) Bill Joy tworzy w Berkeley kolejną dystrybucję: 4.1BSD.
1984 Powstaje 4.2BSD zawierająca TCP/IP. Rok wcześniej Bill Joy odchodzi, by stworzyć Sun Microsystems.
1986 Powstaje poprawiona wersja 4.3BSD. 1994 Powstaje ostatnia wersja z Berkeley: 4.4BSD.
(C) Mariusz Kopeć, WFiTJ AGH, 2008 6
AT&T UNIX 1982 UNIX System Group (AT&T) wypuszcza System III UNIX.
1983 UNIX System Development Labs (AT&T) wypuszcza System V UNIX Release 1 (SVR1).
1984 Powstaje System V UNIX Release 2 (SVR2). 1985 Pojawia się SVR3 zawierająca m.in. NFS (Network File System).
1992 UNIX System Labs (AT&T) wypuszcza SVR4.2. 1993 Novell kupuje USL od (AT&T) i wypuszcza SVR4.2MP. 1995 SCO (Santa Cruz Operation) kupuje Uniksa od Novella. 2001 Caldera (dystrybutor Linuxa) kupuje Uniksa od SCO.
(C) Mariusz Kopeć, WFiTJ AGH, 2008 7
Inne wersje UNIXa (wybrane)
Xenix – Microsoft HP-UX – HP IRIX – SGI SunOS – Sun Unicos – CRAY UnixWare - SCO
Ultrix – DEC AIX – IBM Mac OS X – Apple Solaris – Sun OpenServer – SCO ...
Komercyjne
Free 386/BSD – Bill Jolitz FreeBSD – Jordan Hubbard Minix – Andy Tannenbaum GNU – Richard Stallman
NetBSD OpenBSD – Theo de Raadt Linux – Linus Torvalds
(C) Mariusz Kopeć, WFiTJ AGH, 2008 8
Linux Kernel
Linus Torvalds, Univ. Helsinki, 1991 właściwy LINUX to kernel
Narzędzia (utilities) Głównie z Free Software Foundation GNU/Linux (GNU’s Not UNIX)
Dystrybucje kernel + narzędzia + programy pomocnicze i instalacyjne Red Hat – najpopularniejszy pakiet dystrybucyjny Caldera OpenLinux – również w pakietach komercyjnych Debian – projekt całkowicie niekomercyjny SuSE – dystrybucja w języku niemieckim Mandrake – zbliżona do Red Hat; łatwa instalacja i konfiguracja
(C) Mariusz Kopeć, WFiTJ AGH, 2008 9
System operacyjny UNIX
System operacyjny – zespół programów pośredniczących pomiędzy użytkownikiem komputera a warstwą sprzętową (hardware), organizujący całość pracy komputera, a w szczególności:
zarządzanie zasobami sprzętowymi; obsługę urządzeń wejścia-wyjścia; zarządzanie systemem plików; obsługę kont użytkowników i kontrolę dostępu.
(C) Mariusz Kopeć, WFiTJ AGH, 2008 10
Warstwy systemu UNIX Użytkownik
Warstwa sprzętowa (hardware)(CPU, pamięć, dyski, terminale, sterowniki, ...)
Interfejs warstwy sprzętowej
Jądro systemu (kernel)(zarządzanie procesami, pamięcią, zasobami, ...)
Interfejs wywołań systemowych
Biblioteki systemowe(open, read, write, ...)
Powłoki, polecenia, aplikacje Interfejs bibliotek
(programy, kompilatory,interpretery, ...)
Interfejs użytkownika
(C) Mariusz Kopeć, WFiTJ AGH, 2008 11
Zaczynamy pracę Rodzaje i uprawnienia użytkowników
superuser user
Identyfikacja użytkownika username password
Zmieniamy hasło polecenie passwd zasady doboru hasła (długość, zestaw znaków)
Kończymy pracę exit logout
(C) Mariusz Kopeć, WFiTJ AGH, 2008 12
Nazwy i polecenia Nazwa
case sensitive długość – zależna od implementacji (max. 255) zestaw znaków
znaki alfanumeryczne [A-Z], [a-z], [0-9] inne znaki: .=@#%^_+-:, znaki specjalne: `!$&*(){}[];”|’\<>?/spacja wprowadzanie znaku specjalnego, np.: Mój\ Plik
Polecenie nazwa-polecenia opcje parametry opcje najczęściej poprzedza „-” parametry oddzielane spacjami przykład: ls -l
(C) Mariusz Kopeć, WFiTJ AGH, 2008 13
Rozwijanie nazw Rozwijanie nazw plików przez system:
znak * zastępuje dowolną grupę znaków, np.: * plik1.dat plik2.dat test.out wyniki.dat wyniki.txt wyjątek: „.” na początku
znak ? zastępuje jeden dowolny znak, np.: plik?.dat plik1.dat plik2.dat
nawias kwadratowy [] określa grupę znaków z której może być wybrany jeden znak, np.:
[pt]*.* plik1.dat plik2.dat test.out [p-t]*.* plik1.dat plik2.dat test.out
klamra {} podaje pasującą grupę znaków, np.: w*.{dat,txt} wyniki.dat wyniki.txt
(C) Mariusz Kopeć, WFiTJ AGH, 2008 14
Pomoc on-line
info info –-usage info passwd
man man passwd man 5 passwd
apropos (man –k) apropos –h apropos passwd
whatis (man –f) whatis –h whatis passwd
(C) Mariusz Kopeć, WFiTJ AGH, 2008 15
Zmiany danych użytkownika Zmiana hasła
passwd
Zmiana danych osobistych użytkownika chfn
Zmiana defaultowej powłoki (shell) użytkownika chsh
(C) Mariusz Kopeć, WFiTJ AGH, 2008 16
Przydatne informacje Informacje o systemie
uname -a
Kim jesteśmy w sieci? hostname dnsdomainname
Kim jesteśmy w systemie? whoami who am i (who mom likes)
Kto pracuje w systemie? who w
(C) Mariusz Kopeć, WFiTJ AGH, 2008 17
System plików wszystko jest plikiem:
pliki zwykłe katalogi (zawierają inne pliki) pliki urządzeń
struktura drzewa wszystko zaczyna się od „/” (root – katalog główny) podkatalogi zawierają się w katalogach lub
podkatalogach kolejne poziomy katalogów oddzielamy przez „/”,
a nie przez „\” jak w Windows lub DOS katalog bieżący oznaczamy „.” katalog „rodzicielski” (parent directory) oznaczamy „..” każdy plik posiada pełną ścieżkę dostępu, np.:/home/jan/prog/program1.c
(C) Mariusz Kopeć, WFiTJ AGH, 2008 18
System plików - przykład
/
etc usr bin home lib dev
jan ewa adamlocalbin
dane progprogram1.c
(C) Mariusz Kopeć, WFiTJ AGH, 2008 19
Operacje na katalogach
ls wypisanie zawartości katalogu
pwd wypisanie katalogu bieżącego> pwd/home/stud/kowalski
> ls (tu to samo co ls /home/stud/kowalski)plik1.dat prog.e testy> ls -a. .. plik1.dat prog.e testy
> ls –a *plik1.dat prog.e
testy:. ..
Zauważ:1. * nie rozwija nazw . i ..2. testy to katalog; listowana jest
jego zawartość
(C) Mariusz Kopeć, WFiTJ AGH, 2008 20
Operacje na katalogach, cd
> ls –d *plik1.dat prog.e testy
> ls -l-rw-r--r-- 1 kowalski stud 10 Oct 10 2002 plik1.dat-rwxr-xr-x 1 kowalski stud 445 Jul 21 2001 prog.edrwxr-xr-x 2 kowalski stud 4096 Jul 21 2001 testy
mkdir utworzenie nowego katalogu> mkdir zajecia1;ls –d *plik1.dat prog.e testy zajecia1
> mkdir /home/stud/kowalski/zajecia1
(C) Mariusz Kopeć, WFiTJ AGH, 2008 21
Operacje na katalogach, cd cd zmiana katalogu bieżącego
> cd /usr/local;pwd/usr/local
> cd ..;pwd/usr
> cd;pwd/home/stud/kowalski
> cd -;pwd/usr
> cd ~/zajecia1;pwd/home/stud/kowalski/zajecia1
(C) Mariusz Kopeć, WFiTJ AGH, 2008 22
Operacje na katalogach, cd rmdir usunięcie katalogu (pustego)
> cd> rmdir zajecia1; lsplik1.dat prog.e testy
> mkdir zajecia1> mkdir zajecia1/zadanie1; ls zajecia1zadanie1> rmdir zajecia1rmdir: `zajecia1’: Directory not empty
> rm –r zajecia1; lsplik1.dat prog.e testy
Katalog nie jest pusty – trzeba inaczej:
Ostrożnie!
(C) Mariusz Kopeć, WFiTJ AGH, 2008 23
Prawa dostępu do pliku
-rwxr--r-- 1 user group ... prog1.e
read wartość = 4 (r albo -)write wartość = 2 (w albo -)execute wartość = 1 (x albo -)
u g oothersgroupuser
typ - zwykły plikd katalog...
execute:zwykły plik – program, scriptkatalog – wykonanie cd
mod tego pliku =
744
(C) Mariusz Kopeć, WFiTJ AGH, 2008 24
Zmiana praw dostępu Zmiana modu
chmod [-R] [kto]op[zezw][,...] plik kto - grupa znaków ugoa:
u – user g – group o – other a – all (a=ugo)
op - operacja: + - dodaj zezwolenie - - odbierz zezwolenie = - zastąp zezwolenie
zezw - typ zezwolenia: r – czytanie w – pisanie x – wykonanie (cd do katalogu)
(C) Mariusz Kopeć, WFiTJ AGH, 2008 25
Zmiana praw dostępu, cd Przykłady:
chmod a+x plik1.e chmod o-w plik1.e chmod u=rw,go=r plik1.e
chmod [-R] kod_oktalny plik kod_oktalny – suma kodów oktalnych w grupach:
user - r=400 w=200 x=100 group - r=040 w=020 x=010 others - r=004 w=002 x=001
Przykłady: chmod 644 plik1.e chmod 777 plik1.e
(C) Mariusz Kopeć, WFiTJ AGH, 2008 26
Zmiana praw dostępu, cd Zmiana właściciela
chown [-R] user[:group] plik user – właściciel pliku group - właściciel grupowy opcja –R - zmiany rekurencyjne w
podkatalogach Przykład:
chown jan:stud plik1.e
Zmiana właściciela grupowego chgrp [-R] group plik
group - właściciel grupowy opcja –R - zmiany rekurencyjne w podkatalogach
Przykład: chgrp stud plik1.e
Ostrożnie!
(C) Mariusz Kopeć, WFiTJ AGH, 2008 27
Operacje na plikach Utworzenie pliku
touch> touch plik2.dat; ls –l plik2.dat-rwxr-xr-x 1 kowalski stud 0 ... plik2.dat
cat> cat > plik2.datLinia1 wprowadzonego tekstu<Enter>Linia2 wprowadzonego tekstu<Enter>Ctrl-D> ls –l plik2.dat-rwxr-xr-x 1 kowalski stud 56 ... plik2.dat
dowolny edytor, np. vi> vi plik2.dat
(C) Mariusz Kopeć, WFiTJ AGH, 2008 28
Operacje na plikach, cd rm - usuwa jeden lub wiele plików (katalogów)
> rm plik usuwa plik> rm –r katalog usuwa rekurencyjnie katalog> rm –i * usuwa po potwierdzeniu
cp - kopiuje pliki (katalogi)> cp plik1 plik2 kopiuje plik1 do plik2> cp –R katalog1 katalog2 kopiuje rekurencyjnie
katalog1 do katalog2 mv – przenosi lub przemianowuje pliki (katalogi)
> mv plik1 plik2 przemianowuje plik1 na plik2> mv plik1 katalog1 przenosi plik1 do katalogu1
(C) Mariusz Kopeć, WFiTJ AGH, 2008 29
Operacje na plikach, cd Wypisanie zawartości pliku
cat – wypisanie zawartości jednego lub kilku plików> cat plik2.datLinia1 wprowadzonego tekstuLinia2 wprowadzonego tekstu
more – wypisanie zawartości pliku strona po stronie> more plik3.dat
less – wypisanie zawartości pliku strona po stronie> less plik3.dat
tac – wypisanie zawartości pliku od końca> tac plik2.datLinia2 wprowadzonego tekstuLinia1 wprowadzonego tekstu
(C) Mariusz Kopeć, WFiTJ AGH, 2008 30
Operacje na plikach, cd Wypisanie fragmentu pliku
head – wypisanie początkowych linii pliku (plików) head plik1 pierwsze 10 linii pliku head –n plik1 plik2 pierwsze n linii każdego pliku
tail – wypisanie końcowych linii pliku (plików) tail plik1 ostatnie 10 linii pliku tail –n plik1 ostatnie n linii pliku tail +n plik1 10 linii poczynając od n-tej
linii Wypisanie zawartości pliku w kolumnach
column – tworzenie tabeli column –t plik1 separatorem jest „biały znak” column –t –s: plik1 separatorem jest :
(C) Mariusz Kopeć, WFiTJ AGH, 2008 31
Operacje na plikach, cd Dzielenie plików
cut – wycina kolumny lub pola z pliku cut –c10-15 plik1 wypisuje 10.-15. znak z linii pliku
csplit – dzieli plik na części csplit plik1 10 30 tworzy trzy pliki: xx00, xx01, xx02
zawierające linie: 1 do 9, 10 do 29, od 30
cut –f3 –d\ plik1 wypisuje 3. pole z linii pliku
csplit plik1 /wz1/ /wz2/ tworzy trzy pliki:xx00 – od pierwszej linii,xx01 – od linii zawierającej wzorzec wz1xx02 – od linii zawierającej wzorzec wz2
(C) Mariusz Kopeć, WFiTJ AGH, 2008 32
Operacje na plikach, cd Łączenie plików
cat – łączy kilka plików w jeden (konkatenacja) cat p1 p2 p3 łączy kolejno p1, p2, p3
paste – łączy równolegle linie plików paste plik1 plik2 wypisuje w jednej linii
odpowiednielinie plików plik1 i plik2
join – łączy równolegle linie plików z polem łączącym Przykład: plik1: rok1 anna plik2: rok1 jan
rok2 ewa rok3 tom
> join plik1 plik2rok1 anna jan
(C) Mariusz Kopeć, WFiTJ AGH, 2008 33
Operacje na plikach, cd Sortowanie plików i ich przetwarzanie
sort – sortuje jeden lub kilka plików (konkatenacja) sort plik1 sortuje plik1
sort –k 2 p1 p2 dołącza p2 do p1 a następniesortuje wg pola 2
uniq – usuwa powtarzające się linie uniq plik1
comm – wypisuje takie same linie z dwóch plików comm plik1 plik2
uniq –t: -W2 plik1 bada tylko 2 pierwsze pola „:” jest separatorem pól
(C) Mariusz Kopeć, WFiTJ AGH, 2008 34
Operacje na plikach, cd Porównywanie plików
cmp – porównuje dwa pliki lub ciągi bajtów cmp plik1 plik2 pokazuje pierwszą różnicę
sdiff – wypisuje różnice między plikami sdiff -s p1 p2 wypisuje różniące się linie
sdiff –i -s p1 p2 ignoruje wielkość liter
diff3 – wypisuje różnice między trzema plikami diff3 p1 p2 p3 wypisuje różniące się linie
(C) Mariusz Kopeć, WFiTJ AGH, 2008 35
Ustalanie charakteru pliku file – określenie charakteru pliku:
> file ls.txtls.txt: ASCII English text, ...
> file /bin/ls/bin/ls: ELF 32-bit LSB executable, ...
stat – wypisanie statusu pliku: > stat ls.txt
File: „ls.txt” Size: 7132Device: 851h/2129hAccess: (0744/-rw-r—r-) Uid: (751/.) Gid: (700/.)Access: Tue Nov 4 14:02:00 2003Modify: Mon Oct 27 11:48:40 2003Change: Mon Oct 27 11:50:45 2003
(C) Mariusz Kopeć, WFiTJ AGH, 2008 36
Filtry Przetwarzają w określony sposób pliki wejściowe, np:
wyszukują wzorce sortują wycinają fragmenty linii edytują zliczają znaki, słowa, linie
Potoki (pipes) – przesyłają wyjście jednego poleceniabezpośrednio na wejście następnego:
polecenie1 | polecenie2 [ | polecenie3 ...]> ls -l | sort> cat ls.txt | head –n20 | wc
Działają zazwyczaj w trybie potokowym
(C) Mariusz Kopeć, WFiTJ AGH, 2008 37
Filtry: wc (word count) Wypisuje liczbę linii, słów, znaków w pliku
wc [opcje] [plik] [...] wc ls.txt wypisuje liczbę linii, słów i znaków w ls.txt
wc -l ls.txt wypisuje tylko liczbę linii w pliku ls.txt
wc -w ls.txt wypisuje tylko liczbę słów w pliku ls.txt
wc -c ls.txt wypisuje tylko liczbę znaków w pliku ls.txt
wc jako filtr > ls –l /usr/games | wc –l50
wc -l *.txt wypisuje liczbę linii w każdym z plików o zakończeniu „.txt” oraz ich sumę
(C) Mariusz Kopeć, WFiTJ AGH, 2008 38
Filtry: grep Wyszukuje linie zawierające wzorzec
grep [opcje] wzór [plik ...]
grep –inr ‘wz’ * wypisuje nazwy plików i numery linii zawierających ‘wz’ ignorując różnice wielkości liter. Badane są pliki w katalogu bieżącym i rekurencyjnie w podkatalogach.
grep ‘wz’ * wypisuje linie zawierające łańcuch ‘wz’, poprzedzone nazwą pliku
grep –v ‘wz’ * wypisuje linie nie zawierające łańcucha ‘wz’, poprzedzone nazwą pliku
grep –c ‘wz’ * wypisuje tylko nazwy plików i liczby linii zawierających łańcuch ‘wz’
(C) Mariusz Kopeć, WFiTJ AGH, 2008 39
Filtry: grep – wzorce wzorzec – wyrażenie regularne:
[^...] dowolny znak nie występujący na liście [^Pp]lik klik, ale nie plik
. dowolny znak ‘plik.a’ plik1a, plikaa12, ale nie plika
\ następny znak nie jest traktowany jako specjalny ‘plik\.’ plik.12, plik., ale nie plik1
[...] dowolny znak (jeden) z podanej listy [Pp]lik Plik, plik, ...
* zero lub więcej powtórzeń poprzedniego znaku ‘plik.*a’ plik.12a, plika123a, plik1a, ...
(C) Mariusz Kopeć, WFiTJ AGH, 2008 40
Filtry: grep – wzorce, cd ^ początek linii
‘^plik’ plik1a, plikaa12, ale nie replika
$ koniec linii ‘plik$’ nowyplik, ale nie plik1
\n odwołanie do n-tego podwyrażenia \(plik\).*\1 plik.*plik
\b łańcuch na krawędzi słowa ‘\bplik’ plik.12a, plika123a, ale nie replika ‘plik\b’ nowyplik
\(...\) określenie podwyrażenia \(plik\) plik jest pierwszym podwyrażeniem
(C) Mariusz Kopeć, WFiTJ AGH, 2008 41
Filtry: grep Przykłady zaawansowanego użycia wzorców:
> grep –v ’^$’ ls.txt Wypisuje wszystkie niepuste linie
> grep ’\(time\).*\1’ ls.txt Wypisuje wszystkie linie, w których „time” występuje więcej
niż jeden raz > grep ’\btime\b’ ls.txt
Wypisuje wszystkie linie, w których „time” występuje jakosamodzielne słowo
> file /etc | grep ’English text.*with’ Wypisuje z katalogu /etc nazwy plików zawierających tekst
angielski z dodatkowymi atrybutami
(C) Mariusz Kopeć, WFiTJ AGH, 2008 42
Filtry: sed – edytor strumieni Wykonuje ciąg poleceń edycyjnych na pliku
sed [-e skrypt] [...] [-f plikskryptu] [...] plik skrypt – ciąg poleceń; może być kilka skryptów plikskryptu – plik zawierający skrypt; może być ich kilka
Wybrane przykłady: > sed ’11,174d’ ls.txt
Kasuje z pliku ls.txt linie 11-174 > sed –n ’1,/Sort/p’ ls.txt
Wypisuje z ls.txt tylko linie od 1 do zawierającej „Sort” > sed –n ’/file/p’ ls.txt
Wypisuje z ls.txt tylko linie zawierające „file”
(C) Mariusz Kopeć, WFiTJ AGH, 2008 43
Filtry: sed – przykłady
> sed –n –e’s/character/file/g’ \? –e’s/file/FILE/p’ ls.txtZamienia w ls.txt „character” na „file” a następnie „file” na „FILE” i wypisuje linie w których dokonano drugiej zmiany
> sed –n ’/mod/s/time/TIME/p’ ls.txtZamienia „time” na „TIME” tylko w liniach zawierających „mod”, po czym wypisuje linie w których dokonano zmian
> ls –1 /usr/games | sed –n ’/^[crw].*s$/p’ Wypisuje z katalogu /usr/games nazwy plików zaczynające się na „c” lub „r” lub „w”, a kończące się na „s”.
> sed –n ’s/character/file/p’ ls.txtZamienia w ls.txt „character” na „file” i wypisuje tylko linie w których dokonano zmian
(C) Mariusz Kopeć, WFiTJ AGH, 2008 44
Filtry: tr – zamienia znaki Usuwa lub zamienia określone znaki innymi
tr [opcje] zestaw1 [zestaw2] zestaw1 – znaki do usunięcia lub zastąpienia zestaw2 – znaki zastępujące odpowiednio znaki z zestawu1
Wybrane przykłady: tr –d eEoO < ls.txt | head
Usuwa z pliku ls.txt znaki „e”, „E”, „o” i „O” tr ”[A-Z]” ”[a-z]” < ls.txt | head
Wypisuje plik ls.txt zamieniając duże litery na małe ls –l /usr | tr –s ”[:space:]”
Wypisuje zawartość katalogu /usr zastępując ciąg spacji jedną spacją echo J mpwf Vojy | tr B-z A-y ?
(C) Mariusz Kopeć, WFiTJ AGH, 2008 45
Filtry: awk (gawk) Przetwarza w określony sposób plik wejściowy
gawk ’wzór {akcja}’ [plik] [...]
Polecenie to zostanie omówione dokładniej w dalszej części wykładów
Wybrane przykłady:
> cat /etc/passwd | gawk ’/^[m-s].*\/csh$/’ Wypisuje z pliku /etc/passwd linie użytkowników zaczynających się na litery od „m” do „s”, używających csh jako login shell (ale nie tcsh)
> cat /etc/passwd | gawk –F: \? ’length($1)<7 {print $1,”\t”,$5}’Wypisuje z pliku /etc/passwd pierwsze i piąte pole każdej linii, przyjmując za separator pól znak „:”. Pomiędzy polami wpisywany jest znak tabulacji. Wypisywanie następuje jeżeli pierwsze pole liczy mniej niż 7 znaków.
> gawk ’/Andrzej/’ /etc/passwdWypisuje z pliku /etc/passwd linie zawierające łańcuch „Andrzej”
(C) Mariusz Kopeć, WFiTJ AGH, 2008 46
Filtry: tee Kopiuje wejście na wyjście i dodatkowo do pliku
tee [-a] plik [...] -a – dołącz do istniejącego pliku
Wybrane przykłady: cat ls.txt | tee kopia1 kopia2 | less
Wypisuje na ekranie plik ls.txt (strona po stronie) i tworzy dwie kopie: kopia1 i kopia2
ls –l /usr/games | tee usr.games | wcWypisuje ilość plików w katalogu /usr/games, którego zawartość zachowana zostaje w pliku usr.games
who | sort | tee users Wypisuje posortowaną listę zalogowanych użytkowników i zachowuje ją w pliku users
(C) Mariusz Kopeć, WFiTJ AGH, 2008 47
Filtry: przykłady who | tr –s ”[:space:]” | cut –f5 –d’ ’ | sort
Ciągi spacji na wyjściu komendy zamieniane są na jedną spację, następnie wycinane jest piąte pole z linii, przyjmując, że spacja jest separatorem. Posortowane wyjście wypisywane jest na ekran.
ls –la /etc | grep ’^d’ | wc -lWypisywana jest liczba podkatalogów w katalogu /etc. (Gdzie można sprawdzić czy jest poprawna?)
cat /etc/passwd | column –s: -t | sort | lessLista zarejestrowanych w systemie użytkowników wypisywana jest strona po stronie w formie posortowanej tabeli.
sort ls.txt | uniq | tee linie | wc -lZ posortowanego pliku ls.txt usuwane są powtarzające się kolejne linie, a wynik zapisywany jest w pliku „linie”. Na ekran wyświetlana jest ilość linii.
(C) Mariusz Kopeć, WFiTJ AGH, 2008 48
Kompresja plików gzip – kompresja/dekompresja zawartości plików
gzip [opcje] [plik] [...] Wybrane przykłady:
gzip ls.txtKompresuje plik ls.txt, na którego miejsce tworzony jest ls.txt.gz.
gzip –d ls.txt ( gunzip ls.txt)Dekompresuje plik ls.txt.gz, przywracając ls.txt.
gzip –r *Kompresuje wszystkie pliki w bieżącym katalogu i w podkatalogach
gzip –dr * ( gunzip –r *)Dekompresuje wszystkie pliki w bieżącym katalogu i w podkatalogach.
(C) Mariusz Kopeć, WFiTJ AGH, 2008 49
Archiwizacja plików tar – archiwizuje i odtwarza pliki
tar [opcje] [plik] [...]
Wybrane przykłady: tar –cvf mojkatalog.tar *
Tworzy archiwum mojkatalog.tar z bieżącego katalogu. tar –tvf mojkatalog.tar
Listuje zawartość archiwum mojkatalog.tar.
-c tworzy nowe archiwum -r dodaje pliki do istniejącego archiwum -x wyciąga pliki z archiwum -f nazwa podaje nazwę archiwum -t listuje zawartość archiwum -v informuje o wykonywanych operacjach -z lub -j kompresja/dekompresja programem gzip lub
bzip2
(C) Mariusz Kopeć, WFiTJ AGH, 2008 50
Wyszukiwanie plików find – wyszukuje pliki i (opcjonalnie) wykonuje
na nich polecenia
lista katalogów:- lista nazw katalogów, które mają być przeszukiwane;- nazwy oddzielone spacjami;- jeżeli jej nie ma, przyjmowany jest katalog bieżący.
wyrażenie:- określa kryterium poszukiwań;- składa się z wyrażeń pierwotnych zwracających wartość
”prawda” lub ”fałsz”;- wyrażenie pierwotne mogą być grupowane lub łączone za pomocą operatorów logicznych;- jeżeli dla danego pliku wyrażenie jest fałszem, operacja jest przerywana i następuje przejście do kolejnego pliku.
find [lista katalogów] [wyrażenie]
(C) Mariusz Kopeć, WFiTJ AGH, 2008 51
Wyszukiwanie plików, cd podstawowe wyrażenia pierwotne:
-name plikprawda, jeżeli plik odpowiada nazwie bieżącej
-user użytkownikprawda, jeżeli plik należy do użytkownika użytkownik
-newer splikprawda, jeżeli plik jest nowszy niż splik
-type cprawda, jeżeli plik jest typu c (b,c,d,p,f,l,s)
-printprawda; wypisuje nazwę pliku
-exec polecenieprawda jeżeli polecenie zwraca kod wyjścia 0;polecenie kończy się znakiem \;nazwa pliku jest reprezentowana przez {}
(C) Mariusz Kopeć, WFiTJ AGH, 2008 52
Wyszukiwanie plików, cd operatory:
\( ... \) grupowanie ! ... negacja -a (lub nic) koniunkcja -o alternatywa
find . –name ’*.cpp’ -print
przykłady:
find . –atime +20 –exec rm {} \; find . \( -name ’*.[cf]’ –o –name ’*.old’ \) \–atime –5 -print –exec cat {} \;
find . –name ’*.cpp’ –size 512c rm {} \;
(C) Mariusz Kopeć, WFiTJ AGH, 2008 53
Wyszukiwanie plików, cd slocate – wyszukuje pliki w bazie danych
systemu najważniejsze opcje:
- i ignoruj różnice w wielkości liter;- e wypisuj tylko istniejące pliki (co spowalnia działanie);
wzorzec_nazwy:- określa wzorzec nazwy wyszukiwanych plików;- uwaga: metaznaki ’*’, ’?’, ’[’ i ’]’ nie traktują w sposób specjalny znaków ’.’ i ’/’;- jeżeli wzorzec nazwy jest wyrażeniem prostym bez metaznaków, to zwracane nie są nazwy plików zgodne z podanym wyrażeniem, ale zawierające podane wyrażenie;
slocate [opcje] wzorzec_nazwy
przykład:slocate plik
(C) Mariusz Kopeć, WFiTJ AGH, 2008 54
Wyszukiwanie plików, cd whereis – wyszukuje pliki binarne, źródłowe
albo pliki manuala poleceń
najważniejsze opcje:- b wypisuje tylko pliki binarne;- m wypisuje tylko pliki manuala;- s wypisuje tylko pliki źródłowe;- u wypisuje pliki nie należące do powyższych kategorii
whereis [opcje] nazwa
przykłady: whereis ls whereis –m l* whereis –m –u l*
(C) Mariusz Kopeć, WFiTJ AGH, 2008 55
Lokalizacja pliku polecenia which – podaje pełną nazwę pliku, który zostanie
wywołany w przypadku wykonywania polecenia o podanej nazwie
opcja -a:wypisuje wszystkie nazwy plików o podanej nazwie, które mogą zostać wykonane;
which [-a] nazwa
przykłady: which test which –a te* which –a MojProg
(C) Mariusz Kopeć, WFiTJ AGH, 2008 56
Powłoki (shells) Podstawowe zadania powłoki:
interfejs między użytkownikiem a jądrem
język programowania interpreter poleceń
Najważniejsze rodzaje powłok: sh (Bourne shell)
bash (Bourne again shell) csh (C shell) tcsh (C shell improved)
(C) Mariusz Kopeć, WFiTJ AGH, 2008 57
Powłoki Co robi powłoka:
wczytuje wejście (z pliku lub terminala)
przetwarza tokeny na polecenia dzieli wejście na słowa i operatory (tokeny)
zamienia pewne tokeny (np. *) na odpowiednie listy (np. plików)
dokonuje odpowiednich przekierowań strumieni i usuwa odpowiednie operatory i argumenty z listy
wykonuje polecenie czeka na zakończenie polecenia (opcjonalnie)
(C) Mariusz Kopeć, WFiTJ AGH, 2008 58
bash – znaki specjalne Niektóre znaki specjalne powłoki:
blank spacja lub tabulator
<, > przekierowanie strumieni
| potok (pipe)
(, ) definiowanie podpowłoki ; koniec polecenia & wykonanie polecenia w tle
metaznaki
metaznaki nie muszą być otoczone przez blank
(C) Mariusz Kopeć, WFiTJ AGH, 2008 59
bash – znaki specjalne
’ ’ anuluje specjalne znaczenie znaków
\Enter kontynuacja w następnej linii
# komentarz (działa do końca linii)
\ następny znak (poza Enter) nie ma specjalnego znaczenia, np:> mkdir Moje\ wyniki
inne znaki specjalne:
anulowanie specjalnego znaczenia znaków:
” ” anuluje specjalne znaczenie znaków z wyjątkiemznaków ’$’, ’\’, ’`’
(C) Mariusz Kopeć, WFiTJ AGH, 2008 60
bash - rozwinięcia
~aga katalog domowy użytkownika aga > echo ~aga/home/stud/aga
{a,b} podstawiana jest lista a b :> echo {a,b}{a,b}aa ab ba bb
~ $HOME (katalog domowy użytkownika)> echo ~/home/prac/mariusz
rozwinięcie nawiasów klamrowych {}:
rozwinięcie tyldy ~:
~nic jeżeli wynikowy katalog nie istnieje to rozwinięcie nie jest przeprowadzane
(C) Mariusz Kopeć, WFiTJ AGH, 2008 61
bash - rozwinięcia
${par:-słowo} jeżeli parametr par jest ustawiony topodstawiana jest jego wartość :
> echo ${par:-~}projekt jeżeli nie, podstawiana jest wartość słowa, a parametr nie jest ustawiany:> echo ${rap:-~}/home/prac/mariusz
ustalam przykładowo wartość parametru par:> par=projekt
${par} projekt (= $par)> echo ${par}projekt
rozwinięcie parametrów:
(C) Mariusz Kopeć, WFiTJ AGH, 2008 62
${par:=słowo} jeżeli parametr par nie jest ustawiony to
podstawiana jest do niego wartość słowa:> echo $rap > echo ${rap:=~}/home/prac/mariusz> echo $rap/home/prac/mariusz
${par:+słowo} jeżeli parametr par nie jest ustawiony to
rozwinięcie jest puste; jeśli jest ustawiony, rozwinięcie jest rozwinięciem słowa:> echo ${par:+~}/home/prac/mariusz> echo $parprojekt
(C) Mariusz Kopeć, WFiTJ AGH, 2008 63
bash - podstawienia $(polecenie) podstawiany jest wynik polecenia
podstawienie poleceń:
albo `polecenie` podstawiany jest wynik polecenia
> echo ’Dlugosc pliku:’ \> `cat ls.txt | wc –l` \> ’linii’Dlugosc pliku: 198 linii
(C) Mariusz Kopeć, WFiTJ AGH, 2008 64
bash - podstawienia * ciąg znaków (w tym pusty) nie zaczynający się od ’.’
podstawienie nazw plików:
? jeden dowolny znak (ale nie ’.’ na początku) [...] jeden z wymienionych znaków [.-.] jeden znak z zakresu
[!...] jeden znak z wyłączeniem wymienionych jak to działa?
wynikiem podstawienia jest lista nazw plików z bieżącego katalogu, pasujących do podanego wzorca
jeżeli lista taka jest pusta, podstawienie nie jest dokonywane (wynikiem jest sam wzorzec)
(C) Mariusz Kopeć, WFiTJ AGH, 2008 65
bash - rozwinięcia $(( wyrażenie ))
rozwinięcie arytmetyczne:
jak to działa? wszystkie elementy wyrażenia podlegają rozwinięciu
parametrów i podstawieniu poleceń wynikiem rozwinięcia jest wynik wyrażenia arytmetycznego
przykłady: > echo $((2+5))7
> echo $((`ls –l | wc –l`+3))55
> echo $((`wc –l<ls.txt`>`ls –l|wc –l`))1
(C) Mariusz Kopeć, WFiTJ AGH, 2008 66
bash - rozwinięcia
+ - dodawanie i odejmowanie
kolejność działań w rozwinięciu:
< > <= >= porównania arytmetyczne
++id --id pre-in/dekrementacja zmiennej
id++ id-- post-in/dekrementacja zmiennej
! ~ negacja logiczna i binarna
- + znak – lub +
** potęgowanie * / % mnożenie, dzielenie, modulo
<< >> przesunięcia bitowe
== != równość i nierówność
(C) Mariusz Kopeć, WFiTJ AGH, 2008 67
bash - rozwinięcia kolejność działań, cd:
= *= /= %= += -= <<= >>= &= ^= |= przypisania
^ bitowe XOR
& bitowe AND
&& logiczne AND
| bitowe OR
expr1 , expr2 przecinek
|| logiczne OR expr ? expr : expr wyrażenie warunkowe
(C) Mariusz Kopeć, WFiTJ AGH, 2008 68
bash - przekierowania przekierowanie strumieni:
numery strumieni: 0 – standardowe wejście 1 – standardowe wyjście 2 – wyjście diagnostyczne (error)
przekierowanie wejścia: <word przekierowanie wyjścia: >word przekierowanie wyjścia diagn.: 2>word łączne przekierowanie 1 i 2: >word 2>&1
Uwaga: >word 2>&1 2>&1 >word
Operatory przekierowania (z zastrzeżeniem powyższej uwagi) mogą pojawić się w dowolnym miejscu linii polecenia, np.:> > ls.txt man ls
(C) Mariusz Kopeć, WFiTJ AGH, 2008 69
bash - przekierowania „here document”:> polecenie <<ogranicznik {nie „-”}> ....> ogranicznik
Przykład:> cat <<moj_ogr> 1 linia tekstu> moj_ogr1 linia tekstu
Ogranicznik w linii polecenia nie musi być dosunięty :> cat << moj_ogr> 1 linia tekstu> moj_ogr1 linia tekstu
(C) Mariusz Kopeć, WFiTJ AGH, 2008 70
bash - przekierowania
Znak ’-’ dosunięty do operatora daje osobny operator ’<<-’, którego działanie umożliwia wprowadzanie końcowego ogranicznika poprzedzonego znakami tabulacji:
Znak ’-’ może być ogranicznikiem, jeżeli nie jest dosunięty do operatora przekierowania:
> cat << -> 1 linia tekstu> -1 linia tekstu
> cat <<- moj_ogr> 1 linia tekstu> moj_ogr1 linia tekstu
(C) Mariusz Kopeć, WFiTJ AGH, 2008 71
bash - przekierowaniaJeżeli ogranicznik jest ujęty w apostrofy, to wprowadzane linie nie są rozwijane; w przeciwnym razie podlegają one rozwinięciu para-metrów, rozwinięciu arytmetycznemu i podstawieniu poleceń:
> cat <<’moj_ogr’> `whoami`> moj_ogr`whoami`
Zagadka:co będzie wynikiem następującego polecenia:
> cat <<moj_ogr> `whoami`> moj_ogrmariusz
ale
> <<- - cat - ls.txt> $((2+5))> -
7zawartość pliku ls.txt
(C) Mariusz Kopeć, WFiTJ AGH, 2008 72
bash - listy Lista – sekwencja poleceń (potoków)
oddzielonych separatorami: ; & && || polecenie1 & polecenie2
polecenie1 wykonywane jest asynchronicznie (w tle) polecenie1 ; polecenie2
polecenie1 i polecenie2 wykonywane są sekwencyjnie polecenie1 && polecenie2
polecenie2 wykonywane jest tylko wtedy, gdy polecenie1 zwróci status 0 (zakończy się sukcesem)
polecenie1 || polecenie2 polecenie2 wykonywane jest tylko wtedy, gdy
polecenie1 zwróci status 0 (zakończy się błędem)
(C) Mariusz Kopeć, WFiTJ AGH, 2008 73
bash – grupowanie poleceń Grupowanie poleceń – lista wykonywana jest
jako osobna całośćprzekierowanie strumieni może wówczas dotyczyć całej grupy
(lista) tworzona jest podpowłoka w której lista jest wykonywana> (mkdir Test; cd Test)> pwd/home/prac/mariusz
{ lista; } lista jest wykonywana w bieżącej powłoce> { mkdir Test; cd Test; }> pwd/home/prac/mariusz/Test
(C) Mariusz Kopeć, WFiTJ AGH, 2008 74
bash - test Polecenie test
test [wartość1] operator wartość2albo [ [wartość1] operator wartość2] porównania liczbowe
-gt większy od -lt mniejszy od -eq równy -ge większy lub równy -le mniejszy lub równy -ne różny od
Zwraca wynik wyrażenia testującego
(C) Mariusz Kopeć, WFiTJ AGH, 2008 75
bash - test przykład:
[ $zm –eq 1 ] zwraca 0 gdy wartość zmiennej”zm” jest równa 1
wybrane operacje na plikach: -e plik plik istnieje -d plik plik istnieje i jest katalogiem -f plik plik istnieje i jest plikiem zwykłym -r plik plik istnieje i można go czytać -w plik plik istnieje i można do niego pisać -x plik istnieje i można go wykonać
przykład:[ –f moj_plik ] zwraca 0 gdy ”moj_plik” istnieje i jest plikiem zwykłym
(C) Mariusz Kopeć, WFiTJ AGH, 2008 76
bash - test wybrane operacje na tekstach (stringach):
string string ma niezerową długość -z string string ma zerową długość string1=string2 stringi 1 i 2 są równe string1==string2 to samo co powyżej string1!=string2 stringi 1 i 2 nie są równe string1<string2 string1 poprzedza leksykalnie string2 string1>string2 string2 poprzedza leksykalnie string1
przykłady:[ $odp = ”tak”] zmienna ”odp” ma wartość ”tak”
[ $zmienna ] ”zmienna” ma niezerową długość
[ -z $zmienna ] ”zmienna” ma zerową długość
(C) Mariusz Kopeć, WFiTJ AGH, 2008 77
bash - let Polecenie let
let wyrażeniealbo ((wyrażenie))
Wykonuje operacje na wielkościach arytmetycznych
W wyrażeniach występują wartości lub zmienne numeryczne oraz operatory opisane w rozwinięciu arytmetycznym. Przykłady:> let n=n+1> ((m=m+1))
> ((m>n))
(C) Mariusz Kopeć, WFiTJ AGH, 2008 78
bash - let Odnosząc się do wartości zmiennej nie musimy poprzedzać jej znakiem ”$”
Użyte zmienne nienumeryczne inicjowane są wartością 0
W konstrukcji (( ... )) w wyrażeniach mogą występować spacje:
> m=sto> ((m=m+1))> echo $m1
> unset m> ((m=m+1))> echo $m1
> (( m = m + 1 )) ok W konstrukcji let wyrażenia ze spacjami muszą być ujęte w cudzysłowy:
> let m=m+1 ok> let ”m = m + 1” ok
> let m = m + 1 błąd
(C) Mariusz Kopeć, WFiTJ AGH, 2008 79
bash - let W wyrażeniach można używać operatora przecinka:
Jeżeli ostatnie wyrażenie ma wartość równą 0, to let zwraca 1,a w przeciwnym razie zwraca 0
> unset m> (( m = m+2, m++, m*=3 ))> echo $m1
> (( m = m+2, m++, m = 0 ))> echo $? wypisuje kod powrotu 1
> (( m=2, m++, m*=2 ))> echo $? wypisuje kod powrotu 0
(C) Mariusz Kopeć, WFiTJ AGH, 2008 80
bash - pętle Konstrukcje pętli
until until polecenia_testujące; do polecenia_do_wykonania; donepolecenia_do_wykonania wykonywane są tak długo, dopókipolecenia_testujące zwracają zerowy kod powrotu
while while polecenia_testujące; do polecenia_do_wykonania; donepolecenia_do_wykonania wykonywane są tak długo, dopókipolecenia_testujące zwracają niezerowy kod powrotu
Uwaga: syntaktyczny ’;’ może być zastąpiony przez znak nowej linii (/Enter)
(C) Mariusz Kopeć, WFiTJ AGH, 2008 81
bash - pętle Przykłady pętli until
> m=5> until [ $m –eq 0 ]; do> let m=m-1> echo –n ”$m ”> done4 3 2 1 0
> m=5> until ((m--=0)); do> echo –n ”$m ”> done4 3 2 1 0
(C) Mariusz Kopeć, WFiTJ AGH, 2008 82
bash - pętle Przykłady pętli while
> m=5> while [ $m –gt 0 ]; do> let m=m-1> echo –n ”$m ”> done4 3 2 1 0
> m=5> while ((m-->0)); do> echo –n ”$m ”> done4 3 2 1 0
(C) Mariusz Kopeć, WFiTJ AGH, 2008 83
bash - pętle for
for nazwa [in słowo ...]; do polecenia_do_wykonania; donesłowo jest rozwijane; polecenia_do_wykonania wykonywane sątak długo, dopóki nazwa odpowiada kolejnym elementomrozwinięcia; jeżeli [in słowo ...] nie pojawia się, porównuje sięnazwę z kolejnymi parametrami pozycyjnymi
for (( wyr1; wyr2; wyr3 )); do polecenia_do_wykonania; donewyrażenia wyr1, wyr2, wyr3 są wyrażeniami arytmetycznymi, adziałanie pętli jest takie jak w C
(C) Mariusz Kopeć, WFiTJ AGH, 2008 84
bash - pętle
> for name in *.c; do> echo ”Nazwa pliku: $name”> done
Przykłady pętli for
> for name; do> echo ”Kolejny parametr: $name”> done
> for ((n=0; n<5; n++)); do> echo ”N=$n”> done
(C) Mariusz Kopeć, WFiTJ AGH, 2008 85
bash – instrukcje warunkowe Konstrukcje warunkowe
if if polecenia_testujące; then
polecenia_do_wykonania;[elif inne_polecenia_testujące; then
inne_polecenia_do_wykonania;][else polecenia_alternatywne;]fi
w zależności od wyniku poleceń testujących wykonywane sąodpowiednie zestawy poleceń
Uwaga: syntaktyczny ’;’ może być zastąpiony przez znak nowej linii (/Enter)
(C) Mariusz Kopeć, WFiTJ AGH, 2008 86
bash – instrukcje warunkowe
case case słowo in [ [(] wzór [| wzór] ... ) polecenia ;; ... esacjeżeli słowo znajduje się na liście wzorów, to wykonywane
sąpolecenia
Przykładcase $swiatlo inczerwone ) echo ”STOP” ;;zielone ) echo ”JAZDA” ;;default ) echo ”CZEKAJ” ;;esac
(C) Mariusz Kopeć, WFiTJ AGH, 2008 87
bash – parametry Parametry i zmienne powłoki
parametry – przechowują wartość (nazwę, liczbę, ...) parametry pozycyjne: np. $1, $9, ${12}
kolejne parametry z linii wywołania polecenia parametry specjalne:
$0 – nazwa powłoki lub wykonywanego skryptu $* – wszystkie parametry pozycyjne razem $# – ilość parametrów pozycyjnych
Przykład: > cat mtestecho ’$1=’$1’ $2=’$2’ $0=’$0’ $#=’$#’ $*=’$*> . mtest Moj test$1=Moj $2=test $0=bash $#=2 $*=Moj test
(C) Mariusz Kopeć, WFiTJ AGH, 2008 88
bash - zmienne zmienne – nazwane parametry
przypisanie zmiennej wartości: zmienna1=wartość
podczas przypisania dokonywane są wszystkie konieczne rozwinięcia
do wartości zmiennej odwołujemy się następująco: $zmienna1
Przykład 1:> zmienna1=~> echo $zmienna1> /home/prac/mariusz
Przykład 2:> i=5> j=$i+2> echo $((j))7
(C) Mariusz Kopeć, WFiTJ AGH, 2008 89
bash – zmienne powłoki zmienne powłoki (automatycznie ustawiane)
zmienne powłoki sh (są też w bash): HOME katalog domowy użytkownika
IFS lista znaków-separatorów pól
PATH lista katalogów, w których powłoka szuka programów do wykonania
PS1 podstawowy znak zachęty powłoki (default: ’\s-\v\$’)
PS2 drugi znak zachęty powłoki (default: ’> ’)
Jak odczytać ich wartości? Na przykład: > echo $PATH
(C) Mariusz Kopeć, WFiTJ AGH, 2008 90
bash – zmienne powłoki zmienne powłoki bash (w sh ich nie było):
BASH_VERSION numer wersji wykonywanej powłoki bash
HISTSIZE max. liczba pamiętanych poleceń (d: 500)
HOSTNAME nazwa hosta
PROMPT_COMMAND polecenie wykonywane przed wypisaniem $PS1
HOSTTYPE typ maszyny MACHTYPE typ maszyny
PWD bieżący katalog UID identyfikator użytkownika
(C) Mariusz Kopeć, WFiTJ AGH, 2008 91
bash – wykonywanie poleceń Jak powłoka znajduje polecenia do wykonania?
1. Jeżeli nazwa polecenia zawiera ’/’ to polecenie traktowane jest jako program i wykonywane we własnym środowisku.
2. Jeżeli nie, to wykonywana jest funkcja powłoki o tej nazwie (o ile istnieje). Wykonanie następuje w środowisku powłoki.
3. Jeżeli takiej funkcji nie ma, to wykonywane jest polecenie wbudowane powłoki (builtin) o tej nazwie. Wykonanie następuje w środowisku powłoki.
4. Jeżeli takiego polecenia nie ma, to program o podanej nazwie poszukiwany jest w katalogach podanych w PATH. Wykonanie następuje w osobnym środowisku.
5. Jeżeli znaleziony plik nie jest w formacie wykonywalnym, to traktowany jest jako skrypt powłoki.
(C) Mariusz Kopeć, WFiTJ AGH, 2008 92
bash – funkcje powłoki Funkcje powłoki
grupują polecenia do późniejszego wykonania [function] nazwa () { lista polecen; } Przykład:
> moja_funkcja () {> echo To jest moja funkcja> ls> ls –l | wc –l; }> moja_funkcjaTo jest moja funkcjals.txt plik1.txt plik2.txt3
(C) Mariusz Kopeć, WFiTJ AGH, 2008 93
bash – polecenia wbudowane Polecenia wbudowane powłoki sh
. polecenie [argumenty]wykonuje polecenie (program) w bieżącym środowisku
cd [nazwa katalogu]zmienia bieżący katalog
pwd [nazwa katalogu]wypisuje nazwę bieżącego katalogu
exit [n]kończy pracę powłoki zwracając kod wyjścia n
export [nazwa[=wartość]]przekazuje wielkość określoną przez nazwę (zmienną,funkcję powłoki) do środowisk procesów potomnych; jeżeli nazwy nie podano wypisuje eksportowane wielkości
(C) Mariusz Kopeć, WFiTJ AGH, 2008 94
bash – polecnia wbudowane
return [n]wyjście z funkcji powłoki z kodem n
shift [n]przesunięcie parametrów pozycyjnych o n pozycji
test wyrażenie lub [ wyrażenie ]zwraca wynik opracowania wyrażenia
set [ -opcje ] [ -o opcje] [ argumenty ]ustawia lub kasuje atrybutu powłoki; set pokazuje zmienne
unset [nazwa]usuwa ustawione wcześniej zmienne lub funkcje powłoki
(C) Mariusz Kopeć, WFiTJ AGH, 2008 95
bash – polecenia wbudowane Polecenia wbudowane powłoki bash
alias [nazwa[=wartość]]ustawia lub wypisuje aliasy
declare [nazwa[=wartość]]deklaruje zmienne i nadaje im wartość; wypisuje zmienne
echo [argumenty]wypisuje argumenty oddzielając je blankami i kończąc \n
unalias [nazwa]usuwa aliasy
enable [-n] [-p] [polecenie wbudowane] uaktywnia/deaktywuje/wypisuje polecenia wbudowane
(C) Mariusz Kopeć, WFiTJ AGH, 2008 96
bash – polecenia wbudowane
logout [n]wyjście z powłoki logowania z kodem powrotu n
printf format [argumenty]wypisuje argumenty zgodnie z formatem
read [opcje] [nazwa ...]wczytuje linię ze standardowego wejścia
let wyrażenie [wyrażenie] wykonuje wyrażenie arytmetyczne
type [nazwa] wskazuje jak interpretowana będzie nazwa jeśli zostanie podana jako nazwa polecenia
(C) Mariusz Kopeć, WFiTJ AGH, 2008 97
bash – polecenia wbudowane
shopt [opcje]wypisuje albo przełącza atrybuty powłoki
ulimit [opcje] [limit]pokazuje albo ustawia limity powłoki
pushd katalogprzechodzi do katalogu i zapisuje go na stosie
popdzdejmuje nazwę katalogu ze stosu i wykonuje do niego cd
helpwyświetla informacje o poleceniach powłoki
dirswypisuje stos katalogów
(C) Mariusz Kopeć, WFiTJ AGH, 2008 98
bash – sterowanie procesami Polecenia sterowania procesami powłoki bash
jobswypisuje aktywne procesy
suspend (ctrl Z)zatrzymuje wykonanie procesu
bg nr_procesunp. %1kontynuacja realizacji zatrzymanego procesu w tle ( jak &)
fg nr_procesu np. %1kontynuacja realizacji zatrzymanego
kill [-s sygnał] nr_procesu lub pidprzesyła sygnał do procesu
(C) Mariusz Kopeć, WFiTJ AGH, 2008 99
bash - przykłady Przykłady rozwinięcia linii polecenia:
> echo cat `whoami` ~ $((2+3)) {a,b}c p?.txtcat mariusz /home/prac/mariusz 5 ac bc p1.txt p2.txt
> echo ls p*.txtls p1.txt pl1.txt pl2.txt plik1.txt plik2.txt p*.txt zastępowane jest odpowiednią listą plików
> echo ls p{l,lik}*.txtls pl1.txt pl2.txt plik1.txt plik2.txt rozwinięcie następuje w dwóch krokach:p{l,lik}*.txt -> pl*.txt plik*.txt -> ...
przeprowadzane są wszystkie konieczne rozwinięcia
(C) Mariusz Kopeć, WFiTJ AGH, 2008 100
bash - skrypty Skrypty
skrypt – sekwencja poleceń wykonywana przez interpreter (powłokę), zapisana jako samodzielny plik.
wykonanie skryptu: bash plik_skryptu skrypt jest
wykonywany w nowym otoczeniu
./plik_skryptu skrypt jest wykonywany w nowym otoczeniu. Uwaga: plik_skryptu musi mieć mod pozwalający na wykonanie
. plik_skryptu skrypt jest wykonywany w bieżącym otoczeniu
(C) Mariusz Kopeć, WFiTJ AGH, 2008 101
bash - skrypty ustalenie programu wykonującego skrypt -
w pierwszej linii skryptu podawana jest nazwa programu wraz z pełną ścieżką dostępu:
#!/bin/bash skrypt wykonany będzie przez bash #!/bin/csh skrypt wykonany będzie przez csh
mogą być też inne programy:
#!/bin/tcsh skrypt wykonany będzie przez tcsh
#!/bin/sed -f skrypt wykonany będzie przez sed #!/usr/bin/perl skrypt wykonany będzie przez perl #!/usr/bin/less skrypt wykonany będzie przez less
(C) Mariusz Kopeć, WFiTJ AGH, 2008 102
bash - skrypty Przykłady skryptów
#!/bin/bashparametry=””while [ $# -gt 1 ]; do
parametry=”$parametry $1”shift
doneostatni_parametr=$1shiftecho $parametryecho $ostatni_parametr
Skrypt z pętlą while, wypisujący ostatni podany parametr:
(C) Mariusz Kopeć, WFiTJ AGH, 2008 103
bash - skrypty
#!/bin/bashecho "Pytamy o plik $1"if [ -e $1 ]; then echo "Plik $1 istnieje"; if [ -d $1 ]; then echo "Plik $1 jest katalogiem"; else echo "Plik $1 nie jest katalogiem"; fielse echo "Plik $1 nie istnieje";fi
Skrypt z konstrukcją warunkową if
(C) Mariusz Kopeć, WFiTJ AGH, 2008 104
bash - skrypty
#!/bin/bashecho Rozwiniecie nazw plikow: *for ff in *; do if file $ff | grep text > /dev/null; then echo "Plik $ff jest plikiem tekstowym" fidone
Skrypt z pętlą for
Skrypt wypisuje nazwy plików z bieżącego katalogu i informuje czy dany plik jest plikiem tekstowym
Skrypt ten jest wywoływany bez parametrów
(C) Mariusz Kopeć, WFiTJ AGH, 2008 105
bash - skrypty
#!/bin/bashwhile true; do echo –n ”Wypisac biezacy katalog? (y/n) ” read yn case $yn in y* | Y* ) ls –l . ; break ;; [nN]* ) echo ”pomijamy” ; break ;; q* ) exit ;; * ) echo ”Niezrozumiala odpowiedz” ;; esacdone
Skrypt z pętlą while i konstrukcją case
(C) Mariusz Kopeć, WFiTJ AGH, 2008 106
bash - skrypty
#!/bin/basha=0 b=0 c=0 d=0while [ $a –le 4 ]; do echo $a $b $c $d a=$(($a + 1)) b=$((b + a)) d=$((c += a))done
Skrypt z obliczeniami arytmetycznymi
W rozwinięciu arytmetycznym zmienna może być używana bez poprzedzającego znaku $
Wynikiem rozwinięcia arytmetycznego jest wartość w instrukcji przypisania
(C) Mariusz Kopeć, WFiTJ AGH, 2008 107
bash - skrypty
#!/bin/bashkatalog=”$1”: ${katalog:=$HOME}echo ”Zawartosc katalogu $katalog:”ls –1 ”$katalog”
Skrypt zaw_kat wykorzystujący instrukcję pustą
Przykłady wykonania:> zaw_kat> Zawartosc katalogu /home/prac/mariusz...
> zaw_kat .> Zawartosc katalogu ....
(C) Mariusz Kopeć, WFiTJ AGH, 2008 108
bash –konfiguracja Podstawy konfiguracji powłoki
Pliki konfiguracyjne dla login shell /etc/profile
Pliki konfiguracyjne dla non-login shell
~/.bash_profile ~/.bash_login ~/.profile ~/.bash_logout
/etc/bashrc ~/.bashrc
(C) Mariusz Kopeć, WFiTJ AGH, 2008 109
bash - konfiguracja Konfiguracja znaku zachęty
PS1=’[\u@\h \w]\$’ znaczenie:
\u nazwa użytkownika \h nazwa hosta \H pełna nazwa hosta (z domeną) \w bieżący katalog \s nazwa powłoki \t czas HH:MM:SS \A czas HH:MM \$ # dla roota, $ dla innych \! numer polecenia w zapisie historii \n newline \\ backslash
(C) Mariusz Kopeć, WFiTJ AGH, 2008 110
bash – skróty klawiaturowe
Niektóre przydatne kombinacje klawiszy edycja linii komend
C-a przesunięcie kursora na początek linii C-e przesunięcie kursora na koniec linii C-l clear screen C-_ usuwanie wprowadzonych zmian (kolejne) A-r usunięcie wszystkich zmian
poruszanie się po pliku historii A-< na początek pliku historii A-> na koniec pliku historii C-r szukanie wstecz w pliku historii C-s szukanie do przodu w pliku historii
(C) Mariusz Kopeć, WFiTJ AGH, 2008 111
bash – skróty klawiaturowe
uzupełnienia TAB uzupełnienia ogółem A-? wypisz możliwe uzupełnienia A-/ uzupełnienie nazwy pliku A-~ uzupełnienie nazwy użytkownika A-@ uzupełnienie nazwy hosta A-! uzupełnienie poleceń
(C) Mariusz Kopeć, WFiTJ AGH, 2008 112
bash – historia poleceń Korzystanie z historii poleceń
fc –l listuje ostatnio wykonane polecenia wraz z ich numerami z listy historii
fc operuje na liście historii
fc –l n1 n2 listuje polecenia o numerach od n1 do n2
fc n1 n2 wpisuje polecenia o numerach od n1 do n2 do edytora; po edycji polecenia są kolejno wykonywane.
fc –s old=new wykonuje poprzednie polecenie po zastąpieniu old przez new
(C) Mariusz Kopeć, WFiTJ AGH, 2008 113
bash – historia poleceń
history [n] listuje [n] ostatnich pozycji z listy historii wraz z ich numerami; pozycje oznaczone ‘*’ zostały zmodyfikowane
history operuje na liście i/lub pliku historii
history -c kasuje listę historii
history -a dołącza nowe pozycje (wprowadzone od początku bieżącej sesji bash) do pliku historii
history -r wczytuje plik historii i dołącza jego zawartość do aktualnej listy historii
history –d n kasuje pozycję n z listy historii
(C) Mariusz Kopeć, WFiTJ AGH, 2008 114
bash – historia poleceń
!n linia n z listy historii
rozwinięcia historii
!-n linia –n pozycji wstecz na liście historii
!?string ostatnia linia zawierająca string
^old^new^ powtarza ostatnie polecenie zastępując old przez new
!! poprzednia linia (to samo co ’!-1’)
!string ostatnia linia zaczynająca się od string
!n:p wypisuje linię n z listy historii, ale jej nie wykonuje
(C) Mariusz Kopeć, WFiTJ AGH, 2008 115
Zarządzanie procesami
top pokazuje aktywne procesy z czasie rzeczywistym
Informacje o procesach
h lub ? help
f zmiana formatu wyświetlanych wyników
Sterowanie zachowaniem programu:
spacja odświeżenie ekranu
q quit
k przesłanie sygnału do procesu (kill)
n określenie ilości śledzonych procesów
(C) Mariusz Kopeć, WFiTJ AGH, 2008 116
Zarządzanie procesami 14:22:12 up 12 days, 4:55, 23 users, load average: 1.31, 1.21, 1.18219 processes: 217 sleeping, 2 running, 0 zombie, 0 stoppedCPU states: 0.4% user, 1.7% system, 49.8% nice, 48.7% idleMem: 515152K total, 462184K used, 52912K free, 25800K buffersSwap: 536136K total, 126633K used, 463500K free, 228936K cache
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND29203 mariusz 12 0 1076 1076 748 R 1.7 0.2 0.45 top 1 root 8 0 468 424 424 S 0.0 0.0 0.15 init...
PRI: priorytet procesuRSS: wykorzystywana pamięć fizycznaSTAT: status procesu (Running, Sleeping, Zombie, Traced/sTopped)%CPU: procentowe wykorzystanie czasu CPU%MEM: procentowe wykorzystanie pamięci
(C) Mariusz Kopeć, WFiTJ AGH, 2008 117
Zarządzanie procesami ps pokazuje aktywne procesy
ps –ef wypisuje wszystkie procesy w formacie pełnym
ps –fu user wypisuje wszystkie procesy użytkownika user
ps a wypisuje wszystkie procesy (w tym innych użytkowników) skojarzone z terminalami
ps –fNu user wypisuje wszystkie procesy użytkowników innych niż user (zwykle root)
ps –C nazwa wypisuje wszystkie procesy związane z poleceniem o podanej nazwie
(C) Mariusz Kopeć, WFiTJ AGH, 2008 118
Zarządzanie procesami pstree pokazuje działające procesy
w formie drzewa
pstree –a pokazuje działające procesy wraz z odpowiednimi argumentami linii poleceń
pstree –h zaznacza rozjaśnieniem bieżący proces oraz jego ’przodków’
pstree –p wypisuje dodatkowo PID procesów
(C) Mariusz Kopeć, WFiTJ AGH, 2008 119
Zarządzanie procesami kill przesyła sygnały do procesów
kill –l wypisuje numery i nazwy wszystkich sygnałow
kill –l n wypisuje nazwę sygnału o numerze n
kill pid ... przesyła sygnał TERM (terminate) do procesów o podanych identyfikatorach pid
kill –n pid przesyła sygnał o numerze n do procesu o podanym identyfikatorze pid
Przykład:> kill –9 1213 przesyła sygnał bezwarunkowego
zakończenia procesu o pid 1213
(C) Mariusz Kopeć, WFiTJ AGH, 2008 120
Zarządzanie procesami sleep opóźnia rozpoczęcie następnego
procesu o podany interwał czasu
sleep n[smhd] proces ”nic nie robi” (ale działa) przez n sekund. Dodany modyfikator [smhd] zmienia jednostki czasu:
s – sekundym – minutyh – godzinyd - dni
Przykład:> sleep 5s; ls polecenie ls zostanie
wykonane po 5 sek.
(C) Mariusz Kopeć, WFiTJ AGH, 2008 121
Zarządzanie procesami at wykonuje polecenie
wprowadzone ze standardowego wejścia w określonym czasie
at TIME rozpoczyna wykonanie polecenia o czasie TIME
Przykłady określenia czasu:
at –m TIME rozpoczyna wykonanie polecenia o czasie TIME i wysyła mail po zakończeniu działania polecenia
HH:MM10am Jul 311am tomorrownow + 3 weeks
(C) Mariusz Kopeć, WFiTJ AGH, 2008 122
Zarządzanie procesami atq wypisuje zadania użytkownika
oczekujące na rozpoczęcie wykonania
Przykład:
atrm nr usuwa zadanie o numerze nr z kolejki
> at –m now + 1 hour <<+> ls –l> +job 352 at 2004-01-22 09:24> atq352 2004-01-22 09:24 a mariusz> atrm 352
(C) Mariusz Kopeć, WFiTJ AGH, 2008 123
Zarządzanie procesami batch rozpoczyna wykonanie
zadania w tle kiedy obciążenie systemu na to pozwoli
Przykład:
batch -m wysyła mail po zakończeniu zadania
> batch <<+> ls –l> +job 353 at 2004-01-22 08:39
(C) Mariusz Kopeć, WFiTJ AGH, 2008 124
Zarządzanie procesami nohup wykonuje polecenie w
sposób ”odporny na zawieszenia” nohup polec & wykonuje polecenie polec
w tle, nawet jeśli polecenie to przesyła wyniki na wyjście standardowe lub diagnostyczne, które może zostać zamknięte (np. przez wylogowanie użytkownika)
Uwaga:Wyjście kierowane jest na plik nohup.out lub $HOME/nohup.out
Przykład:> nohup moj_program &
(C) Mariusz Kopeć, WFiTJ AGH, 2008 125
Przestrzeń dyskowa
du informuje o wykorzystaniu przestrzeni dyskowej
du podaje dane dla bieżącego katalogu i jego podkatalogów
Informacje o wykorzystaniu przestrzeni dyskowej
du -a podaje dane dla wszystkich plików w bieżącym katalogu i jego podkatalogach
du -s podaje tylko sumaryczne dane dla bieżącego katalogu i jego podkatalogów
du -h podaje dane w kilo-, mega- i gigabajtach
Przykład:> du –sh1.5M .
(C) Mariusz Kopeć, WFiTJ AGH, 2008 126
Przestrzeń dyskowa df pokazuje wykorzystanie
zamontowanych systemów plików df -l pokazuje tylko lokalne systemy plików
df -T wypisuje dodatkowo typy zamontowanych systemów plików
df –t typ podaje tylko dane dla określonego typu systemu plików
df -h podaje dane w kilo-, mega- i gigabajtach
df –x typ podaje dane z wyłączeniem określonego typu systemu plików
(C) Mariusz Kopeć, WFiTJ AGH, 2008 127
Przestrzeń dyskowa quota pokazuje wykorzystanie przestrzeni
dyskowej oraz przyznane limity
quota wypisuje dane dla bieżącego użytkownika
quota –g wypisuje dane dla grup, do których należy bieżący użytkownik
Przykład:
Disk quotas for user mariusz (uid 751):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 8 40960 50000 1 0 0
/dev/sdf1 39764 40960 50000 1099 0 0
> quota
(C) Mariusz Kopeć, WFiTJ AGH, 2008 128
AWK trochę dokładniej Uruchomienie AWK (GAWK)
gawk ’program’ [plik_wejściowy] [...]> gawk ’BEGIN {print ”Hello World!”}’> gawk ’{print}’ <<< ’Hello World!’> gawk ’//’ <<< ’Hello World!’
> gawk <<< ’Hello World!’ To nie będzie działać!
gawk -f plik_programu [plik_wejściowy] [...]> gawk –f plik.awk
plik.awk: BEGIN {print ”Hello World!”}
skrypt awk> #!/usr/bin/gawk -f> BEGIN {print ”Hello World!”}
(C) Mariusz Kopeć, WFiTJ AGH, 2008 129
AWK trochę dokładniej Program AWK
ciąg poleceń w układziewzorzec {akcja}
można pominąć wzorzec – akcja wykonywana dla wszystkich linii
można pominąć akcję – akcja domyślna: print nie można pominąć jednocześnie akcji i wzorca można podawać ciąg poleceń separowanych znakami nowej linii:
> gawk ’/time/ {print $1}> /size/ {print $2}’ plik_wejsciowy
kontynuacja przez ’\’ działa nawet we wzorcach:> gawk ’/Dlugi wzorzec mozna\> kontynuowac/ {print $0}’ plik_wejsciowy
komentarz ’#’ działa do końca linii
(C) Mariusz Kopeć, WFiTJ AGH, 2008 130
AWK zmienne specjalne zmienne specjalne:
$0 wczytany rekord $n n-te pole rekordu NF liczba wczytanych pól NR liczba wczytanych rekordów FNR liczba rekordów wczytanych z bieżącego pliku FS separator pól RS separator rekordów OFS wyjściowy separator pól ORS wyjściowy separator rekordów FILENAME nazwa aktualnie przetwarzanego pliku ARGC liczba podanych parametrów pozycyjnych ARGV tablica parametrów pozycyjnych ENVIRON tablica przetrzymująca zmienne środowiskowe
(C) Mariusz Kopeć, WFiTJ AGH, 2008 131
AWK operacje wejścia/wyjścia
operacje wejścia: next przerywa obróbkę bieżącego rekordu i pobiera następny exit zatrzymuje przetwarzanie rekordów i przechodzi do END getline zm pobiera rekord i wstawia jego zawartość do zmiennej zm getline <plik pobiera rekord z pliku plik close(plik) zamyka plik – przy ponownym użyciu rekordy pobierane
będą od początku plikuUwaga: getline zwraca wartość 1 aż do napotkania końca pliku, kiedy zwraca 0
operacje wyjścia: print wypisuje cały rekord na standardowe wyjście print ”a” ”b” wypisuje ”a” i ”b” na standardowe wyjście print ”a”,”b” wypisuje ”a” i ”b” rozdzielone przez OFS print > plik wypisuje rekord do pliku plik printf(format, arg1...) wypisuje kolejne argumenty zgodnie z
formatem (tak jak w języku C)
(C) Mariusz Kopeć, WFiTJ AGH, 2008 132
AWK operacje na tekście operacje na tekście:
length(str) zwraca liczbę znaków w str. Jeżeli nie podano argumentu, to zwraca liczbę znaków w $0;
index(str1,str2) jeżeli str1 zawiera str2 to zwraca pozycję, na której go znaleziono. Jeżeli nie – zwraca 0;
split(str,tab,zp) kopiuje pola ciągu str oddzielone znakami podziału zp do tablicy tab i zwraca liczbę jej elementów;
substr(str,poz,dl) zwraca podciąg łańcucha str, zaczynający się na pozycji poz i o długości dl;
match(str,wzór) poszukuje w ciągu str znaków pasujących do wzoru. Jeżeli je znajdzie – zwraca pozycję, jeżeli nie – zwraca 0;
sub(wzór,zast,str) zamienia wzór na zast w ciągu str. Jeżeli str nie podano - przyjmuje $0; Zwraca ilość podstawień;
gsub(wzór,zast,str) działa podobnie jak sub, ale globalnie: zamienia wszystkie wystąpienia, a nie tylko pierwsze;
sprintf(format,arg...) działa podobnie jak printf, ale nie drukuje tylko zwraca utworzony ciąg;
(C) Mariusz Kopeć, WFiTJ AGH, 2008 133
AWK operacje matematyczne
operacje na tekście, cd: toupper(str) zamienia wszystkie litery w str na duże;
operatory matematyczne ++ -- inkrementacja, dekrementacja; ^ potęgowanie; * / % mnożenie, dzielenie, modulo; + - dodawanie, odejmowanie; = *= /= %= += -= operatory przypisania
funkcje matematyczne int(x) zwraca część całkowitą x; sqrt(x) zwraca pierwiastek kwadratowy x; sin(x), cos(x) funkcje trygonometryczne; log(x), exp(x) logarytm i eksponenta; rand(), srand(liczba) generatory liczb pseudolosowych;
tolower(str) zamienia wszystkie litery w str na małe;
(C) Mariusz Kopeć, WFiTJ AGH, 2008 134
AWK operatory operatory porównania
== != równy, nierówny; > >= większy, większy lub równy; < <= mniejszy, mniejszy lub równy;
operatory logiczne ! && || negacja, koniunkcja, alternatywa;
operatory poszukiwania wzoru str ~ regex dopasowuje ciąg str do wyrażenia regularnego regex;
zwraca prawdę, jeżeli ciąg zawiera się w polu; str !~ regex negacja dopasowania; zwraca prawdę, jeżeli ciąg
nie zawiera się w polu;
(C) Mariusz Kopeć, WFiTJ AGH, 2008 135
AWK wzory wzory specjalne
BEGIN wykonuje operacje przed rozpoczęciem przetwarzania danych;
END wykonuje operacje po zakończeniu przetwarzania danych;
wzory zakresów war1,war2 odnosi się do zakresu linii zaczynającego się
od linii spełniającej warunek war1, a kończącego się na linii spełniającej warunek war2;
zmienne i tablice zmienne nie są deklarowane; są inicjowane wartością 0 lub
”” w zależności od kontekstu, w którym zostały użyte; tablice tablice asocjacyjne – indeksowane nie są liczbami
tylko napisami;
(C) Mariusz Kopeć, WFiTJ AGH, 2008 136
AWK wyrażenia regularne wyrażenia regularne
\ odbiera specjalne znaczenie następnemu znakowi;
^ dopasowuje początek stringu (nie koniecznie linii);
$ dopasowuje koniec stringu (nie koniecznie linii);
. dowolny znak, włączając w to ’\n’; [...] lista znaków – dowolny znak z listy; [^...] lista znaków – dowolny znak spoza listy; | operator alternatywy; (...) operator grupowania;
* zero lub więcej wystąpień poprzedniego znaku; + jedno lub więcej wystąpień poprzedniego znaku;
(C) Mariusz Kopeć, WFiTJ AGH, 2008 137
AWK wyrażenia regularne wyrażenia regularne, cd
? zero lub jedno wystąpienie poprzedniego znaku;
{n} powtórzenie poprzedniego wyrażenia n razy; {n,} powtórzenie co najmniej n razy; {,n} powtórzenie co najwyżej n razy; {m,n} powtórzenie od m do n razy; \w litera, cyfra lub ’_’; \W nie \w; \< pusty string na początku słowa; \> pusty string na końcu słowa; \B niepusty string na krawędzi słowa;
(C) Mariusz Kopeć, WFiTJ AGH, 2008 138
AWK instrukcje instrukcja warunkowa if if (warunek) instrukcja else instrukcja
Przykłady: if (x % 2 == 0) print ”x jest parzyste” else print ”x jest nieparzyste”
if (x % 2 == 0) print ”parzyste”; else print ”nieparzyste”
if (x % 2 == 0) { print ”parzyste” print ”OK”
} else print ”nieparzyste”
(C) Mariusz Kopeć, WFiTJ AGH, 2008 139
AWK instrukcje instrukcja while while (warunek) instrukcje
Przykład: awk ’{ i = 1
while (i <= 3) {print $ii++
} }’ plik_wejsciowy
Uwaga: przejścia do nowych linii nie są tu konieczne, (z wyjątkiem ciała instrukcji złożonej) ale zalecane
(C) Mariusz Kopeć, WFiTJ AGH, 2008 140
AWK instrukcje instrukcja do while do instrukcje while (warunek)
Przykład: awk ’{ i = 1
do {print $0i++
} while (i <= 10) }’ plik_wejsciowy
Uwaga: przejścia do nowych linii nie są tu konieczne, (z wyjątkiem ciała instrukcji złożonej) ale zalecane
(C) Mariusz Kopeć, WFiTJ AGH, 2008 141
AWK instrukcje instrukcja for for (inicjalizacja; warunek; inkrementacja)
Przykład: gawk ’{ for (i = 1; i <= 3; i++)
print $i (i <= 10) }’ plik_wejsciowy
for (index in tablica) index przyjmuje wartości kolejnych indeksów w tablicy Przykład:
gawk ’BEGIN {t[”jeden”]=1; t[”dwa”]=2; t[”trzy”]=3 for (i in t)
print i,t[i] }’
(C) Mariusz Kopeć, WFiTJ AGH, 2008 142
AWK instrukcje instrukcja switch switch (wyrażenie) {
case wartość lub regex:instrukcje
default:instrukcje
}
Uwagi: wyrażenie dopasowywane może być do wartości numerycznej,
stringu lub wyrażenia regularnego wykonanie instrukcji jest przerywane dopiero po napotkaniu:
- końca instrukcji switch- jednej z instrukcji: break, continue, next, nextfile, exit
(C) Mariusz Kopeć, WFiTJ AGH, 2008 143
AWK instrukcje instrukcja switch, cd
Przykład: switch (NR * 2 + 1) {
case 3: case ”11”:
print NR – 1break
case /2[[:digit:]]+/:print NR
default:print NR + 1
case –1:print NR * -1
}
(C) Mariusz Kopeć, WFiTJ AGH, 2008 144
AWK instrukcje instrukcja break
break Przerywa wykonanie najbardziej wewnętrznej pętli Poza pętlami traktowana jest jako błąd (POSIX)
Przykład:
{n = $1for (d=2; d*d<=n; d++)if (n%d == 0)breakif (n%d == 0)printf ”Najmniejszym podzieln. %d jest %d\n”,n,delseprintf ”%d to liczba pierwsza\n”,n}
(C) Mariusz Kopeć, WFiTJ AGH, 2008 145
AWK instrukcje instrukcja continue
continue Przerywa bieżący przebieg pętli i przechodzi do następnego Poza pętlami traktowana jest jako błąd (POSIX) Przykład:
BEGIN {for (x=0; x<=20; x++){
if (x == 5)continue
printf ”%d ”,x}print ””
}
(C) Mariusz Kopeć, WFiTJ AGH, 2008 146
AWK instrukcje instrukcja next
next Przerywa przetwarzanie bieżącego rekordu i przechodzi do
następnego;dalsza część akcji (w przeciwieństwie do skutku funkcji getline) nie jest realizowana
Przykład:
NF != 4 {err = sprintf(”%s:%d:NF != 4\n”,FILENAME,FNR)print err > ”/dev/stderr”next}
Przetwarzanie rekordu zawierającego liczbę pól inną niż 4 zostanie przerwane, a na wyjście diagnostyczne wysłany zostanie komunikat o błędzie
(C) Mariusz Kopeć, WFiTJ AGH, 2008 147
AWK instrukcje instrukcja nextfile (w gawk)
nextfile
Przykład:
NF != 4 { print ”%s nie ma 4 pol w rekordzie”,FILENAMEnextfile}{akcje dla pliku o 4 polach w rekordzie}
Przerywa przetwarzanie bieżącego pliku i przechodzi do następnego podanego w linii polecenia
Zmienia wartość zmiennej FILENAME, tak by odpowiadała nazwie kolejnego pliku
Ustawia wartość zmiennej FNR=1
(C) Mariusz Kopeć, WFiTJ AGH, 2008 148
AWK instrukcje instrukcja exit
exit [kod powrotu]
Przykład:
BEGIN { print ”Jestem w bloku BEGIN”; exit }NF == 6 { n++} END { print ”Znaleziono”,n,”rekordow” }
Przerywa przetwarzanie:- wykonane w bloku BEGIN lub po nim – przejście do bloku END- wykonane w bloku END – zakończenie przetwarzania
Program zostanie wykonany bez przetwarzania pliku wejściowego!
(C) Mariusz Kopeć, WFiTJ AGH, 2008 149
AWK tablice tablice asocjacyjne – indeksowane stringami, np.:
tab[”jeden”]=1tab[”dwa”]=2
indeks w postaci numerycznej zamieniany jest na string, np.:tab[17] tab[021] tab[0x11]
sprawdzenie, czy ind jest jednym z indeksów tablicy tab:ind in tab na przykład: if (ind in tab)
usuwanie elementów tablicy:delete tab[i]
usuwanie całej tablicy (gawk):delete tab
Uwaga: usunięcie tablicy nie zmienia jej typu, tzn. jej nazwa nie może być dalej używana jako nazwa zwykłej zmiennej
(C) Mariusz Kopeć, WFiTJ AGH, 2008 150
AWK sortowanie tablic sortowanie po wartościach – asort
asort(tab) - zwraca liczbę elementów tablicy i indeksuje ją na nowo liczbami od 1 do n, sortując wg. wartości jej elementów
asort(tab,cpy) - kopiuje tab do cpy, i działa dalej tak jak asort(cpy); tab pozostaje nienaruszone
Przykład:BEGIN { tab[”jeden”]=”one”
tab[”dwa”]=”two”tab[”trzy”]=”three”n = asort(tab,cpy)for (i in tab) print i,tab[i]for (i in cpy) print i,cpy[i]
}
(C) Mariusz Kopeć, WFiTJ AGH, 2008 151
AWK sortowanie tablic sortowanie po indeksach – asorti
asorti(tab) - zwraca liczbę elementów tablicy i indeksuje ją na nowo liczbami od 1 do n, sortując wg. wartości jej indeksów
asorti(tab,cpy) - kopiuje tab do cpy, i działa dalej tak jak asorti(cpy); tab pozostaje nienaruszone
Przykład:BEGIN { tab[”jeden”]=”one”
tab[”dwa”]=”two”tab[”trzy”]=”three”n = asorti(tab,cpy)for (i in tab) print i,tab[i]for (i in cpy) print i,cpy[i]
}
(C) Mariusz Kopeć, WFiTJ AGH, 2008 152
AWK funkcje użytkownika definiowanie funkcji użytkownika
function nazwa(lista_parametrów){ ciało funkcji }
Przykład:function drukuj(m){printf ”%6.3g\n”, m}
lista parametrów zawiera argumenty oraz zmienne lokalne argumenty ustalane są na podstawie wywołania – pozostałe
wielkości są zmiennymi lokalnymi zmienne lokalne są inicjowane stringami pustymi
(C) Mariusz Kopeć, WFiTJ AGH, 2008 153
AWK funkcje użytkownika zwracanie wartości przez funkcje
return [wyrażenie]
Przykład:function srednia(tab,n,suma){
for (i in tab) {n++; suma+=tab[i]}return suma/n
}
polecenie return zwraca wynik wyrażenia jeżeli wyrażenie nie zostało podane, to zwracana wartość
jest nieokreślona jeżeli return nie zostało użyte, to przyjmowane jest automatycznie na
końcu definicji funkcji, a zwracana wartość jest nieokreślona
(C) Mariusz Kopeć, WFiTJ AGH, 2008 154
AWK string i liczba typ wartości zmiennej (tekstowy lub numeryczny)
ustalany jest dynamicznie i zależy od kontekstu zmienne tekstowe użyte w operacjach arytmetycznych mają
wartość liczbową 0, np.:zero = ”zero”; x = 5 + zero; print x5
zmienne (i stałe) ustawione w wyrażeniach obok siebie traktowane są jako tekstowe i podlegają konkatenacji, np.:
m = 1; n = 2; print m n ” ” (m n + 5)12 17
zmienne (i stałe) numeryczne są zmiennoprzecinkowe:print 3/40.75
(C) Mariusz Kopeć, WFiTJ AGH, 2008 155
AWK komunikacja z procesami
gawk pozwala na tworzenie dwukierunkowych łączy z innymi procesami:BEGIN { command = ”read line; ls –l $line”
print ”/usr/games” |& commandwhile (command |& getline results)print ”>”,results }
BEGIN { Service = ”/inet/tcp/0/origin” \”.ftj.agh.edu.pl/daytime”
Service |& getlineprint $0close (Service) }
niekoniecznie na tej samej maszynie:
(C) Mariusz Kopeć, WFiTJ AGH, 2008 156
SED - uzupełnienia Przestrzeń wzorca (pattern space)
dane wejściowe dla każdego polecenia; zazwyczaj (ale nie zawsze) kolejna linia tekstu; zmieniają ja polecenia: N, n, x, g, G;
Polecenia # (comment)
cała linia jest ignorowana
D (delete the first part of the pattern space) usuwa wszystko aż do znaku ’\n’ z przestrzeni wzorca wykonanie startuje od początku skryptu z następną linią
d (delete) blokuje wypisanie linii na standardowe wyjście wykonanie startuje od początku skryptu
(C) Mariusz Kopeć, WFiTJ AGH, 2008 157
SED - polecenia
a\ (append) dodaje tekst za linią wskazaną przez adres, a jeśli go nie ma –
za każdą przetwarzaną linią
N (append Next line) do przestrzeni wzorca dopisywana jest zawartość następnej linii
poprzedzona znakiem ’\n’
i\ (insert) dodaje tekst przed linią wskazaną przez adres, a jeśli go nie ma
– przed każdą przetwarzaną linią c\ (change)
zmienia bieżącą przestrzeń wzorca (linię) na tekst
n (next) do przestrzeni wzorca wpisywana jest zawartość następnej linii wykonywane będzie następne polecenie
(C) Mariusz Kopeć, WFiTJ AGH, 2008 158
SED - polecenia polecenie musi stać w osobnej linii (albo być oddzielone ’;’)
Uwagi do poleceń a\, i\, c\
liczba wstawianych linii nie jest ograniczona kolejne linie, z wyjątkiem ostatniej, oddzielane są przez ’\’, np.:a\linia 1\linia 2\...linia n
wprowadzając kolejne linie w linii polecenia musimy stosować wielokrotne opcje ’-e’, np.:sed –e’/wzor/{;i\’ –e’Linia wstawiana przed wzorem’\-e’a\’ –e’1. linia wstawiana za wzorem\’ \-e’2. linia wstawiana za wzorem’ –e’}’
(C) Mariusz Kopeć, WFiTJ AGH, 2008 159
SED - polecenia s/RE/zastąpienie/[flagi] (substitute)
w liniach wskazanych przez adresy (albo we wszystkich) tekst pasujący do wyrażenia regularnego RE zastępowany jest przez zastąpienie;
w zastąpieniu wprowadzany jest surowy tekst, z wyjątkiem:& - zastępuje cały tekst dopasowany do RE\n (gdzie n jest cyfrą) – zastępuje n-tą grupę \(...\)\c (gdzie c nie jest cyfrą) – oznacza znak ’c’
znaki ’/’ mogą być zastąpione przez dowolne inne znaki;
flagi:brak – dokonywane jest tylko jedno zastąpienieg – dokonywane są wszystkie zastąpienia (global)n (gdzie n jest cyfrą) – dokonywane jest tylko n-te zastąpieniep – wypisuje przestrzeń wzorca po skutecznym zastąpieniu
Uwaga: jeżeli zastąpienie zostało dokonane, ustawiana jest flaga wykorzystywana przez polecenie test;
(C) Mariusz Kopeć, WFiTJ AGH, 2008 160
SED - polecenia p (print)
przesyła określone linie na standardowe wyjście
w file (write to file) wypisuje określone linie do pliku file
P (print first part of the pattern space) wypisuje z przestrzeni wzorca wszystko, aż do pierwszego ’\n’
l (list) działa podobnie jak p, ale wypisuje niektóre znaki specjalne w
formie \c (np. \n, \t)
r file (read from file) wstawia zawartość pliku file po określonej linii
(C) Mariusz Kopeć, WFiTJ AGH, 2008 161
SED - polecenia h (hold pattern space)
kopiuje przestrzeń wzorca do bufora, kasując jego zawartość
G (get - append) dołącza zawartość bufora do przestrzeni wzorca
H (hold pattern space - append) dodaje zawartość przestrzeni wzorca do końca bufora
g (get) kopiuje zawartość bufora do przestrzeni wzorca, kasując jej
dotychczasową zawartość
x (exchange) wymienia zawartość bufora i przestrzeni wzorca
(C) Mariusz Kopeć, WFiTJ AGH, 2008 162
SED - polecenia !polecenie (negacja)
neguje specyfikację adresu polecenia
:etykieta wstawia etykietę, do której mogą skakać polecenia branch i test
{} (grupowanie) grupuje polecenia wykonywane dla określonej linii pierwsze polecenie może pojawić się zaraz po ’{’ ’}’ musi być w osobnej linii grupowanie może być zagnieżdżone
betykieta (branch) wykonuje bezwarunkowy skok do etykiety jeżeli nie ma etykiety, skacze do końca skryptu
(C) Mariusz Kopeć, WFiTJ AGH, 2008 163
SED - polecenia tetykieta (test)
wykonuje skok do etykiety jeżeli polecenie substitute, działające na bieżącej przestrzeni adresowej ustawiło odpowiednią flagę
flaga jest ustawiana po dokonanym podstawieniu flaga jest resetowana po wykonaniu instrukcji test flaga jest resetowana po wczytaniu nowej linii
y/lista1/lista2 (translate) zamienia znaki listy1 odpowiednimi znakami listy2 listy 1 i 2 muszą być tej samej długości separatory ’/’ mogą być zastąpione innymi znakami
= (number) wypisuje numer bieżącej linii
q (quit) koniec działania sed
(C) Mariusz Kopeć, WFiTJ AGH, 2008 164
SED – przykłady skryptów Zliczanie linii inputu
#!/bin/sed –nf$=
Emulacja polecenia head#!/bin/sed –f10q
Rozdzielanie linii tekstu pustymi liniami#!/bin/sed –f/^$/d;G
Emulacja polecenia tail#!/bin/sed –f:a$q;N;11,$D;ba
(C) Mariusz Kopeć, WFiTJ AGH, 2008 165
SED – przykłady skryptów Odwrócenie kolejności znaków w linii
#!/bin/sed –f/./!bs/!/!!/gs/^/-!-/s/$/-!-/ta:as/-!-\([^!]\|!!\)\(.*\)\([^!]\|!!\)-!-/\3-!-\2-!-\1/tas/-!-//gs/!!/!/g
(C) Mariusz Kopeć, WFiTJ AGH, 2008 166
SED – przykłady skryptów Emulacja polecenia tac
#!/bin/sed -nf1{h;b;}G;h${g;p}