systemy operacyjne cw 02 linux strumienie procesy, ASK
[ Pobierz całość w formacie PDF ]
Ć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.
Proces
(program)
Standardowe wyjście
(
Stdout)
Standardowe
wejście (
Stdin)
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
[ Pobierz całość w formacie PDF ]