Wprowadzenie do systemu operacyjnego Linux programowanie powłoki
plan powłoka dostpne powłoki zmienne rodowiskowe przekierowanie wejcia/wyjcia procesów przetwarzanie potokowe wieloprogramowo programowanie w powłoce 2
plan programowanie w powłoce: wprowadzenie zmienne powłoki procedury powłoki wykorzystanie struktur sterujcych funkcje wewntrzne powłoki bibliografia 3
powłoka inna nazwa powłoki (ang. shell), to prostu interpreter polece za pomoc interpretera polece uytkownik moe uruchamia własne programy aplikacyjne albo ogólnie dostpne programy systemowe 4
powłoka powłok nazywa si te powłok systemow [Sobaniec2002] powłoka systemowa jest porednikiem midzy uytkownikiem a funkcjami systemu operacyjnego 5
powłoka podstawowe funkcje systemu operacyjnego (np. zarzdzanie procesami) s realizowane przez jdro (ang. kernel), std powłoka jest porednikiem midzy uytkownikiem a jdrem systemu operacyjnego [Sobaniec 2002], [KS1993] 6
powłoka z punktu widzenia systemu operacyjnego powłoka jest zwykłym procesem, niemniej moe kontrolowa wykonanie innych procesów [Sobaniec2002], [KS1993] 7
powłoka praca powłoki składa si z nastpujcych czynnoci: przyjcie polecenia od uytkownika (odczyt) dekodowanie polecenia (interpretacja) wykonanie polecenia 8
dostpne powłoki istniej róne wersje powłoki [Sobaniec2002], uruchamiane poleceniami: interpreter Bourne a sh interpreter C-shell csh interpreter Korna ksh interpreter tcsh tcsh kolejny interpreter Bourne a bash 9
dostpne powłoki powłoki chronologicznie/s.o.: interpreter Bourne a sh, 1977, Unix interpreter C-shell csh,1978, BSD Unix interpreter Korna ksh, 1983, róne, AIX interpreter tcsh tcsh,1983, róne kolejny interpreter Bourne a bash, róne, 1989 10
dostpne powłoki sprawdzenie powłoki: user@koziolek:~$ echo $SHELL /bin/bash wywołanie powłoki: user@koziolek:~$ sh $ exit user@koziolek:~$ 11
dostpne powłoki zmiana powłoki zgłoszeniowej (login shell), czyli zmiana domylnego interpretera polece, realizowana jest poleceniem chsh (ang. change shell) 12
zmienne rodowiskowe słu do konfigurowania powłoki tworzrodowisko wykonania procesu, przypisywane do kadego procesu niezalenie uytkownik moe definiowa dowoln liczb własnych zmiennych [KS1993], [Sobaniec2002] 13
zmienne rodowiskowe list zmiennych rodowiskowych uzyskujemy poleceniem env: user@koziolek:~$ env poniewa wynik tego polecenia jest do długi, skoncentrujemy si tylko na podstawowych zmiennych, prezentujc wynik stronami: user@koziolek:~$ env pg 14
zmienne rodowiskowe typ aktualnie wykorzystywanego terminalu: TERM=xterm pełna cieka do powłoki: SHELL=/bin/bash nazwa uytkownika: USER=user USERNAME=user LOGNAME=user 15
zmienne rodowiskowe cieka przeszukiwa katalogów: PATH=/usr/lib/lightdm:/usr/local/sbin: katalog domowy uytkownika: PWD=/home/user jzyk (polski, Polska, kod): LANG=pl_PL.UTF-8 16
zmienne rodowiskowe oprócz tych zmiennych, mog by te inne zmienne [Sobaniec2002], [KS1993]: cieka przeszukiwa stron pomocy: MANPATH znak zachty: PS1 znak zachty w drugiej linii: PS2 domylny edytor tekstu: EDITOR domylna przegldarka plików tekstowych: PAGER domylna drukarka: PRINTER i wiele innych 17
zmienne rodowiskowe porównajmy rezultaty polece: user@koziolek:~$ echo $HOME /home/user oraz: user@koziolek:~$ echo $$HOME 1600HOME 18
zmienne rodowiskowe poniewa$$ jest numerem procesu aktualnie wykonywanej powłoki, wynik jest zrozumiały po wydaniu polecenia: user@koziolek:~$ ps p 1600 PID TTY TIME CMD 1600 pts/0 00:00:00 bash gdzie ps jest poleceniem okrelajcym stan procesów 19
zmienne rodowiskowe zakresem wanoci zmiennych jest aktualny proces powłoki, jeeli zakres ma by rozszerzony, to zmienna musi by przesłana do procesów podrzdnych poleceniem export export nazwa_zmiennej 20
zmienne rodowiskowe w powłoce csh mona zmienne lokalne i globalne ustawia i usuwa poleceniami set i unset oraz setenv i unsetenv 21
zmienne rodowiskowe w powłoce bash ustawienie i eksport zmiennej w jednym kroku [Sobaniec2002]: user@koziolek:~$ export ABC=123 user@koziolek:~$ echo $ABC 123 user@koziolek:~$ 22
przekierowanie wejcia/wyjcia przekierowanie wejcia/wyjcia procesów polega na zmianie standardowych urzdze wprowadzania i wyprowadzania informacji na inne wygodne dla uytkownika [KS1993] 23
przekierowanie wejcia/wyjcia kademu procesowi w chwili uruchamiania przypisuje si automatycznie standardowy strumie wejciowy (stdin), standardowy strumie wyjciowy (stdout) oraz standardowy strumie diagnostyczny (stderr) normalnie stdin jest dołczony do klawiatury, a stdout i stderr do ekranu 24
przekierowanie wejcia/wyjcia normalnie stdin jest dołczony do klawiatury, a stdout i stderr do ekranu komputera (terminala) strumie to abstrakcja ródła albo ujcia danych: ródłem moe by klawiatura albo dysk, a ujciem moe by ekran komputera (terminal) albo plik [Sobaniec 2002] 25
przekierowanie wejcia/wyjcia wikszo programów wpisuje wyniki do standardowego strumienia wyjciowego i oczekuje danych ze standardowego strumienia wejciowego uytkownik nie musi wic podawa, gdzie naley kierowa wyniki 26
przekierowanie wejcia/wyjcia kierunki wprowadzania i wyprowadzania s oznaczone odpowiednio znakami < i > przykładowo, uywajc polecenia ls mona wyprowadzi wykaz plików zawartych w katalogu do dowolnego pliku stosujemy kolejno nastpujce polecenia: 27
przekierowanie wejcia/wyjcia user@koziolek:~$ ls otrzymujemy wykaz 9 plików w 5 kolumnach user@koziolek:~$ ls > plik_ls user@koziolek:~$ ls otrzymujemy wykaz 10 plików w 5 kolumnach user@koziolek:~$ cat plik_ls otrzymujemy wykaz 10 plików w 1 kolumnie 28
przekierowanie wejcia/wyjcia przekierowanie: > pusty spowoduje utworzenie pustego pliku o nazwie pusty co mona sprawdzi: ls l pusty -rw-rw-r - 1 user user 0 2012-03-23 00:47 pusty 29
przekierowanie wejcia/wyjcia kolejne wykonanie polece [KS1993]: ls > plik_ls ls >> plik_ls spowoduje, e w pliku plik_ls znajduje si np. 20 wpisów, czyli 2 razy po 10 takich samych wpisów. sprawdzamy: cat plik_ls 30
przekierowanie wejcia/wyjcia zmiana standardowego strumienia wejciowego [KS1993]: sort< telefony > telefony_sort program sortujcy sort pobiera dane z pliku telefony, a wyniki przesyła do pliku telefony_sort 31
przekierowanie wejcia/wyjcia konkatenacja dwóch plików i wyprowadzenie wyników na ekran komputera: cat plik1 plik2 konkatenacja dwóch plików i wyprowadzenie wyników do pliku plik3 : cat plik1 plik2 > plik3 32
przetwarzanie potokowe powłoka umoliwia tworzenie łczy komunikacji midzy procesami, i tworzy tzw. potok. (ang. pipeline). Łcza kieruj wynik jednego programu (procesu) na wejcie drugiego czyli stdout jednego procesu wchodzi na stdin drugiego 33
przetwarzanie potokowe user@koziolek:~$ ls al wc 37 290 2193 (wc liczy wiersze, słowa, bajty) rozwamy jeszcze kolejny potok, bdcy filtrem: user@koziolek:~$ ls al grep cookie -rw------- 1 user user 256 2012-03-08 11:39.pulse-cookie 34
wieloprogramowo współbiene wykonywanie w danej chwili wielu programów (dokładniej współbienej pracy wielu procesów wykonujcych programy) w systemie Linux odrónia si proces, czyli obiekt dynamiczny tworzony przez system od wykonywanego przez proces programu, czyli obiektu statycznego zapisanego jako plik 35
wieloprogramowo w systemie Linux moliwe jest uruchomienie pewnego programu i w czasie jego pracy wykonywanie innych czynnoci na komputerze moliwe jest te uruchomienie dwa razy tego samego programu dla rónych zestawów danych 36
wieloprogramowo aby spowodowa równoczesne wykonanie dwóch programów lub polece, uytkownik musi nakaza powłoce uruchomienie polecenia2 bez czekania na zakoczenie pracy polecenia1 daniem nieczekania jest znak & (ampersand) na kocu polecenia1 37
wieloprogramowo polecenie1& polecenie2 programy wykonujce oba polecenia bd pracowały równoczenie, ale polecenie1 bdzie realizowane w tle, a polecenie2 bdzie wykonywane jako praca pierwszoplanowa 38
wieloprogramowo user@koziolek:~$ (sleep 60; who)& 7288 zawieszenie wykonania procesu na 60s 39
programowanie w powłoce wprowadzenie zmienne powłoki procedury powłoki wykorzystanie struktur sterujcych funkcje wewntrzne powłoki 40
wprowadzenie programowanie w powłoce polega na: operowaniu zmiennymi tworzeniu procedur powłoki (skryptów) uyciu struktur sterujcych wykorzystaniu polece wewntrznych 41
wprowadzenie polecenia mona zagnieda za pomoc nawiasów okrgłych lub klamrowych cig polece w nawiasach okrgłych bdzie wykonany jako samodzielny podrzdny proces powłoki, zmiany w otoczeniu nie bd wpływa na aktualny proces powłoki na przykład: 42
wprowadzenie $pwd /usr/studenci $(cd /bin; ls la mkdir) -rwx r 1 bin 2048 2012-03-08 mkdir $pwd /usr/studenci polecenie cd w nawiasach okrgłych nie spowodowało zmiany katalogu biecego 43
wprowadzenie cig polece w nawiasach klamrowych bdzie wykonany przez aktualny proces powłoki, spowoduje to zmian katalogu biecego, na przykład: 44
wprowadzenie $pwd /usr/studenci ${ cd /bin; ls la mkdir;} -rwx r 1 bin 2048 2012-03-08 mkdir $pwd /bin 45
wprowadzenie nawiasy klamrowe oddzielaj te nazw zmiennej od innych znaków: a= To jest echo ${a}test na ekranie wywietli si napis To jest test 46
zmienne powłoki nazwy zmiennych stanowi cigi znaków zaczynajce si od litery, złoone z liter, cyfr i znaków podkrelenia warto zmiennej to łacuch znaków przypisanie wartoci zmiennej: Nazwa_zmiennej=warto 47
zmienne powłoki warto zmiennej oznaczana przez $ przed nazw zmiennej aktualn warto zmiennej poznamy poleceniem: echo $nazwa_zmiennej wartoci zmiennej moe by nazwa polecenia albo potok polece 48
zmienne powłoki uytkownik moe definiowa własne zmienne, w celu skrócenia zapisu zmienne o wartociach zdefiniowanych pierwotnie to zmienne rodowiskowe wartoci tych zmiennych mona zmienia kwestia ta była ju poruszona wczeniej 49
procedury powłoki jeeli cigi polece umiecimy w pliku, to taki plik jest nazywany procedur powłoki, albo skryptem plik taki wykonuje si przez uruchomienie nowego procesu powłoki i przekazanie mu tego pliku jako danych wejciowych 50
procedury powłoki $ sh procedura albo $ sh<procedura najwygodniej jest zmieni plik tekstowy w plik z prawem wykonywania: $ chmod a+x procedura np. mona stworzy procedur dir zawierajca ls al., i zmieni jej prawa wykonywania 51
procedury powłoki np. mona stworzy procedur dir zawierajca ls al, i zmieni jej prawa wykonywania 52
wykorzystanie struktur sterujcych w jzyku polece powłoki kademu poleceniu po jego wykonaniu przypisuje si kod zakoczenia, albo TRUE, albo FALSE w zalenoci o wartoci tego kodu, powłoka moe podj dalsze operacje, n.p.: 53
wykorzystanie struktur sterujcych polecenie1 && polecenie2 polecenie2 si wykona jeli polecenie1 zakoczyło si powodzeniem (koniunkcja warunkowa) polecenie1 polecenie2 polecenie2 wykona si tylko wtedy, gdy polecenie1 zakoczy si niepowodzeniem (alternatywa warunkowa) 54
funkcje wewntrzne powłoki funkcje wykonywane s wewntrznie przez powłok i nie prowadzce do utworzenia nowego procesu, std efektywne zwane te poleceniami wbudowanymi podamy tutaj jedn funkcj (polecenie kropka (.):.plik funkcja ta czyta i wykonuje polecenia z pliku, a nastpnie wraca do miejsca wywołania 55
uwagi kocowe dzisiejsze szkolenie powicone programowaniu powłoki nie wyczerpuje oczywicie wszelkich aspektów zostały wyjanione kwestie podstawowe jestemy nadal na pocztku drogi, szereg niuansów wyjani si w codziennej praktyce 56
bibliografia [KS1993] Z. Królikowski, M. Sajkowski, System operacyjny UNIX dla pocztkujcych i zaawansowanych, Nakom, Pozna 1993. [Sobaniec2002] C. Sobaniec, System operacyjny Linux przewodnik uytkownika, Nakom, Pozna 2002. 57
bibliografia uzupełniajca [Bis2011] M. Bis, Linux w systemach embedded, BTC, Warszawa 2011. [Bauer2005] M.D. Bauer, Linux. Serwery. Bezpieczestwo, Helion, Gliwice 2005. [Frisch1996] E. Frisch, Unix. Administracja systemu, Read Me, Warszawa 1996. [Garrels2005] M. Garrels, Bash Guide for Beginners, Fultus.com, 2005. [GA2007] G. Glass, K. Ables, Linux dla programistów i uytkowników, Helion, Gliwice 2007. [HGS1999] K. Haviland, D. Gray, B. Salama, Unix. Programowanie systemowe, RM, Warszawa 1999. 58
bibliografia uzupełniajca [KD2000] O. Kirch, T. Dawson, Linux podrcznik administratora sieci, RM, Warszawa 2000. [Matthew2002] N. Matthew, R. Stones, Zaawansowane programowanie w systemie Linux, Helion 2002. [McCarty2005] B. McCarty, Red Hat Enterprise Linux i Fedora Core 2. Wprowadzenie, Helion, Gliwice 2005. [Mitchell2002] M. Mitchell, J. Oldham, A. Samuel, Linux. Programowanie dla zaawansowanych, RM, Warszawa 2002. [Strobel1997] S. Strobel, T. Uhl, Linux, WNT, Warszawa 1997. 59