Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

(C) Mariusz Kopeć, WFiTJ AGH, 20081 Wprowadzenie do systemu UNIX dr inż. Mariusz Kopeć pok. 216, D-10 tel. 617 4528

Podobne prezentacje


Prezentacja na temat: "(C) Mariusz Kopeć, WFiTJ AGH, 20081 Wprowadzenie do systemu UNIX dr inż. Mariusz Kopeć pok. 216, D-10 tel. 617 4528"— Zapis prezentacji:

1 (C) Mariusz Kopeć, WFiTJ AGH, Wprowadzenie do systemu UNIX dr inż. Mariusz Kopeć pok. 216, D-10 tel

2 (C) Mariusz Kopeć, WFiTJ AGH, Program wykładów 1. Podstawowe wiadomości o Uniksie 2. Rozpoczynamy pracę z systemem 3. Gdzie szukać pomocy? 4. Poznajemy podstawowe polecenia systemu 5. Podstawy pracy w powłoce bash 6. Poznajemy filtry 7. Tworzymy własne skrypty 8. Przetwarzamy pliki 9. Programy komunikacyjne i narzędzia sieciowe

3 (C) Mariusz Kopeć, WFiTJ AGH, 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

4 (C) Mariusz Kopeć, WFiTJ AGH, Początki UNIXa, cd 1971 AT&T UNIX First Edition (11/3/1971) pierwsza oficjalna wersja systemu, zawierająca procesor tekstu, zaimplementowana na PDP th Edition UNIX (3/73) pojawiły się potoki (pipes) i filtry oraz kompilator języka C. Jądro systemu napisane w asemblerze th Edition UNIX (11/73) jądro systemu napisane w C th Edition UNIX (V6 UNIX) pierwsza wersja systemu powszechnie dostępna poza Bell Labs.

5 (C) Mariusz Kopeć, WFiTJ AGH, BSD UNIX N a 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 Bill Joy z Uniwersytetu Kalifornijskiego w Berkeley wydaje pierwszą wersję Berkeley Software Distribution, znaną jako 1BSD W następstwie otrzymania kontraktu DARPA (Defense Advanced Research Projects Agency) Bill Joy tworzy w Berkeley kolejną dystrybucję: 4.1BSD Powstaje 4.2BSD zawierająca TCP/IP. Rok wcześniej Bill Joy odchodzi, by stworzyć Sun Microsystems Powstaje poprawiona wersja 4.3BSD Powstaje ostatnia wersja z Berkeley: 4.4BSD.

6 (C) Mariusz Kopeć, WFiTJ AGH, AT&T UNIX 1982 UNIX System Group (AT&T) wypuszcza System III UNIX UNIX System Development Labs (AT&T) wypuszcza System V UNIX Release 1 (SVR1) Powstaje System V UNIX Release 2 (SVR2) Pojawia się SVR3 zawierająca m.in. NFS (Network File System) UNIX System Labs (AT&T) wypuszcza SVR Novell kupuje USL od (AT&T) i wypuszcza SVR4.2MP SCO (Santa Cruz Operation) kupuje Uniksa od Novella Caldera (dystrybutor Linuxa) kupuje Uniksa od SCO.

7 (C) Mariusz Kopeć, WFiTJ AGH, 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

