Ćwiczenie 2
Temat:
Strumienie, potoki,
procesy
Cel ćwiczenia:
Pierwszym celem tego ćwiczenia jest zapoznanie studenta
z możliwościami wykorzystania metod przekierowywania strumieni, metodami
przetwarzania potoków z wykorzystaniem filtrów sortowania, grupowania,
poleceń zamiany i wyszukiwania fraz w strumieniu, obliczania ilości linii i
znaków czy łączenia strumieni.
Drugim celem ćwiczenia jest poznanie możliwości wyświetlania,
uruchamiania, zabijania i ustawiania priorytetów procesów w systemie Linux.
Ostatnim punktem ćwiczenia jest zapoznanie z możliwościami pracy w edytorze
tekstowym VIM dostępnym w linii komend systemu.
Strumienie danych
Każdy program do działania potrzebuje informacji, które może przetworzyć i na
podstawie których może działać. Taką informacją dla programu mogą być dane liczbowe
wprowadzane do programu za pomocą klawiatury lub odczytywane przez program
bezpośrednio z dysku komputera (z pliku) czy z bazy danych. Innym przykładem informacji
przekazywanych do programu mogą być kliknięcia lub wskazania myszy. Z punktu widzenia
programu komputerowego wyżej opisany proces dostarczania informacji do programu
zwany jest standardowym strumieniem wejścia (z ang. Standard input i oznaczane w skrócie
jako Stdin ). Program, aby miał jakiekolwiek zastosowanie dla człowieka musi coś zwracać.
Program może zapisywać wynik swojego działania do pliku lub np. bazy danych. W innym
przypadku wyniki działania programu mogą być przesłane wybranym protokołem do sieci
Internet lub do drukarki lub w najprostszym przypadku mogą zostać wyświetlone na ekranie
komputera. Proces dostarczania informacji przez program nazywany jest standardowym
wyjściem (z ang. Standard output oznaczane Stdout ). Dodatkowo programy dysponują
możliwością wysyłania błędów działania na standardowe wyjście błędów (z ang. Standard
error Stderr ). Schemat przepływu standardowych strumieni danych w programach
przedstawia rysunek 1.
Standardowe wyjście
(Stdout)
Proces
Standardowe
wejście (Stdin)
(program)
Standardowe wyjście
błędów (Stderr)
Rysunek 1 Schemat przepływu standardowych strumieni danych w programach.
Strumienie, potoki, procesy 17
Poszczególne strumienie wejścia, wyjścia i wyjścia błędów reprezentowane są w systemie
poprzez wartości:
" 0 - Stdin - standardowe wejście
" 1 - Stdout - standardowe wyjście
" 2 - Stderr - standardowe wyjście błędów
Przykładowo, wydając komendę ls wyświetlającą zawartość katalogu root:
ls /root/
jako standardowe wejście programu ls podajemy (za pomocą klawiatury) ścieżkę, której
zawartość chcemy wyświetlić. Program wypisuje na standardowe wyjście listę plików, które
znajdują się z katalogu /root/. Jednak jeśli zażądamy, aby program ls wyświetlił zawartość
nieistniejącego katalogu np.
ls /root/dokumenty
program ls wyświetli komunikat standardowego błędu informujący, iż żądana ścieżka nie
została odnaleziona.
Przekierowanie strumieni wejścia / wyjścia
Standardowe strumienie wejścia i wyjścia programów mogą zostać przekierowane do pliku
(lub z pliku - w przypadku wejścia). Ta metoda przekierowywania realizowana jest za pomocą
symboli nawiasów ostrych, pojedynczych lub podwójnych, według zasady:
" Symbol > przekierowuje standardowe wyjście do pliku. Jeśli plik nie istnieje to
zostaje utworzony, jeśli istnieje to zostanie nadpisany np.
ls la > pliki_w_katalogu.txt
" Symbol >> przekierowuje standardowe wejście do plik, jednak z tą różnicą, iż jeśli plik
istnieje to nie zostanie nadpisany, lecz wyjście programu zostanie dopisane do tego
pliku. W przypadku gdy plik nie istnieje, zostanie utworzony.
ls la >> pliki_w_katalogu.txt
Strumienie, potoki, procesy 18
" Symbol < przekierowuje zawartość pliku na standardowe wejście programu
cat < kontakty.txt
" Symbol << przekazuje do procesu zawartość standardowego wejścia, aż do
napotkania wskazanego wzorca tekstowego:
cat << wzorzec
Możliwe jest także przekierowanie strumieni wyjścia i wyjścia błędu za pomocą symboli
systemowych 1 (wyjście) i 2 (wyjście błędu).
Przykład:
Polecenie: ls la /root/ wyświetli wszystkie pliki w katalogu /root/. Polecenie zatem
nie ma wyjścia błędu (2), a jedynie standartowe wyjście (1), którym jest lista plików w
katalogu /root. Natomiast polecenie: ls la /root/dokumenty nie posiada
standardowego wyjścia (1) ponieważ katalog nie istnieje, posiada natomiast wyjście błędu
(2) informujące, że żądany katalog nie został odnaleziony. Aby przekierować w/w wyjścia
użyć można składni:
" ls la /root/ 1>pliki_roota.txt
W tym przypadku istnieje standardowe wyjście (lista plików) i zostanie ono zapisane do pliku
pliki.txt
" ls la /root/ 2>bledy_roota.txt
W tym przypadku nie istnieje standardowe wyjście błędów (2) zatem plik bledy.txt
pozostanie pusty.
Dokładnie odwrotnie będzie dla nieistniejącego katalogu:
" ls la /root/dokumenty 1>pliki_dokum.txt
" ls la /root/dokumenty 2>bledy_dokum.txt
Standartowe wyjście nie będzie istnieć (1) a plik_dokum.txt pozostanie pusty, natomiast
standardowe wyjście błędu (2) zostanie zapisane do pliku bledy_dokum.txt .
Strumienie, potoki, procesy 19
Powyższa składnia przekierowania standardowego wyjścia i wyjścia błędów może zostać
zastosowana w złożeniu:
" ls la /root/ 1>pliki_roota.txt 2>bledy_roota.txt
W takiej sytuacji standardowe wejście zostanie zapisane do jednego pliku, natomiast wyjście
błędów do drugiego pliku (jeśli istnieją).
Podobnie będzie w sytuacji, gdy polecenie będzie zwracało zawartość mieszaną wyjścia, np.:
ls la /root/ /etc/abcd
Powyższe polecenie będzie zawierało zarówno standardowe wyjście (listę plików katalogu
/root/) ale także standardowy błąd informujący, że katalog abcd nie istnieje. Zatem stosując
polecenie przekierowania:
ls la /root/ /etc/abcd 1>listy_plikow.txt 2>bledy.txt
Uzyskany zostanie efekt zapisania listy plików w jednym pliku, a błędów w pliku drugim.
W systemie Linux możliwe jest także przekazanie któregoś ze strumieni do urządzenia:
/dev/null
które to urządzenie jest symbolicznym urządzeniem usuwającym wszystkie wysłane do niego
dane. Jest tworem reprezentującym kosz systemowy ( czarna dziura ). Np. polecenie:
ls la /root/ /etc/abcd 2>/dev/null
spowoduje wyświetlenie plików w tych przypadkach, gdy katalogi istnieją, natomiast błędy
(np. gdy katalog nie istnieje) przekierowane zostaną do urządzenia kasującego, a co za tym
idzie nie zostaną wyświetlone i nigdzie zapisane.
Ćwiczenie 1. Przekierowanie strumieni
Celem ćwiczenia jest przetestowanie możliwości przekierowania standardowych strumieni w
konsoli systemu Linux:
Strumienie, potoki, procesy 20
Polecenie cat nazwa_pliku wyświetla na ekran zawartość pliku. Polecenie to wywołane bez
nazwy pliku wyświetla na ekran to, co zostanie do niej wysłane ze standardowego wejścia,
czyli z klawiatury, czego efektem jest powtarzanie wszystkiego co zostanie wpisane. Ten tryb
pracy zakończony zostaje po naciśnięciu Ctrl+D. Polecenie cat wywołane z flagą n
wyświetla dodatkowo numery linii.
1. Przetestować działanie polecenia cat
1.1. Wywołanie polecenia cat nazwa_pliku oraz cat -n nazwa_pliku
1.2. Wywołanie polecenia cat bez wskazywania pliku.
2. Wywołanie polecenia cat z przekierowaniami
2.1. cat /etc/resolv.conf > serwery_dns.txt
2.2. cat >> nowy_plik.txt
Polecenie wc nazwa_pliku wyświetla statystyki dotyczące tekstu w danym pliku, a
mianowicie ilość wierszy, wyrazów i znaków. Polecenie wywołane bez nazwy pliku, podobnie
jak polecenie cat wchodzi w tryb wpisywania tekstu, a po zakończeniu wprowadzania
(naciśnięciu kombinacji Ctrl+D) wyświetla statystyki dotyczące wpisanego tekstu.
3. Przetestować działanie polecenia wc
3.1. Wywołanie polecenia wc nazwa_pliku wraz z flagami: -m, -l, -w
3.2. Wywołanie polecenia wc bez wskazywania pliku.
4. Wywołanie polecenie wc z przekierowaniami
4.1. wc /etc/group >> statystyki_grup.txt
4.2. wc >> nowy_plik.txt
5. Sprawdzić, ile plików i katalogów znajduje się w katalogu /etc/. W tym celu:
Strumienie, potoki, procesy 21
5.1. Stworzyć plik tekstowy pliki_etc.txt zawierający spis plików i katalogów
znajdujących się w katalogu /etc/
5.2. Wykorzystując polecenie wc sprawdzić, ile plików i katalogów znajduje się w
katalogu /etc/ (należy użyć utworzonego pliku ze spisem).
6. Wyświetlić na ekran tylko wyniki błędów wyszukiwania plików posiadających w nazwie
net* , natomiast wyniki zwrócone przez program find przekierować do pliku
szukaj_net.txt . Szukanie w poniższych katalogach należy wykonać za pomocą jednego
polecenia:
" /sys/module/network/
" /var/www/
" /etc/
7. Przekierować zawartość poniższych plików do pliku dane_uzytkownikow.txt :
" /etc/passwd
" /etc/group
" /etc/shadow
W systemie Linux, użytkownik (lub wielu użytkowników) ma możliwość logowania się do kilku
konsol jednocześnie. Aby przełączyć ekran na drugą konsolę, należy użyć kombinacji klawiszy
Alt(lewy)+F2, aby przełączyć ekran na trzecią konsolę Alt(lewy)+F3 itd. W każdej z konsol
może być zalogowany ten sam użytkownik, a uruchamiane tam programy działają
niezależnie. W systemie kolejne konsole reprezentowane są przez plik:
/dev/tty1
(w tym przypadku reprezentującym konsolę nr 1, dla kolejnych analogicznie tty2, tty3).
Istnieje także plik:
/dev/tty
Strumienie, potoki, procesy 22
który reprezentuje konsolę, do której jest aktualnie zalogowany użytkownik.
8. Wysłać dowolną wiadomość tekstową z konsoli nr 1 (tty1) na konsolę 2 (tty2). W tym
celu:
8.1. Przetestować polecenie wyświetlające dowolny tekst na ekran :
echo przykładwy tekst
8.2. Zalogować się do konsoli 1 i 2 (Alt+1, Alt+2). Z konsoli 1 wysłać dowolną wiadomość
tekstową do konsoli 2 (przekierować tekst do urządzenia konsoli 2)
9. Wykonać ćwiczenie analogiczne jak w punkcie 6 (wyszukiwanie frazy net* w
katalogach) z tą różnicą, że wyniki wyszukiwania należy wysłać na konsolę tty2,
natomiast błędy na konsolę tty3. Wyszukiwanie wykonywać w konsoli tty1.
Potoki i ich przetwarzanie
Potok powstaje w sytuacji, gdy standardowe wyjście jednego procesu (programu) stanowi
wejście dla drugiego programu. W systemie Linux przekazanie wyjścia na wejście drugiego
programu uzyskuje się za pomocą symbolu | Np.:
cat /etc/passwd | wc l
Jak już wiadomo z poprzedniego ćwiczenia, wyjściem polecenia cat jest zawartość pliku (w
tym wypadku zawartość pliku passwd), natomiast polecenie wc z flagą -l zwraca liczbę
wierszy w pliku. Jak widać w powyższym przykładzie, polecenie wc nie zostało wywołane z
nazwą pliku, lecz przekierowany został do niego strumień (wyjście polecenia cat). Efektem
działania w/w polecenia będzie tylko liczba linii w pliku passwd, użytkownik nie zobaczy
zawartości pliku passwd. Nic nie stoi na przeszkodzie, aby na końcu strumienia umieścić
przekierowanie do pliku, analogicznie do poprzedniego ćwiczenia:
cat /etc/passwd | wc l >> ile_lini.txt
Strumienie, potoki, procesy 23
W tym przykładzie liczba linii pliku passwd zapisana zostanie do pliku tekstowego.
Sprawdzenie ilości plików i katalogów (analogicznie do poprzedniego ćwiczenia) mogło by się
odbyć z użyciem strumieni, za pomocą poniższego polecenia, które nie wymaga użycia pliku
pośredniczącego:
ls /etc/ | wc w
Polecenie to jest tożsame z poniższymi poleceniami, które związane są z użyciem
tymczasowego pliku pośredniczącego:
ls /etc/ >> zawartosc_etc.txt
wc w zawartosc_etc.txt
Filtrowanie potoków
W systemie Linux istnieje szereg programów (poleceń konsoli) przetwarzających potok
tekstowy, które mogą jako wejście przyjmować wyjście innego programu. Polecenia te
zwane są filtrami potoków. Każde z przedstawionych tutaj poleceń filtrujących potok ma
wiele możliwych do zastosowania flag, które udostępniają wiele ciekawych funkcji. Na
potrzeby tego ćwiczenia przedstawione zostaną tylko najważniejsze flagi poleceń.
Pierwszym bardzo użytecznym filtrem jest polecenie more, które dzieli tekst, jeśli ten nie
mieści się na jednym ekranie konsoli. Polecenie to znacznie ułatwia czytanie długich tekstów
i wydruków zawartości katalogów itd. np:
ls -la /etc/ | more
Do następnego ekranu tekstu polecenie more przechodzi po naciśnięciu klawisza
.
Bardzo podobnym poleceniem jest polecenie less, które realizuje dokładnie to samo zadanie
co more z tą różnicą, że pozwala poruszać się po wynikach za pomocą klawiszy kierunkowych
na klawiaturze (tzw. strzałek) przesunięcie tekstu o jedną linię, a także przy użyciu klawiszy
- przesunięcie o całą stronę (tak jak dla polecenia more). Np.:
ls la /etc/ | less
Strumienie, potoki, procesy 24
Oba powyższe polecenia pozwalają na zastosowanie wyszukiwania frazy tekstu, wystarczy
podczas oglądania wydruku podzielonego na strony wcisnąć klawisz / , wpisać żądaną frazę
i zatwierdzić klawiszem , a wyszukiwana fraza zostanie podświetlona w
przeglądanych wynikach. Aby wyjść w dowolnym momencie z wydruku uzyskanego za
pomocą poleceń more lub less należy wcisnąć klawisz Q .
Kolejnymi filtrami potokowymi są polecenia head oraz tail które wyświetlają n pierwszych
(head) lub n ostatnich (tail) linii danego tekstu. Oczywiście, (jak większość filtrów) mogą
zostać wywołane ze wskazaniem na plik lub mogą zostać obsłużyć potok przychodzący. Np:
cat /etc/group | head n 3
wyświetla 3 pierwsze linie, natomiast:
cat /etc/group | tail n 3
3 ostatnie linie.
Kolejnym filtrem pozwalającym na wyszukiwanie frazy w tekście jest polecenie grep.
Polecenie to wyświetla całą linię, w której odnajdzie szukany tekst. Np:
cat /etc/group | grep root
wyświetli wszystkie linie z pliku group w których wystąpi fraza root . W przypadku
domyślnej instalacji systemu Fedora jest to ok 7 linii tekstu. Nic nie stoi na przeszkodzie, aby
w wynikach wyszukiwania poszukać ponownie kolejnej frazy, np.
cat /etc/group | grep root | grep bin
polecenie wyświetli linie z pliku group, które zawierają frazę root, a następnie w wynikach
wyszukiwania wyszuka linie, które zawierają frazę bin. Proces można kontynuować, a
ostatecznie wyniki zapisać można do pliku np.:
cat /etc/group | grep root | grep bin | grep adm >> wyniki.txt
Kolejnym użytecznym poleceniem należącym do grupy filtrów jest polecenie cut. Pozwala
ono na wyświetlenie tylko konkretnego znaku (lub grupy) znaków każdej linii: np:
Strumienie, potoki, procesy 25
cat /etc/group | cut -c 1
Wyświetla tylko pierwsze znaki, każdej linii przekierowanego do "cut tekstu.
Chcąc wyświetlić dwa pierwsze znaki każdej linii wraz ze znakiem czwartym, piątym i
szóstym należy wywołać polecenie cut następująco:
cat /etc/group | cut -c 1-2,4-6
Jeśli plik ma wyrazną strukturę kolumnową, niezależnie od tego, jakim znakiem rozdzielone
są od siebie kolumny, polecenie cut wyświetlić może wybraną kolumnę, należy jedynie za
pomocą flagi d "znak wskazać jaki znak rozdziela poszczególne kolumny (domyślnie znak
przyjęto znak tabulatora) oraz za pomocą flagi -f określić numer kolumny do wyświetlenia.
Np.
cat /etc/group | cut -d : f 1,3
Polecenie wyświetli kolumnę 1 i 3 pliku group, którego kolumny oddzielone są znakiem : .
Kolejnymi poleceniami filtrującymi strumień tekstu są polecenia sort oraz uniq. Polecenie
sort sortuje strumień wejścia (tekstowo a-z). Z flagą r odwraca kolejność sortowania (z-a),
natomiast z flagą R sort wprowadza kolejność losową tekstu. Flaga n pozwala sortować
strumień numerycznie. Polecenie sort często wywoływane jest przed poleceniem uniq, które
usuwa powtarzające się linie, ale tylko wtedy, gdy sąsiadują ze sobą, dlatego więc często
pojawia się przed nim sort, ponieważ, jeśli w tekście występują powtarzające się linia, a nie
sąsiadują ze sobą to po działaniu polecenia sort będą już ze sobą sąsiadowały. Np.
seq 1 10 >> liczby.txt
seq 5 15 >> liczby.txt
cat liczby.txt | sort -n | uniq
Wyjaśnienie: Na potrzeby powyższego przykładu zostało użyte polecenie seq które
wyświetla sekwencje liczebników. seq 10 wyświetli na ekran liczby od 1 do 10 każda w
osobnej linii. Polecenie to może także zostać wywołane ze zdefiniowanym początkiem i
końcem odliczania, i tak, seq 1 10 wyświetli liczby od 1 do 10, natomiast seq 5 15 od 5 do
Strumienie, potoki, procesy 26
15. Jak widać w powyższym przykładzie, do pliku liczby.txt zostały przekierowane dwa ciągi
liczb, które mają część wspólną, od 5 do 10. Po wykonaniu sortowania numerycznego oraz
przekazaniu strumienia do polecenia uniq strumień będzie posiadał tylko liczby od 1 do 15,
bez powtarzających się wierszy.
Aby nie utracić informacji o ilości linii które były takie same (ponieważ użycie polecenia uniq
spowoduje, iż każda z linii pojawi się już tylko raz) możliwe jest wywołanie polecenia uniq z
flagą c, dzięki czemu uniq wyświetli ile razy wystąpiła dana linia. Nawiązując do
powyższego przykładu sprawdzić działanie polecenia:
cat liczby.txt | sort -n | uniq -c
Polecenie sort potrafi także sortować tekst według wybranych kolumn. Kolumnę, wg której
ma zostać przeprowadzone sortowanie definiuje się za pomocą dwóch flag: +N M, gdzie N
to numer kolumny (liczony od 0), a M liczba znaków, które mają zostać uwzględnione przy
sortowaniu. Ważną flagą jest także t, która określa separator kolumn (tak jak d dla
polecenia cut ) Np. aby posortować zawartość katalogu wg rozmiaru pliku napisać można
polecenie:
ls la /root/ | sort -n +4 -6
Wyjaśnienie: Polecenie ls ma własną flagę pozwalającą posortować wyniki wg rozmiaru
plików, jednak w tym przykładzie chodziło głównie o wykorzystanie polecenie sort. Polecenie
ls la wyświetla zawartość katalogu w 8 kolumnach. Chcąc posortować wydruk wg rozmiaru
pliku polecenie sort wywołane zostało z flagą +4 (kolumny liczone są tutaj od 0), oraz z flagą
-6 ponieważ najdłuższy liczebnik opisujący rozmiar pliku miał 6 znaków.
Ostatnim filtrem omawianym w tym ćwiczeniu jest polecenie tr, które pozwala na zmianę
łańcucha znaków na inny łańcuch (nie mylić z poleceniem znajdz i zamień znanym z wielu
edytorów). Polecenie tr wykorzystywane jest często do zamiany separatorów w teście w
którym kolumny oddzielone są np znakiem ; . Np polecenie:
cat /etc/passwd | tr : \t
Strumienie, potoki, procesy 27
zmieni separator kolumn ze znaku : na znak tabulacji. Polecenie może zmienić też np. tekst
pisany dużymi literami na litery małe:
cat /etc/passwd | tr [:lower:] [:upper:]
Inne wzorce, szczególnie przydatne przy wykorzystaniu polecenie tr, to:
" ^ - początek linii
" $ - koniec linii
" \n nowa linia
" \t znak tabulacji
Na przykład, poniższe polecenie zamieni każdy znak : na nową linię:
cat /etc/passwd | tr : \n
Ćwiczenie 2. Filtrowanie potoków
Celem ćwiczenia jest przetestowanie możliwości przekierowania standardowych strumieni.
1. Wyświetlić zawartość katalogu /etc/ z podziałem na strony. Podświetlić wszystkie pliki i
katalogi zawierające frazę net
2. Wyświetlić pierwsze i ostatnie linie strumienia tekstu:
2.1. Wyświetlić ostatnie 20 ostatnich linii pliku:
/var/log/messages
2.2. Wyświetlić pierwsze 10 linii pliku
/var/log/boot.log
3. Zaobserwować zmiany w pliku z logami bezpieczeństwa podczas logowania się
użytkownika do systemu.
Strumienie, potoki, procesy 28
3.1. Wyświetlić w trybie ciągłego podglądu (flaga f) 10 ostatnich linii pliku:
/var/log/secure
3.2. Zalogować się do konsoli nr 2 (tty2) jako użytkownik root
3.3. Wrócić do konsoli tty1 i sprawdzić, czy informacje o logowaniu pojawiły się w
oglądanym w trybie ciągłym pliku z logami bezpieczeństwa.
3.4. Wyjść z ciągłego podglądu pliku logów bezpieczeństwa. (Ctrl+C)
4. Wyszukać w 20 ostatnich liniach pliku :
/var/log/secure
frazy ROOT, w pierwszej kolejności wyświetlić je na ekranie, a następnie wyniki zapisać
do pliku ostatnie_logowania_roota.txt
5. Wyświetlić oraz policzyć ilu użytkowników jest w systemie. W tym celu:
5.1. Zapoznać się ze strukturą pliku (jaki znak rozdziela poszczególne kolumny ?)
/etc/passwd
5.2. Wyświetlić na ekran TYLKO nazwę użytkownika. Poszczególne linie ponumerować.
5.3. Zapisać do pliku użytkownicy.txt spis wszystkich użytkowników w systemie.
6. Wyświetlić TYLKO nazwy użytkowników z pliku /etc/passwd posortowanych według
numeru USER ID (jest to pierwsza cyfra występująca po nazwie użytkownika w pliku
passwd - występuje po frazie :x: )
7. Wyświetlić 10 plików z katalogu /etc/ które zajmują najwięcej miejsca na dysku.
8. Wiedząc, że w katalogu domowym każdego użytkownika znajduje się plik .bash_history
który zawiera historię poleceń wywoływanych w konsoli przez danego użytkownika,
wyświetlić na ekran historię unikalnych poleceń wraz z liczbą ile razy zostały użyte.
Podpowiedz: W pliku .bash_history znajdują się polecenie wraz z flagami i ścieżkami.
Aby pokazać ile razy każde polecenie było użyte należy oddzielić polecenia od wszelkich
opcji, a następnie dopiero sortować i szukać poleceń unikalnych.
Strumienie, potoki, procesy 29
Procesy w systemie Linux
Procesem nazywa się każdy uruchomiony w systemie program. Każdy uruchomiony w
systemie proces otrzymuje podczas uruchomienia unikalny identyfikator, zwany numerem
identyfikacyjnym procesu (PID z ang. Process identification). Listę procesów
uruchomionych przez danego użytkownika wraz ze szczegółami dotyczącymi procesów
wywołuje się poprzez polecenie: ps. Polecenie to opatrzone flagą ps -f wywołuje więcej
szczegółowych informacji o uruchomionych przez użytkownika procesach. Między innymi:
użytkownika, który uruchomił proces, PPID czyli ID procesu który uruchomił dany proces (z
ang. Parent s Process Identification), datę uruchomienia oraz nazwę programu. Ponieważ
polecenie ps pokazuje tylko procesy użytkownika które zostały uruchomione w danej
konsoli, aby zobaczyć wszystkie procesy niezależnie od konsoli na której zostały
uruchomione użyć należy flagi ps u, która wyświetli wszystkie procesy użytkownika wraz z
konsolą TTY na której polecenia zostały uruchomione. Aby zobaczyć także procesy innych
użytkowników należy wywołać polecenie ps au, a żeby dodatkowo wyświetlić procesy które
nie działają na żadnej konsoli (tzw. demony procesów) dodać należy flagę: ps aux.
Warto zaznaczyć, iż polecenie ps posiada ponad 50 możliwych do zastosowania flag i opcji
umożliwiających bardzo dokładne zdefiniowane jakie procesy mają zostać wyświetlone. Jest
to bardzo przydatne dla administratorów monitorujących serwery na których
uruchomionych jest duża liczba procesów i usług.
Procesy w systemie mają charakter hierarchiczny (jeden proces uruchamia inny). Pierwszym
procesem uruchamiającym system jest init. Zależności procesów względem siebie można
zobaczyć za pomocą polecenia: pstree, które wyświetla zależności procesów w postaci
drzewa. Dodatkowo można wywołać je wraz z numerami ID procesów:
pstree -pc
Polecenie jest szczególnie przydatne wtedy, gdy trzeba wyłączyć (zabić) jakiś proces, który
jednak jest cyklicznie wznawiany przez inny proces. W takiej sytuacji tylko poprzez
znajomość nadrzędnego procesu można zabić całą gałąz drzewa procesów.
Strumienie, potoki, procesy 30
Uruchomienie dowolnego procesu odbywa się poprzez wpisanie komendy w konsoli.
Jeśli program zakończy swoje działanie niemal natychmiastowo (np. ls la), trudno będzie
zauważyć jego pojawienie się na liście procesów. Jednak gdy polecenie pracuje w trybie
ciągłym (np. tail f), lub jego wykonanie trwa przez pewnien dłuższy czas (np.
find / -name net) wtedy procesy te będą widoczne zarówno w drzewie procesów jak i na
liście procesów użytkownika.
Uruchomianie procesu w tle
Istnieje także możliwość uruchomienia procesu w tle. Uzyskuje się to poprzez
dodanie na końcu polecenia znaku & . Np.
find / -name net* >> wyniki.txt &
&
&
&
Znane już polecenie wyszukiwania zostało wywołane w tle, a jego wyniki zostaną zapisane w
pliku tekstowym. Aby sprawdzić, jakie procesy zostały uruchomione w tle użyć należy
polecenia jobs.
Zabijanie procesów
W celu wyłączenia (zabicia) procesu wywołuje się polecenie kill wraz z odpowiednim
sygnałem zamknięcia (term lub kill). Sygnałem term (flaga -2) (z ang. terminate), próbuje
zatrzymać proces, jednak często polecenie to nie jest wystarczające do zamknięcia np.
zawieszonego procesu, wtedy użyć należy sygnału kill (flaga -9). Polecenia te wywoływane
są w następujący sposób:
kill -2 PID
lub
kill -9 PID
gdzie PID to numer id procesu, który ma zostać zamknięty.
Powyższy sposób pozwala na zabicie konkretnego procesu o konkretnym numerze PID.
Możliwe jest też zabicie wszystkich procesów o jednej nazwie, np. gdy chcemy przerwać
Strumienie, potoki, procesy 31
wszystkie wyszukiwania plików (które uruchomione zostały w różnych konsolach)
zastosować można polecenie:
killall find
Zmiana priorytetów procesów
Priorytety procesów są wyświetlane w kolumnie PRI polecenia ps l. System sam nadaje
priorytety poszczególnym procesom. Użytkownik może zmieniać priorytet procesu w
zakresie od -20 do +20 punktów wartości ustalonej przez system (w przykładzie liczba n ).
Im większa wartość, tym priorytet procesu jest mniejszy. Służy do tego polecenie renice.
Zmiany wprowadzone przez użytkownika widoczne są w kolumnie NI. Np:
renice +n PID
Zależności procesów
Procesy można uruchomić w opcji zależności od drugiego procesu. Np.
polecenie_A && polecenie_B
W powyższym przypadku polecenie B zostanie wykonane, tylko wtedy, gdy polecenie A
zakończy się sukcesem np.:
ls /etc/ && echo udało się wyświetlić pliki
lub
ls /etc/ABC && echo ten tekst nie zostanie wyświetlony
W drugim przypadku, ponieważ katalog ABC nie istnieje, polecenie echo nie zostanie
wykonane.
Innym odwrotnym typem zależności jest składnia:
polecenie_C || polecenie_D
Strumienie, potoki, procesy 32
gdzie polecenie D zostanie wykonane tylko wtedy, gdy polecenie C zakończyło się
niepowodzeniem.
Możliwe też są złożenia, np:
polecenie_X && polecenie_Y || polecenie_Z
W powyższym przypadku wykonane zostanie polecenie Y , gdy polecenie X zakończy się
sukcesem, lub polecenie Z gdy polecenie X zakończy się niepowodzeniem.
Ćwiczenie 3. Procesy
Przetestować polecenia związane z procesami.
1. Uruchomić i zabić następujące zadania wg kolejności:
1.1. W konsoli tty2 uruchomić podgląd 10 ostatnich linii pliku /var/log/secure w trybie
ciągłym
1.2. W konsoli tty3 uruchomić polecenie cat
1.3. W konsoli tty4 uruchomić polecenie sleep 1200 &
1.4. W konsoli tty5 uruchomić polecenie sleep 3600 &
1.5. W konsoli tty1 wyświetlić wszystkie procesy użytkownika root, odnalezć na liście
procesy uruchomione w powyższych punktach
1.6. W konsoli tty1 wyświetlić wszystkie procesy w postaci drzewa wraz z numerami ID
procesów. Odnalezć w drzewie procesy uruchomione w powyższych punktach
1.7. Zwiększyć o 10 punktów priorytet procesu uruchomionego w punkcie 1.1 (pamiętać
o odwrotności, zwiększyć priorytet, czyli odjąć wartość pola NI)
1.8. Zabić wszystkie procesy uruchomione w tym ćwiczeniu
Strumienie, potoki, procesy 33
2. Sprawdzić działanie zależności procesów:
2.1. Wyświetlić na ekran TYLKO napis sukces w wypadku, gdy możliwe jest
wyświetlenie zawartości katalogu /etc/ (bez wyświetlania zawartości tego katalogu)
2.2. Wyświetlić na ekran TYLKO napis niepowodzenie w wypadku, gdy niemożliwe jest
wyświetlenie zawartości katalogu /etc/ABC (bez komunikatu błędu).
Strumienie, potoki, procesy 34
Wyszukiwarka
Podobne podstrony:
systemy operacyjne cw linux apache mysql
systemy operacyjne cw linux instalacja(1)
Systemy Operacyjne Unix Linux solarka2
Systemy Operacyjne Unix Linux solaris1
systemy operacyjne cw podstawy?ministracji cz2
Systemy Operacyjne Unix Linux solarka4
Systemy Operacyjne Linux Komunikacja pomiędzy procesami (IPC)
System operacyjny Linux Podręcznik
6 Systemy Operacyjne 30 11 2010 Zarządzanie procesami2
5 Systemy Operacyjne 23 11 2010 Zarządzanie procesami
System operacyjny Linux (podstawy)
sołtys,Systemy operacyjne, Zarządzanie procesami
więcej podobnych podstron