Architektura systemów informatycznych Powłoka systemowa Architektura procesora
Powłoki systemowe Powłoka tekstowa Powłoka, nazywana inaczej shellem, odpowiada za wykonywanie poleceń wpisywanych przez użytkownika w trybie tekstowym. Samo jądro systemu nie "rozumie" wpisywanych przez użytkownika poleceń, to właśnie powłoka przyjmuje polecenia tekstowe, i odpowiednio je tłumaczy na funkcje kernela, jakie ma wykonać - porozumiewa się z kernelem w formie binarnej, bezpośrednio, bo właśnie taką formę poleceń kernel ma wbudowaną. Powłoka decyduje, czy przekazać polecenie do kernela, czy je wykonać za pomocą innego programu. Najpopularniejszą powłoką w GNU/Linuksie jest bash (Bourne Again Shell). Powłoka graficzna Można również wydawać polecenia systemowi za pośrednictwem interfejsu graficznego - jest to inaczej powłoka graficzna.
Powłoki tekstowe Powłoka Bourne a (sh) Podstawowy interpreter poleceń we wszystkich systemach Linux i Unix o ograniczonych możliwościach (brak edycji wiersza poleceń) Powłoka C (csh) Składnia poleceń nawiązuje do języka C (instrukcje warunkowe, historia wydawanych poleceń) nowsza wersja to tcsh Powłoka Korna (ksh) Połączenie możliwości powłok sh i csh i wzbogacenie o dodatkowe polecenia, udoskonalony mechanizm edycji wiersza poleceń Powłoka Bash (bash) Bourne Again Shell, domyślna powłoka Linuxa, połączenie możliwości powłok Korna i C, automatyczne uzupełnianie nazw plików i nazw ścieżek.
Składnia poleceń polecenie opcje argumenty Polecenie jedna z wielu komend, dostępnych w systemach Linux i Unix, lub własny program użytkownika tzw. skrypt. Polecenia działają na plikach, katalogach i urządzeniach. Opcje modyfikują funkcjonowanie polecenia, powodując, że wykonuje się ono w specjalny sposób. Opcje w systemach Linux i Unix to najczęściej pojedyncze litery poprzedzone znakiem minus -. Sposoby użycia: polecenie l a t polecenie lat polecenie la t Argumenty pliki, katalogi urządzenia czyli obiekty, na których wykonywane są polecenia.
Metaznaki Metazanki (znaki uogólniające) - znaki stosowane w celu łatwiejszego posługiwania się nazwami plików oraz katalogów. - służą do tworzenia wzorców, które są rozpoznawane i wykorzystywane przez powłokę - słowo zawierające metaznaki jest zastępowane przez alfabetycznie uporządkowaną listę nazw plików oraz katalogów, które odpowiadają konkretnemu wzorcowi - metaznakami są:. +? * ^ $ [ ]( ) \ {}
Wyrażenia regularne ang. Regular expressions (regexp) Wyrażenia regularne są narzędziem służącym do dopasowywania wzorców. Wykorzystywane są tam, gdzie potrzebne jest narzędzie do wyszukiwania tekstu spełniającego pewne kryteria np. w filtrach tekstowych, zapytaniach w bazach danych.
Wyrażenia regularne: składnia Znaki zwyczajne a, A, b, B, z, Z, 0, 1, 9,,! Znaki specjalne (metaznaki) Rozróżnia się dwa zbiory metaznaków: metaznaki rozpoznawane w dowolnym miejscu wzorca poza nawiasami kwadratowymi ^, $, *, +,?,., (, ), [, ], {, }, \ oraz metaznaki rozpoznawane wewnątrz nawiasów kwadratowych. \, ^, - Część wzorca ujęta w nawiasy kwadratowe jest zwana "klasą znaków".
Filtry tekstowe W systemie UNIX posługując się wieloma poleceniami można stosować wyrażenia regularne, np. grep, vi, sed, awk, ls, cat, head, less, more, tail, find, cp, ps, rm, gzip, tar. We wszystkich przypadkach chodzi o wyszukanie w pliku lub w jego nazwie pewnego ciągu znaków, który można opisać właśnie za pomocą wyrażenia regularnego. Oprócz zwykłych fragmentów tekstu, można posłużyć się znakami specjalnymi.
Wyrażenia regularne: filtry - grep grep (Global Regular Expression Print) Składnia: grep [opcje] wzorzec [plik] grep [opcje] [-e wzorzec -f plik] [plik] Program grep jest tzw. filtrem. generalnie filtr jest programem, który czyta dane ze standardowego wejścia, przetwarza je i wypisuje wynik na standardowym wyjściu. grep, egrep, fgrep - przeszukuje wskazane pliki wejściowe (lub standardowe wejście) szukając linii zawierających ciąg pasujący do podanego wzorca egrep jest tym samym, co grep E (złożone wyrażenia regularne), fgrep jest tym samym, co grep F(analiza pliku)
Grep i wyrażenia regularne: praktyczne zastosowania linie rozpoczynające się od litery l ls -l /lib grep '^l' nazwy plików i numery linii kończących się na k lub K ls grep -n '[kk]$' Użytkownicy powłoki bash: grep -n '/bash$' /etc/passwd Pliki z danym rozszerzeniem: ls grep '\.tar.gz' Nazwy plików zaczynające sie na lierę P i kończące się na e ls egrep "^P[a-z]+e$" Ilość wolnej pamięci RAM: grep 'MemFree' /proc/meminfo
Uruchamianie AWK AWK może być wywołany na wiele sposobów. Jeżeli program jest krótki, to najprościej jest umieścić go pomiędzy znakami pojedynczego cudzysłowu w linii poleceń, w następujący sposób: awk 'program' plik1 plik2... Kiedy program jest długi wygodniejsze jest jego umieszczenie w oddzielnym pliku; w tym wypadku uruchomienie programu wygląda następująco (program oznacza nazwę pliku zawierającego program): awk -f program plik1 plik2...
Filtr awk: rekordy i pola $0 - zmienna reprezentująca cały rekord $1 - zmienna reprezentująca pierwsze pole bieżącego rekordu $n - zmienna reprezentująca n-te pole bieżącego rekordu, może być wyrażeniem zwracającym liczbę np. $(FN - 5) oznacza piąte pole od końca. $1 $2 $0
Przykłady użycia filtru awk awk -F":" '{ print $1 " " $3 }' /etc/passwd
Przykłady użycia filtru awk ps aux awk '{if($1~/student/&&$11~/gnome/)print"pid: " $2 " proces: "$11}'
Filtry grep i awk Pliki zaczynające się na std z rozszerzeniem.h Procesy użytkownika związane z interfejsem graficznym
Jak działa skrypt powłoki? Zawartość pliku tekstowego skrypt.sh: #!/bin/bash # # Przykładowy skrypt powłoki echo Mam zamiar uruchomić polecenie ls ls -la Nadanie atrybutów wykonywalności: chmod +x skrypt.sh Uruchomienie skryptu:./skrypt.sh
Zmienne powłoki Zmienne programowe Zmienne parametryczne Zmienne środowiskowe
Zmienne programowe Przy programowaniu skryptów w powłoce Bourne a przyjeło się nazywanie zmiennych dużymi literami. Ustalenie ich początkowej wartości następuje poprzez podanie jej nazwy, znaku równości oraz wartości, np: ZMIENNA1="To jest tekst" ZMIENNA2=123 Dalsze odwołania do zmiennych dokonywane są przez poprzedzenie nazwy zmiennej znakiem "$", np. echo $ZMIENNA1 Pobieranie wartości do zmiennych #!/bin/sh echo Wpisz tekst: read TEST echo Napisałeś: echo $TEST
Zmienne parametryczne Do skryptu przekazać można parametry wywołania. Parametry można używać podobnie jak zmienne, jednak bez zmiany ich wartości. Każdy parametr wywołania skryptu posiada swój kolejny numer. $0 - parametr 0 - nazwa skryptu $1 - parametr 1... $9 - parametr 9 $* - wszystkie parametry począwszy od 1, rozwijane do $1 $2 $3... $@ - przekazywanie wszystkich parametrów, rozwijane do $1 $2 $3.. $# - liczba parametrów $$ - numer procesu (przydatne przy tworzeniu plików tymczasowych) $! numer procesu ostatniego polecenia działającego w tle $? kod wyjścia ostatnio wykonanego polecenia Uruchomienie skryptu z argumentami:./skrypt argument1 argument2 argument3...
Zmienne środowiskowe CDPATH ścieżka przeszukiwań dla polecenia cd HOME ścieżka katalogu domowego użytkownika ustanawiana w momencie otwarcia sesji MAIL nazwa pliku pocztowego użytkownika PATH ścieżka przeszukiwań katalogów z poleceniami PS1 podstawowy znak gotowości po otwarciu sesji: $ - dla zwykłych użytkowników #- dla supeurżytkownika PS2 pomocniczy znak gotowości wyświetlany po uruchomieniu podpowłoki: > HISTFILE nazwa pliku z historią poleceń HISTSIZE liczba pamiętanych poleceń IFS wewnętrzny separator pól wykorzystywany do dzielenia polecenia na części składowe PWD pełna nazwa ścieżkowa do bieżącego katalogu roboczego MAILCHECK czas (w sekundach ) między dwoma sprawdzeniami przez powłokę nowo nadesłanej poczty TMOUT czas (w sekundach) nieaktywności po upływie którego powłoka zakończy sesję
Zmienne tablicowe Inicjacja tablicy: $ set -A nazwa wartosc0 wartosc1... Przykład użycia % set miasta =(Rzeszow Lublin Wroclaw) % echo $miasta[1] Rzeszow % echo $miasta[2] Lublin % echo $miasta[3] Wroclaw
Cytowanie brak cytowania wszystkie słowa wydzielone za pomocą spacji są interpretowane apostrofy 'ciag_znakow' tekst w apostrofach jest chroniony, cały ciag_znakow jest przesyłany jako argument do polecenia cudzysłowy ciag_znakow - tylko znaki $, \ oraz znak_akcentu ` mają specjalne znaczenie ciągu_znaków. Wszystkie inne znaki są chronione. Cudzysłów zapewnia jednoznaczną interpretację ciągu znaków, nawet w przypadku użycia spacji. lewy ukośnik \c znak występujący po \ jest chroniony przed interpretacją przez powłokę akcenty `polecenie` - polecenie umieszczone w akcentach jest wykonywane przez podpowłoki i w jego miejsce podstawiany jest uzyskany wynik. Analiza dokonywana przez podpowłoki przebiega w zwykły sposób. Brane są pod uwagę włączone znaki cytowania
Wyrażenia warunkowe: if if warunek then wykonuje wszystkie polecenia jeżeli warunek jest równy zero (true) elif warunek 2 then wykonuje wszystkie polecenia jeżeli warunek 2 jest równy zero (true) else wykonuje wszystkie polecenia jeżeli żaden z powyższych warunków nie jest spełniony fi Warunek musi mieć następującą postać : [ wyrażenie1 operator wyrażenie2 ] Między nawiasami a treścią warunku muszą być postawione spacje. Operatory wykorzystywane w warunkach : -eq jest równe (= =) -ne jest różne (!=) -lt jest mniejsze (<) -le jest mniejsze lub równe (<=) -gt jest większe (>) -ge jest większe lub równe (>=)
Wyrażenia warunkowe: if Przykład:
Testy plików [ -f plik ]
Testy plików -e zwraca wartość prawdy (zero), jeżeli plik istnieje -s zwraca wartość prawdy (zero), jeżeli plik nie jest pusty operatory typu plików -f jest zwykłym plikiem -d katalogiem -h dowiązaniem symbolicznym -b urządzeniem blokowym -p potokiem nazwanym operatory uprawnień plików -r można odczytywać -w można zapisywać -x można uruchamiać -u ma ustawiony bit setuid -g ma ustawiony bit setgid -k ma ustawiony lepki bit
Wyrażenia warunkowe: case Wyrażenie case pozwala na dokonanie wyboru z pośród kilku wzorców. case zmienna in "wzorzec1") polecenie1 ;; "wzorzec2") polecenie2 ;; "wzorzec3") polecenie3 ;; *) polecenie_domyślne esac Przykładowy skrypt :
Konstrukcje iteracyjne: pętla for Podczas wykonywania pętli for, zmiennej zostaje przypisana każda wartość z listy, wykonując jednocześnie instrukcje zawarte miedzy operatorami : do done w kolejnych etapach przypisania. for { nazwa zmiennej } in { lista } do instrukcje wykonywane są tyle razy ile jest elementów listy done Przykładowy skrypt : #!/bin/bash for i in 1 2 3 do echo $i done
Pętle while i until Pętla while wykonywana jest tak długo jak długo podany warunek jest prawdziwy. Pętla until wykonywana jest tak długo jak długo podany warunek jest nie prawdziwy. Obie pętle mają taką samą budowę. while [ warunek ] do polecenie1 polecenie2... done Przykładowy skrypt : #!/bin/bash x=1; while [ $x -le 10 ]; do echo $x x=$[x + 1] x= expr x + 1 done
Funkcje definicja: function nazwa_funkcji() { (...) } wywołanie: nazwa_funkcji arg1 arg2 przykład: function funkcja() { echo "to jest funkcja" } echo "pierwsze wywołanie funkcji:" funkcja echo "drugie wywołanie funkcji:" funkcja
Przykład skryptu powłoki