Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:dydaktyka:unix:lab_zadania_i_procesy [2013/12/30 14:05]
ikaf [Procesy]
pl:dydaktyka:unix:lab_zadania_i_procesy [2019/06/27 15:50]
Linia 1: Linia 1:
-====== Praca z procesami i zadaniami ====== 
-<​code>​ 
- - Bill, wyrzuć śmieci. 
- - Nie chce mi się. 
- - sudo Bill, wyrzuć śmieci. 
- - Już idę... 
-                          /* nadesłał: Maciej Urbanek, IS 2012 */ 
-</​code>​ 
  
-===== DO PRZYGOTOWANIA ===== 
- 
-Samodzielnie należy przed tym laboratorium przygotować:​ 
- 
-    * praca z wymienionymi narzędziami //​textutils//​ 
-    * praca z **grep** 
- 
- 
-===== WPROWADZENIE ===== 
- 
- 
- 
-==== Zadania ==== 
-Zadania (ang. //jobs//) to programy uruchamiane w sesji przez powłokę. 
- 
-    * usypianie (ang. //​suspend)//​ zadań <​key>​C-z</​key>​ , 
-    * spis zadań **jobs**, 
-    * przełączanie zadań **fg**, 
-    * praca w tle **bg**, 
-    * usuwanie zadań **kill**, 
-    * równoległe uruchamianie zadań (ampersand, czyli ''&''​),​ 
-    * uwaga, w.w. polecenia są poleceniami wbudowanymi w shell i są opisane w manualu shella! 
- 
-==== Procesy ==== 
- 
-    * identyfikator PID i jego znaczenie 
-    * wyświetlanie listy procesów **ps**, ''​ps -A''​ (Sun), ''​ps -ax''​ (Linux), a także ''​ps -u user'',​ ''​ps aux|grep user''​ 
-    * zmniejszanie priorytetu **nice**, 
-    * usuwanie procesów **kill**, ''​kill -9''​ 
- 
- 
-<​code>​ 
-W pubie siedzi grupka informatyków,​ obok grupka dresiarzy. ​ 
-Drudzy zachowują się agresywnie i podśmiewają się z postury geeków i ich flanelowych wdzianek. ​ 
-Atmosfera gęstnieje, nie wiadomo czy nie dojdzie do awantury. Wtem… dzwoni telefon. [odbiera informatyk] ​ 
-- Co??? W ogóle ci nie odpowiada? W ogóle się ciebie nie słucha? ​ 
-Próbowałeś już „nice”? Taak? Nic nie dało..? Ok. Dobra — skilluj go. [odkłada słuchawkę] ​ 
-W tym momencie najbardziej napakowany z dresów wstaje i z wielkim podziwem odzywa się do informatyka:​ 
-- Szacun. 
- 
-                                                  /* nadesłał: Filip Szukała, IS 2013 */ 
-</​code>​ 
-==== GNU coreutils i inne ==== 
-Jest to zestaw podstawowych narzędzi GNU operujących na tekście, w tym: 
- 
-    * **tail**/​**head** 
-    * **cat**/​**tac** 
-    * **wc** 
-    * **cut** 
-    * **sort** 
-    * **tr** 
-    * **uniq** 
-    * **seq** 
-    * **xargs** 
-    * **expr** 
-    * **sed** (dla zainteresowanych) 
- 
-Proszę przeglądnąć manule do w.w.! 
- 
-Uwaga: warto też poczytać ''​man textutils''​ (większość w.w. poleceń była kiedyś w pakiecie //GNU textutils//​). 
- 
- 
-==== Grep ==== 
-Program **grep** służy do wyszukiwania zadanych wyrażeniami regularnymi wzorców w tekście. 
- 
-  grep napis [plik] 
- 
-Przydatne opcje: 
-  * ''​-i''​ ignoruje wielkość znaków 
-  * ''​-v''​ odwraca działanie **grep** (czyli wyświetl wszystkie linie, które NIE zawierają napisu). ​ 
- 
-==== Strumienie ==== 
-Każdy proces pracujący w środowisku Unix komunikuje się z otoczeniem m.in. przez strumienie. Domyślnie są otwierane 3: 
- 
-    * 0 //standard input// (stdin) 
-    * 1 //standard output// (stdout) 
-    * 2 //standard error// (output) (stderr) 
- 
- 
-==== Przekierowania strumieni ==== 
-Powłoka pozwala na przekierowanie strumieni, w sh znakami: 
-  * ''>''​ przekierowanie stdout do pliku (nadpisanie) 
-  * ''>''''>''​ jak wyżej, dopisanie 
-  * ''<''​ przekierowanie stdin z pliku  
- 
-  [n] > plik 
-  [n] >> plik 
-  < plik 
- 
-Przykłady: 
- 
-  ps > foo 
-  w 2 > bar 
-  ls >foo 2>bar 
- 
-Przydatny przy przekierowaniu stderr (2) jest ''/​dev/​null''​. Pozwala na pozbycie się danych. 
- 
- 
-==== Komunikacja między procesami ==== 
-Powłoka pozwala na realizowanie komunikacji między procesami przez łączenie strumieni, uruchamiane przez znak ''​|''​ (ang. //pipe//). 
-Powoduje on połącznie stdout zadania 1 z stdin zadania 2. Przykład: 
- 
-  ls | wc 
-  ps | sort 
- 
-Pozwala to na tworzenie dowolnie złożonych filtrów: 
- 
-  ps -A | grep tcsh | wc 
-  cut -d ':'​ -f 5 /etc/passwd | grep -i jacek | wc -l 
- 
- 
-==== Podstawianie wyników pracy poleceń ==== 
-Podstawianie wyników poleceń w linii pleceń jest realizowane przez odwrotny apostrof (klawisz tyldy, nad tabulatorem),​ na przykład: 
- 
-  $ echo "To jest system"​ `uname` "na maszynie "​`hostname` 
- 
-  To jest system Linux na maszynie enterprise 
- 
- 
-===== ĆWICZENIA ===== 
- 
- 
-==== - Zadania ==== 
-Ćwiczenie wykonywać w GNU Bash. 
- 
-  - uruchomić ''​lynx www.agh.edu.pl''​ 
-  - nacisnąć <​key>​C-z</​key>,​ 
-  - uruchomić ''​lynx www.uj.edu.pl''​ 
-  - nacisnąć <​key>​C-z</​key>,​ 
-  - napisać ''​jobs'',​ 
-  - uruchomić ''​lynx www.pk.edu.pl''​ 
-  - nacisnąć <​key>​C-z</​key>,​ 
-  - napisać ''​jobs'',​ 
-  - napisać ''​fg %2'',​ 
-  - nacisnąć <​key>​C-z</​key>,​ 
-  - itd.... 
-  - napisać ''​kill %3''​ 
-  - napisać ''​jobs'',​ 
-  - itd.... 
- 
-O ile zadanie nie znika po ''​kill''​ trzeba uzyc opcji ''​-9''​. 
- 
-Podobne ćwiczenie powtórzyć dla innych programów, np. **vi** (sprawdzić czy edytor nie uruchamia dodatkowej powłoki zamiast suspend), **less**, **mc**, itp. 
- 
- 
-==== - Procesy ==== 
- 
-  - Otworzyć 3 sesje (zalogować się 3 razy, np. przez SSH), w miarę możliwości sprawdzić różnice w systemach Linux, Solaris (np. serwer //​student//​). 
-  - Sprawdzić przy pomocy ps pracujące procesy: w tej samej sesji, tylko swoje procesy, wszystkie procesy w systemie. 
-  - Przetestować działanie znanych opcji **ps**, jakie są różnice pomiędzy Linux a Solaris? 
-  - Przy pomocy kill usunąć z sesji B procesy pracujące w sesji A. 
-  - Jak usunąć login shell? 
-  - Oglądnąć przy pomocy ''​kill -l''​ spis wszystkich sygnałów. 
-  - Uruchomić procesy z podwyższoną wartością //nice//. 
-  - Zmienić wartość //nice// pracującego już procesu. 
-  - Jak wyświetlić wartość //nice// procesu? 
- 
-==== - Procesy a Zadania ==== 
-  * każde uruchomienie programu w Unixie tworzy //proces// 
-  * zadania, są mechanizmem dostarczanym przez shell dla ułatwienia obsługi uruchamianych z danej sesji (instancji shella) procesów 
-  * żeby wyświetlić PID procesów którym odpowiadają zadania należy po uruchomieniu kilku zadań napisać ''​jobs -l''​ 
-  * każda sesja jest obsługiwana przez plik urządzenia //​pseudoterminala//​ 
-  * aby wyświetlić w.w. plik należy wpisać ''​tty''​ (patrz Lab1) 
-  * aby wyświetlić procesy pracyjące w danej sesji należy wpisać ​ ''​ps -t`tty`''​ 
- 
- 
-==== - Przekazywanie wyników pracy do plików ==== 
- 
-    * Przekierować wyniki pracy różnych poleceń do plików, np. dla **ps ls finger who**. Przeglądnąć powstałe pliki. 
-    * Porównać działanie ''>''​ i ''>''''>''​ Na przykład: 
- 
-  ps 
-  ps > plik1 
-  more plik1 
-  ls > plik2 
-  more plik2 
-  ps >> plik2 
-  more plik2 
- 
-    * Przekierować wyjście błędów, np: 
- 
-  kill 1 
-  kill 1 1>a 2>b 
- 
-Uwaga! przekierowania są inicjalizowane przez shell //przed// uruchomieniem polecenia! 
-Dlatego też, jeżeli mamy plik do posortowania,​ np: 
-  who >plik 
-i wykonamy: 
-  sort plik >plik 
-otrzymamy //pusty// plik, gdyż jego zawartość zostanie skrócona do zera //przed// posortowaniem. 
-A uruchamiając:​ 
-  sort plik >>​plik 
-otrzymamy w ''​plik''​u posortowaną zawartość //​dopisaną//​ do oryginalnej,​ nie posortowanej! 
- 
- 
- 
-==== - GNU textutils i inne ==== 
- 
-    * Mając spis zalogowanych użytkowników:​ 
- 
-  who > spis 
- 
-    * Posortować go alfabetycznie:​ 
- 
-  sort spis > spis.alf 
- 
-    * Wyświetlić początek i koniec spisu (Ile linii jest wyświetlanych?​ Jak zadać tę liczbę?): 
- 
-  head spis.alf 
-  head spis.alf >​spis.alf.pocz 
-  tail spis.alf 
-  tail spis.alf >​spis.alf.kon 
- 
-    * Wybrać z tego spisu (przy pomocy **grep**) użytkowników zalogowanych z komputerów w domenie ''​ia.agh.edu.pl''​ 
-    * Przećwiczyć inne polecenia z TextUtils. 
-    * Powtórzyć ćwiczenia dla innych danych wejściowych,​ np. spisu plików, procesów, itp. 
-    * Skąd są czytane dane jeżeli nie poda się nazwy plików w poleceniach typu **grep**, **tail**? 
-    * Co to jest znak końca pliku i jak się go wysyła "​ręcznie"?​ 
-    * Po laboratorium uzupełnić wiadomości nt. wyrażeń regularnych (//​grep(1)//​). 
- 
- 
-==== - Komunikacja między procesami ==== 
- 
-Należy ponownie wykonać ćwiczenia z p. 4.4 nie używając plików pośrednich,​ tylko odpowiednio łączyć //stdin// z //stdout//, np. 
- 
-  who | sort | grep '​ia.agh.edu.pl'​ | head 
- 
-Inne przykłady: 
- 
-  ls | wc 
-  ps | sort 
-  ps -A | grep tcsh 
-  ps | head -n 1 
-  who | wc 
-  who | sort 
-  nice du -sk /​usr/​local/​* 2>/​dev/​null | sort -rn | head 
- 
- 
-Proszę przeprowadzić jak najwięcej własnych eksperymentów z wykorzystaniem wszystkich znanych poleceń! 
- 
-[[lab_pliki_i_polecenia#​varia|Przykład dłuższego filtru]]. 
- 
- 
-===== Zadanie dodatkowe ===== 
-Używając wyłącznie poleceń **grep, cut, tr, head, tail**, na podstawie strony [[http://​nbp.pl/​home.aspx?​f=/​kursy/​kursya.html]] stworzyć filtr generujący tekstową tabelę kursów walut. \\ 
-Przykładowy wynik końcowy może wyglądać następująco:​ 
-<​code>​ 
-bat (Tajlandia) 1 THB 0,0895 
-dolar amerykański 1 USD 2,8953 
-dolar australijski 1 AUD 2,6376 
-dolar Hongkongu 1 HKD 0,3730 
-dolar kanadyjski 1 CAD 2,8452 
-dolar nowozelandzki 1 NZD 2,0405 
-dolar singapurski 1 SGD 2,0657 
-euro 1 EUR 3,9136 
-forint (Węgry) 100 HUF 1,4782 
-frank szwajcarski 1 CHF 2,7316 
-funt szterling 1 GBP 4,3350 
-hrywna (Ukraina) 1 UAH 0,3633 
-jen (Japonia) 100 JPY 3,1991 
-korona czeska 1 CZK 0,1539 
-korona duńska 1 DKK 0,5260 
-korona estońska 1 EEK 0,2501 
-korona islandzka 100 ISK 2,2784 
-korona norweska 1 NOK 0,4872 
-korona szwedzka 1 SEK 0,4020 
-kuna chorwacka 1 HRK 0,5392 
-lej rumuński 1 RON 0,9572 
-lew bułgarski 1 BGN 2,0010 
-lira turecka 1 TRY 1,8767 
-lit litewski 1 LTL 1,1334 
-łat łotewski 1 LVL 5,5281 
-peso filipińskie 1 PHP 0,0634 
-peso meksykańskie 1 MXN 0,2295 
-rand (RPA) 1 ZAR 0,3933 
-real brazylijski 1 BRL 1,6079 
-ringgit malezyjski 1 MYR 0,8722 
-rubel rosyjski 1 RUB 0,0987 
-rupia (Indonezja) 10000 IDR 3,1798 
-won (Korea Płd.) 100 KRW 0,2550 
-yuan renminbi (Chiny) 1 CNY 0,4242 
-SDR (MFW) 1 XDR 4,4149 
-</​code>​ 
-Konstrukcję filtru można rozpocząć poleceniem: 
-<​code>​ 
-echo -e 'GET /​home.aspx?​f=/​kursy/​kursya.html HTTP/​1.0\n\n'​ | nc nbp.pl 80 
-</​code>​ 
-które umożliwia wyświetlenie zawartości strony. 
- 
- 
-===== Jeśli chcesz wiedzieć więcej ===== 
- 
-  * Brad Yoes, //​[[http://​www.ibm.com/​developerworks/​aix/​library/​au-unixtext/​index.html?​cmp=dw&​cpb=dwaix&​ct=dwnew&​cr=dwnen&​ccy=zz&​csr=032212|Introduction to text manipulation on UNIX-based systems]]//,​ IBM dW, 4 Mar 2012. 
-  * Zobacz też na [[:​pl:​dydaktyka:​unix:​lab_skrypty#​jesli_chcesz_wiedziec_wiecej|analogiczną pozycję w następnym lab]]. 
- 
- 
-===== VARIA ===== 
-Przy zamykaniu powłoki do wszystkich procesów z niej uruchomionych wysyłany jest sygnał //HangUp// (''​HUP''​). 
-Aby pozostawić jakieś polecenie pracujące w tel po zamknięciu shella, należy je uruchomić: 
-  nohup polecenie 
-  
pl/dydaktyka/unix/lab_zadania_i_procesy.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0