Wprowadzenie do systemu UNIX

166
(C) Mariusz Kopeć, WFiTJ AGH, 2008 1 Wprowadzenie do systemu UNIX dr inż. Mariusz Kopeć pok. 216, D-10 tel. 617 4528 mariusz @ novell . ftj . agh . edu . pl

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 Presentation

Transcript of Wprowadzenie do systemu UNIX

Page 2: Wprowadzenie do systemu  UNIX

(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

Page 3: Wprowadzenie do systemu  UNIX

(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

Page 4: Wprowadzenie do systemu  UNIX

(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.

Page 5: Wprowadzenie do systemu  UNIX

(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.

Page 6: Wprowadzenie do systemu  UNIX

(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.

Page 7: Wprowadzenie do systemu  UNIX

(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

Page 8: Wprowadzenie do systemu  UNIX

(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

Page 9: Wprowadzenie do systemu  UNIX

(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.

Page 10: Wprowadzenie do systemu  UNIX

(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

Page 11: Wprowadzenie do systemu  UNIX

(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

Page 12: Wprowadzenie do systemu  UNIX

(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

Page 13: Wprowadzenie do systemu  UNIX

(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

Page 14: Wprowadzenie do systemu  UNIX

(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

Page 15: Wprowadzenie do systemu  UNIX

(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

Page 16: Wprowadzenie do systemu  UNIX

(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

Page 17: Wprowadzenie do systemu  UNIX

(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

Page 18: Wprowadzenie do systemu  UNIX

(C) Mariusz Kopeć, WFiTJ AGH, 2008 18

System plików - przykład

/

etc usr bin home lib dev

jan ewa adamlocalbin

dane progprogram1.c

Page 19: Wprowadzenie do systemu  UNIX

(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ść

Page 20: Wprowadzenie do systemu  UNIX

(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

Page 21: Wprowadzenie do systemu  UNIX

(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

Page 22: Wprowadzenie do systemu  UNIX

(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!

Page 23: Wprowadzenie do systemu  UNIX

(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

Page 24: Wprowadzenie do systemu  UNIX

(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)

Page 25: Wprowadzenie do systemu  UNIX

(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

Page 26: Wprowadzenie do systemu  UNIX

(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!

Page 27: Wprowadzenie do systemu  UNIX

(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

Page 28: Wprowadzenie do systemu  UNIX

(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

Page 29: Wprowadzenie do systemu  UNIX

(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

Page 30: Wprowadzenie do systemu  UNIX

(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 :

Page 31: Wprowadzenie do systemu  UNIX

(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

Page 32: Wprowadzenie do systemu  UNIX

(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

Page 33: Wprowadzenie do systemu  UNIX

(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

Page 34: Wprowadzenie do systemu  UNIX

(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

Page 35: Wprowadzenie do systemu  UNIX

(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

Page 36: Wprowadzenie do systemu  UNIX

(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

Page 37: Wprowadzenie do systemu  UNIX

(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ę

Page 38: Wprowadzenie do systemu  UNIX

(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’

Page 39: Wprowadzenie do systemu  UNIX

(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, ...

Page 40: Wprowadzenie do systemu  UNIX

(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

Page 41: Wprowadzenie do systemu  UNIX

(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

Page 42: Wprowadzenie do systemu  UNIX

(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”

Page 43: Wprowadzenie do systemu  UNIX

(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

Page 44: Wprowadzenie do systemu  UNIX

(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 ?

Page 45: Wprowadzenie do systemu  UNIX

(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”

Page 46: Wprowadzenie do systemu  UNIX

(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

Page 47: Wprowadzenie do systemu  UNIX

(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.

Page 48: Wprowadzenie do systemu  UNIX

(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.

Page 49: Wprowadzenie do systemu  UNIX

(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

Page 50: Wprowadzenie do systemu  UNIX

(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]

Page 51: Wprowadzenie do systemu  UNIX

(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 {}

Page 52: Wprowadzenie do systemu  UNIX

(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 {} \;

Page 53: Wprowadzenie do systemu  UNIX

(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

Page 54: Wprowadzenie do systemu  UNIX

(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*

Page 55: Wprowadzenie do systemu  UNIX

(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

Page 56: Wprowadzenie do systemu  UNIX

(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)

Page 57: Wprowadzenie do systemu  UNIX

(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)

Page 58: Wprowadzenie do systemu  UNIX

(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

Page 59: Wprowadzenie do systemu  UNIX

(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 ’$’, ’\’, ’`’

Page 60: Wprowadzenie do systemu  UNIX

(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

Page 61: Wprowadzenie do systemu  UNIX

(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:

Page 62: Wprowadzenie do systemu  UNIX

(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

Page 63: Wprowadzenie do systemu  UNIX

(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

Page 64: Wprowadzenie do systemu  UNIX

(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)

Page 65: Wprowadzenie do systemu  UNIX

(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

Page 66: Wprowadzenie do systemu  UNIX

(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ść

Page 67: Wprowadzenie do systemu  UNIX

(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

Page 68: Wprowadzenie do systemu  UNIX

(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

Page 69: Wprowadzenie do systemu  UNIX

(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

Page 70: Wprowadzenie do systemu  UNIX

(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

Page 71: Wprowadzenie do systemu  UNIX

(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

Page 72: Wprowadzenie do systemu  UNIX

(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)

Page 73: Wprowadzenie do systemu  UNIX

(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

Page 74: Wprowadzenie do systemu  UNIX

(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

Page 75: Wprowadzenie do systemu  UNIX

(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

Page 76: Wprowadzenie do systemu  UNIX

(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ść

Page 77: Wprowadzenie do systemu  UNIX

(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))

Page 78: Wprowadzenie do systemu  UNIX

(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

Page 79: Wprowadzenie do systemu  UNIX

(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

Page 80: Wprowadzenie do systemu  UNIX

(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)

Page 81: Wprowadzenie do systemu  UNIX

(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

Page 82: Wprowadzenie do systemu  UNIX

(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

Page 83: Wprowadzenie do systemu  UNIX

(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

Page 84: Wprowadzenie do systemu  UNIX

(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

Page 85: Wprowadzenie do systemu  UNIX

(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)

Page 86: Wprowadzenie do systemu  UNIX

(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

Page 87: Wprowadzenie do systemu  UNIX

(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

Page 88: Wprowadzenie do systemu  UNIX

(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

Page 89: Wprowadzenie do systemu  UNIX

(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

Page 90: Wprowadzenie do systemu  UNIX

(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

Page 91: Wprowadzenie do systemu  UNIX

(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.

Page 92: Wprowadzenie do systemu  UNIX

(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

Page 93: Wprowadzenie do systemu  UNIX

(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

Page 94: Wprowadzenie do systemu  UNIX

(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

Page 95: Wprowadzenie do systemu  UNIX

(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

Page 96: Wprowadzenie do systemu  UNIX

(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

Page 97: Wprowadzenie do systemu  UNIX

(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

Page 98: Wprowadzenie do systemu  UNIX

(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

Page 99: Wprowadzenie do systemu  UNIX

(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

Page 100: Wprowadzenie do systemu  UNIX

(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

Page 101: Wprowadzenie do systemu  UNIX

(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

Page 102: Wprowadzenie do systemu  UNIX

(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:

Page 103: Wprowadzenie do systemu  UNIX

(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

Page 104: Wprowadzenie do systemu  UNIX

(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

Page 105: Wprowadzenie do systemu  UNIX

(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

Page 106: Wprowadzenie do systemu  UNIX

(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

Page 107: Wprowadzenie do systemu  UNIX

(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 ....

Page 108: Wprowadzenie do systemu  UNIX

(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

Page 109: Wprowadzenie do systemu  UNIX

(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

Page 110: Wprowadzenie do systemu  UNIX

(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

Page 111: Wprowadzenie do systemu  UNIX

(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ń

Page 112: Wprowadzenie do systemu  UNIX

(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

Page 113: Wprowadzenie do systemu  UNIX

(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

Page 114: Wprowadzenie do systemu  UNIX

(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

Page 115: Wprowadzenie do systemu  UNIX

(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

Page 116: Wprowadzenie do systemu  UNIX

(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

Page 117: Wprowadzenie do systemu  UNIX

(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

Page 118: Wprowadzenie do systemu  UNIX

(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

Page 119: Wprowadzenie do systemu  UNIX

(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

Page 120: Wprowadzenie do systemu  UNIX

(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.

Page 121: Wprowadzenie do systemu  UNIX

(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

Page 122: Wprowadzenie do systemu  UNIX

(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

Page 123: Wprowadzenie do systemu  UNIX

(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

Page 124: Wprowadzenie do systemu  UNIX

(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 &

Page 125: Wprowadzenie do systemu  UNIX

(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 .

Page 126: Wprowadzenie do systemu  UNIX

(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

Page 127: Wprowadzenie do systemu  UNIX

(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

Page 128: Wprowadzenie do systemu  UNIX

(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!”}

Page 129: Wprowadzenie do systemu  UNIX

(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

Page 130: Wprowadzenie do systemu  UNIX

(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

Page 131: Wprowadzenie do systemu  UNIX

(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)

Page 132: Wprowadzenie do systemu  UNIX

(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;

Page 133: Wprowadzenie do systemu  UNIX

(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;

Page 134: Wprowadzenie do systemu  UNIX

(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;

Page 135: Wprowadzenie do systemu  UNIX

(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;

Page 136: Wprowadzenie do systemu  UNIX

(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;

Page 137: Wprowadzenie do systemu  UNIX

(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;

Page 138: Wprowadzenie do systemu  UNIX

(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”

Page 139: Wprowadzenie do systemu  UNIX

(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

Page 140: Wprowadzenie do systemu  UNIX

(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

Page 141: Wprowadzenie do systemu  UNIX

(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] }’

Page 142: Wprowadzenie do systemu  UNIX

(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

Page 143: Wprowadzenie do systemu  UNIX

(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

}

Page 144: Wprowadzenie do systemu  UNIX

(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}

Page 145: Wprowadzenie do systemu  UNIX

(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 ””

}

Page 146: Wprowadzenie do systemu  UNIX

(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

Page 147: Wprowadzenie do systemu  UNIX

(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

Page 148: Wprowadzenie do systemu  UNIX

(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!

Page 149: Wprowadzenie do systemu  UNIX

(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

Page 150: Wprowadzenie do systemu  UNIX

(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]

}

Page 151: Wprowadzenie do systemu  UNIX

(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]

}

Page 152: Wprowadzenie do systemu  UNIX

(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

Page 153: Wprowadzenie do systemu  UNIX

(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

Page 154: Wprowadzenie do systemu  UNIX

(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

Page 155: Wprowadzenie do systemu  UNIX

(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:

Page 156: Wprowadzenie do systemu  UNIX

(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

Page 157: Wprowadzenie do systemu  UNIX

(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

Page 158: Wprowadzenie do systemu  UNIX

(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’}’

Page 159: Wprowadzenie do systemu  UNIX

(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;

Page 160: Wprowadzenie do systemu  UNIX

(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

Page 161: Wprowadzenie do systemu  UNIX

(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

Page 162: Wprowadzenie do systemu  UNIX

(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

Page 163: Wprowadzenie do systemu  UNIX

(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

Page 164: Wprowadzenie do systemu  UNIX

(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

Page 165: Wprowadzenie do systemu  UNIX

(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

Page 166: Wprowadzenie do systemu  UNIX

(C) Mariusz Kopeć, WFiTJ AGH, 2008 166

SED – przykłady skryptów Emulacja polecenia tac

#!/bin/sed -nf1{h;b;}G;h${g;p}