8 (C) Mariusz Kopeć, WFiTJ AGH, Linux Kernel Linus Torvalds, Univ. Helsinki, 1991 właściwy LINUX to kernel Narzędzia (utilities) Głównie z Free Software Foundation GNU/Linux (GNUs 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

9 (C) Mariusz Kopeć, WFiTJ AGH, 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.

10 (C) Mariusz Kopeć, WFiTJ AGH, 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

11 (C) Mariusz Kopeć, WFiTJ AGH, 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

12 (C) Mariusz Kopeć, WFiTJ AGH, 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 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

13 (C) Mariusz Kopeć, WFiTJ AGH, 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

14 (C) Mariusz Kopeć, WFiTJ AGH, 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

15 (C) Mariusz Kopeć, WFiTJ AGH, Zmiany danych użytkownika Zmiana hasła passwd Zmiana danych osobistych użytkownika chfn Zmiana defaultowej powłoki (shell) użytkownika chsh

16 (C) Mariusz Kopeć, WFiTJ AGH, 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

17 (C) Mariusz Kopeć, WFiTJ AGH, 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

18 (C) Mariusz Kopeć, WFiTJ AGH, System plików - przykład / etc usrbinhomelibdev janewaadamlocalbin daneprog program1.c

19 (C) Mariusz Kopeć, WFiTJ AGH, 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ść

20 (C) Mariusz Kopeć, WFiTJ AGH, Operacje na katalogach, cd > ls –d * plik1.dat prog.e testy > ls -l -rw-r--r-- 1 kowalski stud 10 Oct plik1.dat -rwxr-xr-x 1 kowalski stud 445 Jul prog.e drwxr-xr-x 2 kowalski stud 4096 Jul testy mkdir utworzenie nowego katalogu > mkdir zajecia1;ls –d * plik1.dat prog.e testy zajecia1 > mkdir /home/stud/kowalski/zajecia1

21 (C) Mariusz Kopeć, WFiTJ AGH, 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

22 (C) Mariusz Kopeć, WFiTJ AGH, Operacje na katalogach, cd rmdir usunięcie katalogu (pustego) > cd > rmdir zajecia1; ls plik1.dat prog.e testy > mkdir zajecia1 > mkdir zajecia1/zadanie1; ls zajecia1 zadanie1 > rmdir zajecia1 rmdir: `zajecia1: Directory not empty > rm –r zajecia1; ls plik1.dat prog.e testy Katalog nie jest pusty – trzeba inaczej: Ostrożnie!

23 (C) Mariusz Kopeć, WFiTJ AGH, Prawa dostępu do pliku -rwxr--r-- 1 user group... prog1.e readwartość = 4(r albo -) writewartość = 2(w albo -) executewartość = 1(x albo -) ugo others group user typ - zwykły plik d katalog... execute: zwykły plik – program, script katalog – wykonanie cd mod tego pliku = 744

24 (C) Mariusz Kopeć, WFiTJ AGH, 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)

25 (C) Mariusz Kopeć, WFiTJ AGH, 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=400w=200x=100 group-r=040w=020x=010 others-r=004w=002x=001 Przykłady: chmod 644 plik1.e chmod 777 plik1.e

26 (C) Mariusz Kopeć, WFiTJ AGH, 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!

27 (C) Mariusz Kopeć, WFiTJ AGH, 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.dat Linia1 wprowadzonego tekstu Linia2 wprowadzonego tekstu Ctrl-D > ls –l plik2.dat -rwxr-xr-x 1 kowalski stud plik2.dat dowolny edytor, np. vi > vi plik2.dat

28 (C) Mariusz Kopeć, WFiTJ AGH, 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

29 (C) Mariusz Kopeć, WFiTJ AGH, Operacje na plikach, cd Wypisanie zawartości pliku cat – wypisanie zawartości jednego lub kilku plików > cat plik2.dat Linia1 wprowadzonego tekstu Linia2 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.dat Linia2 wprowadzonego tekstu Linia1 wprowadzonego tekstu

30 (C) Mariusz Kopeć, WFiTJ AGH, 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 :

31 (C) Mariusz Kopeć, WFiTJ AGH, Operacje na plikach, cd Dzielenie plików cut – wycina kolumny lub pola z pliku cut –c10-15 plik1 wypisuje znak z linii pliku csplit – dzieli plik na części csplit plik 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 wz1 xx02 – od linii zawierającej wzorzec wz2

32 (C) Mariusz Kopeć, WFiTJ AGH, 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 odpowiednie linie plików plik1 i plik2 join – łączy równolegle linie plików z polem łączącym Przykład: plik1:rok1 annaplik2:rok1 jan rok2 ewarok3 tom > join plik1 plik2 rok1 anna jan

33 (C) Mariusz Kopeć, WFiTJ AGH, 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ępnie sortuje 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 plik1bada tylko 2 pierwsze pola : jest separatorem pól

34 (C) Mariusz Kopeć, WFiTJ AGH, 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

35 (C) Mariusz Kopeć, WFiTJ AGH, Ustalanie charakteru pliku file – określenie charakteru pliku: > file ls.txt ls.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: 7132 Device: 851h/2129h Access: (0744/-rw-rr-) Uid: (751/.) Gid: (700/.) Access: Tue Nov 4 14:02: Modify: Mon Oct 27 11:48: Change: Mon Oct 27 11:50:

36 (C) Mariusz Kopeć, WFiTJ AGH, 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 polecenia bezpośrednio na wejście następnego: polecenie1 | polecenie2 [ | polecenie3...] > ls -l | sort > cat ls.txt | head –n20 | wc Działają zazwyczaj w trybie potokowym

37 (C) Mariusz Kopeć, WFiTJ AGH, 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 –l 50 wc -l *.txt wypisuje liczbę linii w każdym z plików o zakończeniu.txt oraz ich sumę

38 (C) Mariusz Kopeć, WFiTJ AGH, 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

39 (C) Mariusz Kopeć, WFiTJ AGH, 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,...

40 (C) Mariusz Kopeć, WFiTJ AGH, Filtry: grep – wzorce, cd ^ początek linii ^plik plik1a, plikaa12, ale nie replika $koniec linii plik$ nowyplik, ale nie plik1 \nodwoł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

41 (C) Mariusz Kopeć, WFiTJ AGH, 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 jako samodzielne słowo > file /etc | grep English text.*with Wypisuje z katalogu /etc nazwy plików zawierających tekst angielski z dodatkowymi atrybutami

42 (C) Mariusz Kopeć, WFiTJ AGH, 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 > 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

43 (C) Mariusz Kopeć, WFiTJ AGH, Filtry: sed – przykłady > sed –n –es/character/file/g \ ? –es/file/FILE/p ls.txt Zamienia 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.txt Zamienia 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.txt Zamienia w ls.txt character na file i wypisuje tylko linie w których dokonano zmian

44 (C) Mariusz Kopeć, WFiTJ AGH, 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 ?

45 (C) Mariusz Kopeć, WFiTJ AGH, 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/passwd Wypisuje z pliku /etc/passwd linie zawierające łańcuch Andrzej

46 (C) Mariusz Kopeć, WFiTJ AGH, 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 | wc Wypisuje 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

47 (C) Mariusz Kopeć, WFiTJ AGH, 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 -l Wypisywana jest liczba podkatalogów w katalogu /etc. (Gdzie można sprawdzić czy jest poprawna?) cat /etc/passwd | column –s: -t | sort | less Lista zarejestrowanych w systemie użytkowników wypisywana jest strona po stronie w formie posortowanej tabeli. sort ls.txt | uniq | tee linie | wc -l Z 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.

48 (C) Mariusz Kopeć, WFiTJ AGH, Kompresja plików gzip – kompresja/dekompresja zawartości plików gzip [opcje] [plik] [...] Wybrane przykłady: gzip ls.txt Kompresuje 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.

49 (C) Mariusz Kopeć, WFiTJ AGH, 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. -ctworzy nowe archiwum -rdodaje pliki do istniejącego archiwum -xwyciąga pliki z archiwum -f nazwapodaje nazwę archiwum -tlistuje zawartość archiwum -vinformuje o wykonywanych operacjach -z lub -jkompresja/dekompresja programem gzip lub bzip2

50 (C) Mariusz Kopeć, WFiTJ AGH, 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]

51 (C) Mariusz Kopeć, WFiTJ AGH, Wyszukiwanie plików, cd podstawowe wyrażenia pierwotne: -name plik prawda, jeżeli plik odpowiada nazwie bieżącej -user użytkownik prawda, jeżeli plik należy do użytkownika użytkownik -newer splik prawda, jeżeli plik jest nowszy niż splik -type c prawda, jeżeli plik jest typu c (b,c,d,p,f,l,s) -print prawda; wypisuje nazwę pliku -exec polecenie prawda jeżeli polecenie zwraca kod wyjścia 0; polecenie kończy się znakiem \; nazwa pliku jest reprezentowana przez {}

52 (C) Mariusz Kopeć, WFiTJ AGH, 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 {} \;

53 (C) Mariusz Kopeć, WFiTJ AGH, Wyszukiwanie plików, cd slocate – wyszukuje pliki w bazie danych systemu najważniejsze opcje: - iignoruj różnice w wielkości liter; - ewypisuj 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

54 (C) Mariusz Kopeć, WFiTJ AGH, Wyszukiwanie plików, cd whereis –wyszukuje pliki binarne, źródłowe albo pliki manuala poleceń najważniejsze opcje: - bwypisuje tylko pliki binarne; - mwypisuje tylko pliki manuala; - swypisuje tylko pliki źródłowe; - uwypisuje pliki nie należące do powyższych kategorii whereis [opcje] nazwa przykłady: whereis ls whereis –m l* whereis –m –u l*

55 (C) Mariusz Kopeć, WFiTJ AGH, 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

56 (C) Mariusz Kopeć, WFiTJ AGH, 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)

57 (C) Mariusz Kopeć, WFiTJ AGH, 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)

58 (C) Mariusz Kopeć, WFiTJ AGH, bash – znaki specjalne Niektóre znaki specjalne powłoki: blankspacja lub tabulator przekierowanie strumieni |potok (pipe) (, )definiowanie podpowłoki ;koniec polecenia &wykonanie polecenia w tle metaznaki metaznaki nie muszą być otoczone przez blank

59 (C) Mariusz Kopeć, WFiTJ AGH, 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ątkiem znaków $, \, `

60 (C) Mariusz Kopeć, WFiTJ AGH, 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 ~: ~nicjeżeli wynikowy katalog nie istnieje to rozwinięcie nie jest przeprowadzane

61 (C) Mariusz Kopeć, WFiTJ AGH, bash - rozwinięcia ${par:-słowo} jeżeli parametr par jest ustawiony to podstawiana 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:

62 (C) Mariusz Kopeć, WFiTJ AGH, ${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 $par projekt

63 (C) Mariusz Kopeć, WFiTJ AGH, 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

64 (C) Mariusz Kopeć, WFiTJ AGH, 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)

65 (C) Mariusz Kopeć, WFiTJ AGH, 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 –l|wc –l`)) 1

66 (C) Mariusz Kopeć, WFiTJ AGH, bash - rozwinięcia + - dodawanie i odejmowanie kolejność działań w rozwinięciu: = porównania arytmetyczne ++id --idpre-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ść

67 (C) Mariusz Kopeć, WFiTJ AGH, bash - rozwinięcia kolejność działań, cd: = *= /= %= += -= >= &= ^= |=przypisania ^bitowe XOR &bitowe AND &&logiczne AND |bitowe OR expr1, expr2przecinek ||logiczne OR expr ? expr : exprwyrażenie warunkowe

68 (C) Mariusz Kopeć, WFiTJ AGH, 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 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

69 (C) Mariusz Kopeć, WFiTJ AGH, bash - przekierowania here document: > polecenie.... > ogranicznik Przykład: > cat 1 linia tekstu > moj_ogr 1 linia tekstu Ogranicznik w linii polecenia nie musi być dosunięty : > cat 1 linia tekstu > moj_ogr 1 linia tekstu

70 (C) Mariusz Kopeć, WFiTJ AGH, 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 1 linia tekstu > moj_ogr 1 linia tekstu

71 (C) Mariusz Kopeć, WFiTJ AGH, bash - przekierowania Jeż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 < `whoami` > moj_ogr `whoami` Zagadka: co będzie wynikiem następującego polecenia: > cat < `whoami` > moj_ogr mariusz ale > <<- - cat - ls.txt > $((2+5)) > - 7 zawartość pliku ls.txt

72 (C) Mariusz Kopeć, WFiTJ AGH, 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)

73 (C) Mariusz Kopeć, WFiTJ AGH, 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

74 (C) Mariusz Kopeć, WFiTJ AGH, bash - test Polecenie test test [wartość1] operator wartość2 albo [ [wartość1] operator wartość2] porównania liczbowe -gtwiększy od -ltmniejszy od -eqrówny -gewiększy lub równy -lemniejszy lub równy -neróżny od Zwraca wynik wyrażenia testującego

75 (C) Mariusz Kopeć, WFiTJ AGH, bash - test przykład: [ $zm –eq 1 ] zwraca 0 gdy wartość zmiennejzm jest równa 1 wybrane operacje na plikach: -e plikplik istnieje -d plikplik istnieje i jest katalogiem -f plikplik istnieje i jest plikiem zwykłym -r plikplik istnieje i można go czytać -w plikplik istnieje i można do niego pisać -xplik istnieje i można go wykonać przykład: [ –f moj_plik ] zwraca 0 gdy moj_plik istnieje i jest plikiem zwykłym

76 (C) Mariusz Kopeć, WFiTJ AGH, bash - test wybrane operacje na tekstach (stringach): string string ma niezerową długość -z stringstring ma zerową długość string1=string2stringi 1 i 2 są równe string1==string2to samo co powyżej string1!=string2stringi 1 i 2 nie są równe string1string2string2 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ść

77 (C) Mariusz Kopeć, WFiTJ AGH, bash - let Polecenie let let wyrażenie albo ((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))

78 (C) Mariusz Kopeć, WFiTJ AGH, 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 $m 1 >unset m >((m=m+1)) >echo $m 1 >(( 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 błąd

79 (C) Mariusz Kopeć, WFiTJ AGH, 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 $m 1 >(( m = m+2, m++, m = 0 )) >echo $? wypisuje kod powrotu 1 >(( m=2, m++, m*=2 )) >echo $? wypisuje kod powrotu 0

80 (C) Mariusz Kopeć, WFiTJ AGH, bash - pętle Konstrukcje pętli until until polecenia_testujące; do polecenia_do_wykonania; done polecenia_do_wykonania wykonywane są tak długo, dopóki polecenia_testujące zwracają zerowy kod powrotu while while polecenia_testujące; do polecenia_do_wykonania; done polecenia_do_wykonania wykonywane są tak długo, dopóki polecenia_testujące zwracają niezerowy kod powrotu Uwaga: syntaktyczny ; może być zastąpiony przez znak nowej linii (/ Enter )

81 (C) Mariusz Kopeć, WFiTJ AGH, bash - pętle Przykłady pętli until > m=5 > until [ $m –eq 0 ]; do > let m=m-1 >echo –n $m >done > m=5 > until ((m--=0)); do >echo –n $m >done

82 (C) Mariusz Kopeć, WFiTJ AGH, bash - pętle Przykłady pętli while > m=5 > while [ $m –gt 0 ]; do > let m=m-1 >echo –n $m >done > m=5 > while ((m-->0)); do >echo –n $m >done

83 (C) Mariusz Kopeć, WFiTJ AGH, bash - pętle for for nazwa [in słowo...]; do polecenia_do_wykonania; done słowo jest rozwijane; polecenia_do_wykonania wykonywane są tak długo, dopóki nazwa odpowiada kolejnym elementom rozwinię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; done wyrażenia wyr1, wyr2, wyr3 są wyrażeniami arytmetycznymi, a działanie pętli jest takie jak w C

84 (C) Mariusz Kopeć, WFiTJ AGH, 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

85 (C) Mariusz Kopeć, WFiTJ AGH, 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 )

86 (C) Mariusz Kopeć, WFiTJ AGH, bash – instrukcje warunkowe case case słowo in [ [(] wzór [| wzór]... ) polecenia ;;... esac jeżeli słowo znajduje się na liście wzorów, to wykonywane są polecenia Przykład case $swiatlo in czerwone ) echo STOP ;; zielone ) echo JAZDA ;; default ) echo CZEKAJ ;; esac

87 (C) Mariusz Kopeć, WFiTJ AGH, 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 mtest echo $1=$1 $2=$2 $0=$0 $#=$# $*=$* >. mtest Moj test $1=Moj $2=test $0=bash $#=2 $*=Moj test

88 (C) Mariusz Kopeć, WFiTJ AGH, 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

89 (C) Mariusz Kopeć, WFiTJ AGH, bash – zmienne powłoki zmienne powłoki (automatycznie ustawiane) zmienne powłoki sh (są też w bash): HOMEkatalog domowy użytkownika IFSlista znaków-separatorów pól PATHlista katalogów, w których powłoka szuka programów do wykonania PS1podstawowy znak zachęty powłoki (default: \s-\v\$) PS2drugi znak zachęty powłoki (default: > ) Jak odczytać ich wartości? Na przykład: > echo $PATH

90 (C) Mariusz Kopeć, WFiTJ AGH, bash – zmienne powłoki zmienne powłoki bash (w sh ich nie było): BASH_VERSIONnumer wersji wykonywanej powłoki bash HISTSIZEmax. liczba pamiętanych poleceń (d: 500) HOSTNAMEnazwa hosta PROMPT_COMMANDpolecenie wykonywane przed wypisaniem $PS1 HOSTTYPEtyp maszyny MACHTYPEtyp maszyny PWDbieżący katalog UIDidentyfikator użytkownika

91 (C) Mariusz Kopeć, WFiTJ AGH, 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.

92 (C) Mariusz Kopeć, WFiTJ AGH, 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_funkcja To jest moja funkcja ls.txt plik1.txt plik2.txt 3

93 (C) Mariusz Kopeć, WFiTJ AGH, 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

94 (C) Mariusz Kopeć, WFiTJ AGH, 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

95 (C) Mariusz Kopeć, WFiTJ AGH, 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

96 (C) Mariusz Kopeć, WFiTJ AGH, 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

97 (C) Mariusz Kopeć, WFiTJ AGH, bash – polecenia wbudowane shopt [opcje] wypisuje albo przełącza atrybuty powłoki ulimit [opcje] [limit] pokazuje albo ustawia limity powłoki pushd katalog przechodzi do katalogu i zapisuje go na stosie popd zdejmuje nazwę katalogu ze stosu i wykonuje do niego cd help wyświetla informacje o poleceniach powłoki dirs wypisuje stos katalogów

98 (C) Mariusz Kopeć, WFiTJ AGH, bash – sterowanie procesami Polecenia sterowania procesami powłoki bash jobs wypisuje aktywne procesy suspend (ctrl Z) zatrzymuje wykonanie procesu bg nr_procesunp. %1 kontynuacja realizacji zatrzymanego procesu w tle ( jak &) fg nr_procesunp. %1 kontynuacja realizacji zatrzymanego kill [-s sygnał] nr_procesu lub pid przesyła sygnał do procesu

99 (C) Mariusz Kopeć, WFiTJ AGH, bash - przykłady Przykłady rozwinięcia linii polecenia: > echo cat `whoami` ~ $((2+3)) {a,b}c p?.txt cat mariusz /home/prac/mariusz 5 ac bc p1.txt p2.txt > echo ls p*.txt ls p1.txt pl1.txt pl2.txt plik1.txt plik2.txt p*.txt zastępowane jest odpowiednią listą plików > echo ls p{l,lik}*.txt ls 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

100 (C) Mariusz Kopeć, WFiTJ AGH, 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

101 (C) Mariusz Kopeć, WFiTJ AGH, 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

102 (C) Mariusz Kopeć, WFiTJ AGH, bash - skrypty Przykłady skryptów #!/bin/bash parametry= while [ $# -gt 1 ]; do parametry=$parametry $1 shift done ostatni_parametr=$1 shift echo $parametry echo $ostatni_parametr Skrypt z pętlą while, wypisujący ostatni podany parametr:

103 (C) Mariusz Kopeć, WFiTJ AGH, bash - skrypty #!/bin/bash echo "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"; fi else echo "Plik $1 nie istnieje"; fi Skrypt z konstrukcją warunkową if

104 (C) Mariusz Kopeć, WFiTJ AGH, bash - skrypty #!/bin/bash echo Rozwiniecie nazw plikow: * for ff in *; do if file $ff | grep text > /dev/null; then echo "Plik $ff jest plikiem tekstowym" fi done 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

105 (C) Mariusz Kopeć, WFiTJ AGH, bash - skrypty #!/bin/bash while 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 ;; esac done Skrypt z pętlą while i konstrukcją case

106 (C) Mariusz Kopeć, WFiTJ AGH, bash - skrypty #!/bin/bash a=0 b=0 c=0 d=0 while [ $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

107 (C) Mariusz Kopeć, WFiTJ AGH, bash - skrypty #!/bin/bash katalog=$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....

108 (C) Mariusz Kopeć, WFiTJ AGH, 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

109 (C) Mariusz Kopeć, WFiTJ AGH, bash - konfiguracja Konfiguracja znaku zachęty \w]\$ znaczenie: \unazwa użytkownika \hnazwa hosta \Hpełna nazwa hosta (z domeną) \wbieżący katalog \snazwa powłoki \tczas HH:MM:SS \Aczas HH:MM \$# dla roota, $ dla innych \!numer polecenia w zapisie historii \nnewline \\backslash

110 (C) Mariusz Kopeć, WFiTJ AGH, bash – skróty klawiaturowe Niektóre przydatne kombinacje klawiszy edycja linii komend C-aprzesunięcie kursora na początek linii C-eprzesunięcie kursora na koniec linii C-lclear screen C-_usuwanie wprowadzonych zmian (kolejne) A-rusunięcie wszystkich zmian poruszanie się po pliku historii A-na koniec pliku historii C-rszukanie wstecz w pliku historii C-sszukanie do przodu w pliku historii

111 (C) Mariusz Kopeć, WFiTJ AGH, bash – skróty klawiaturowe uzupełnienia TABuzupełnienia ogółem A-?wypisz możliwe uzupełnienia A-/uzupełnienie nazwy pliku A-~uzupełnienie nazwy użytkownika nazwy hosta A-!uzupełnienie poleceń

112 (C) Mariusz Kopeć, WFiTJ AGH, 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

113 (C) Mariusz Kopeć, WFiTJ AGH, bash – historia poleceń history [n] listuje [n] ostatnich pozycji z listy historii wraz z ich numerami; pozycje oznaczone * zostały zmodyfikowane historyoperuje 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

114 (C) Mariusz Kopeć, WFiTJ AGH, 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

115 (C) Mariusz Kopeć, WFiTJ AGH, Zarządzanie procesami toppokazuje 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

116 (C) Mariusz Kopeć, WFiTJ AGH, Zarządzanie procesami 14:22:12 up 12 days, 4:55, 23 users, load average: 1.31, 1.21, processes: 217 sleeping, 2 running, 0 zombie, 0 stopped CPU states: 0.4% user, 1.7% system, 49.8% nice, 48.7% idle Mem: K total, K used, 52912K free, 25800K buffers Swap: K total, K used, K free, K cache PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND mariusz R top 1 root S init... PRI: priorytet procesu RSS: wykorzystywana pamięć fizyczna STAT: status procesu (Running, Sleeping, Zombie, Traced/sTopped) %CPU: procentowe wykorzystanie czasu CPU %MEM: procentowe wykorzystanie pamięci

117 (C) Mariusz Kopeć, WFiTJ AGH, Zarządzanie procesami pspokazuje 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

118 (C) Mariusz Kopeć, WFiTJ AGH, Zarządzanie procesami pstreepokazuje 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

119 (C) Mariusz Kopeć, WFiTJ AGH, Zarządzanie procesami killprzesył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 – przesyła sygnał bezwarunkowego zakończenia procesu o pid 1213

120 (C) Mariusz Kopeć, WFiTJ AGH, Zarządzanie procesami sleepopóź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 – sekundy m – minuty h – godziny d - dni Przykład: > sleep 5s; ls polecenie ls zostanie wykonane po 5 sek.

121 (C) Mariusz Kopeć, WFiTJ AGH, Zarządzanie procesami atwykonuje 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:MM 10am Jul 31 1am tomorrow now + 3 weeks

122 (C) Mariusz Kopeć, WFiTJ AGH, 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 :24 > atq :24 a mariusz > atrm 352

123 (C) Mariusz Kopeć, WFiTJ AGH, Zarządzanie procesami batchrozpoczyna 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 :39

124 (C) Mariusz Kopeć, WFiTJ AGH, Zarządzanie procesami nohupwykonuje 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 &

125 (C) Mariusz Kopeć, WFiTJ AGH, Przestrzeń dyskowa duinformuje 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 –sh 1.5M.

126 (C) Mariusz Kopeć, WFiTJ AGH, Przestrzeń dyskowa dfpokazuje 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

127 (C) Mariusz Kopeć, WFiTJ AGH, Przestrzeń dyskowa quotapokazuje 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/sdb /dev/sdf > quota

128 (C) Mariusz Kopeć, WFiTJ AGH, 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!}

129 (C) Mariusz Kopeć, WFiTJ AGH, AWK trochę dokładniej Program AWK ciąg poleceń w układzie wzorzec {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

130 (C) Mariusz Kopeć, WFiTJ AGH, AWK zmienne specjalne zmienne specjalne: $0wczytany rekord $nn-te pole rekordu NFliczba wczytanych pól NRliczba wczytanych rekordów FNRliczba rekordów wczytanych z bieżącego pliku FSseparator pól RSseparator rekordów OFSwyjściowy separator pól ORSwyjściowy separator rekordów FILENAMEnazwa aktualnie przetwarzanego pliku ARGCliczba podanych parametrów pozycyjnych ARGVtablica parametrów pozycyjnych ENVIRONtablica przetrzymująca zmienne środowiskowe

131 (C) Mariusz Kopeć, WFiTJ AGH, AWK operacje wejścia/wyjścia operacje wejścia: nextprzerywa obróbkę bieżącego rekordu i pobiera następny exitzatrzymuje przetwarzanie rekordów i przechodzi do END getline zmpobiera rekord i wstawia jego zawartość do zmiennej zm getline plikwypisuje rekord do pliku plik printf(format, arg1...)wypisuje kolejne argumenty zgodnie z formatem (tak jak w języku C)

132 (C) Mariusz Kopeć, WFiTJ AGH, 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;

133 (C) Mariusz Kopeć, WFiTJ AGH, 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;

134 (C) Mariusz Kopeć, WFiTJ AGH, 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 ~ regexdopasowuje ciąg str do wyrażenia regularnego regex; zwraca prawdę, jeżeli ciąg zawiera się w polu; str !~ regexnegacja dopasowania; zwraca prawdę, jeżeli ciąg nie zawiera się w polu;

135 (C) Mariusz Kopeć, WFiTJ AGH, AWK wzory wzory specjalne BEGINwykonuje operacje przed rozpoczęciem przetwarzania danych; END wykonuje operacje po zakończeniu przetwarzania danych; wzory zakresów war1,war2odnosi 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 zmiennenie są deklarowane; są inicjowane wartością 0 lub w zależności od kontekstu, w którym zostały użyte; tablicetablice asocjacyjne – indeksowane nie są liczbami tylko napisami;

136 (C) Mariusz Kopeć, WFiTJ AGH, 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;

137 (C) Mariusz Kopeć, WFiTJ AGH, 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; \wlitera, cyfra lub _; \Wnie \w; \pusty string na końcu słowa; \Bniepusty string na krawędzi słowa;

138 (C) Mariusz Kopeć, WFiTJ AGH, 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

139 (C) Mariusz Kopeć, WFiTJ AGH, AWK instrukcje instrukcja while while ( warunek ) instrukcje Przykład: awk { i = 1 while (i <= 3) { print $i i++ } } plik_wejsciowy Uwaga: przejścia do nowych linii nie są tu konieczne, (z wyjątkiem ciała instrukcji złożonej) ale zalecane

140 (C) Mariusz Kopeć, WFiTJ AGH, AWK instrukcje instrukcja do while do instrukcje while (warunek) Przykład: awk { i = 1 do { print $0 i++ } 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

141 (C) Mariusz Kopeć, WFiTJ AGH, 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] }

142 (C) Mariusz Kopeć, WFiTJ AGH, 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

143 (C) Mariusz Kopeć, WFiTJ AGH, AWK instrukcje instrukcja switch, cd Przykład: switch (NR * 2 + 1) { case 3: case 11: print NR – 1 break case /2[[:digit:]]+/: print NR default: print NR + 1 case –1: print NR * -1 }

144 (C) Mariusz Kopeć, WFiTJ AGH, AWK instrukcje instrukcja break break Przerywa wykonanie najbardziej wewnętrznej pętli Poza pętlami traktowana jest jako błąd (POSIX) Przykład: { n = $1 for (d=2; d*d<=n; d++) if (n%d == 0) break if (n%d == 0) printf Najmniejszym podzieln. %d jest %d\n,n,d else printf %d to liczba pierwsza\n,n }

145 (C) Mariusz Kopeć, WFiTJ AGH, 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 }

146 (C) Mariusz Kopeć, WFiTJ AGH, 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

147 (C) Mariusz Kopeć, WFiTJ AGH, AWK instrukcje instrukcja nextfile (w gawk) nextfile Przykład: NF != 4 { print %s nie ma 4 pol w rekordzie,FILENAME nextfile } { 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

148 (C) Mariusz Kopeć, WFiTJ AGH, 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!

149 (C) Mariusz Kopeć, WFiTJ AGH, AWK tablice tablice asocjacyjne – indeksowane stringami, np.: tab[jeden]=1 tab[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

150 (C) Mariusz Kopeć, WFiTJ AGH, 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] }

151 (C) Mariusz Kopeć, WFiTJ AGH, 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] }

152 (C) Mariusz Kopeć, WFiTJ AGH, 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

153 (C) Mariusz Kopeć, WFiTJ AGH, 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

154 (C) Mariusz Kopeć, WFiTJ AGH, 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 x 5 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) zmienne (i stałe) numeryczne są zmiennoprzecinkowe: print 3/4 0.75

155 (C) Mariusz Kopeć, WFiTJ AGH, AWK komunikacja z procesami gawk pozwala na tworzenie dwukierunkowych łączy z innymi procesami: BEGIN {command = read line; ls –l $line print /usr/games |& command while (command |& getline results) print >,results} BEGIN {Service = /inet/tcp/0/origin \.ftj.agh.edu.pl/daytime Service |& getline print $0 close (Service) } niekoniecznie na tej samej maszynie:

156 (C) Mariusz Kopeć, WFiTJ AGH, 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

157 (C) Mariusz Kopeć, WFiTJ AGH, 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

158 (C) Mariusz Kopeć, WFiTJ AGH, 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\ –eLinia wstawiana przed wzorem\ -ea\ –e1. linia wstawiana za wzorem\ \ -e2. linia wstawiana za wzorem –e}

159 (C) Mariusz Kopeć, WFiTJ AGH, 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ąpienie g – dokonywane są wszystkie zastąpienia (global) n (gdzie n jest cyfrą) – dokonywane jest tylko n-te zastąpienie p – wypisuje przestrzeń wzorca po skutecznym zastąpieniu Uwaga: jeżeli zastąpienie zostało dokonane, ustawiana jest flaga wykorzystywana przez polecenie test;

160 (C) Mariusz Kopeć, WFiTJ AGH, 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

161 (C) Mariusz Kopeć, WFiTJ AGH, 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

162 (C) Mariusz Kopeć, WFiTJ AGH, 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

163 (C) Mariusz Kopeć, WFiTJ AGH, 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

164 (C) Mariusz Kopeć, WFiTJ AGH, SED – przykłady skryptów Zliczanie linii inputu #!/bin/sed –nf $= Emulacja polecenia head #!/bin/sed –f 10q Rozdzielanie linii tekstu pustymi liniami #!/bin/sed –f /^$/d;G Emulacja polecenia tail #!/bin/sed –f :a $q;N;11,$D;ba

165 (C) Mariusz Kopeć, WFiTJ AGH, SED – przykłady skryptów Odwrócenie kolejności znaków w linii #!/bin/sed –f /./!b s/!/!!/g s/^/-!-/ s/$/-!-/ ta :a s/-!-\([^!]\|!!\)\(.*\)\([^!]\|!!\)-!-/\3-!-\2-!-\1/ ta s/-!-//g s/!!/!/g

166 (C) Mariusz Kopeć, WFiTJ AGH, SED – przykłady skryptów Emulacja polecenia tac #!/bin/sed -nf 1{h;b;} G;h ${g;p}


Pobierz ppt "(C) Mariusz Kopeć, WFiTJ AGH, 20081 Wprowadzenie do systemu UNIX dr inż. Mariusz Kopeć pok. 216, D-10 tel. 617 4528"

Podobne prezentacje


Reklamy Google