tekst_suzie_4c.pdf

(1437 KB) Pobierz
124532929 UNPDF
Podstawy open source – system SUSE Linux cz. II 2-55
2.3 Zaawansowane wykonywanie poleceń
2.3.1 Stosowanie potokowania ( piping
piping ) i przekierowań
) i przekierowań
Linux ma trzy standardowe kanały danych:
Opis standardowych kanałów:
Kanał
Numer
Opis
Standardowe wejście (stdin) 0 Uruchomiony program na bieżąco czyta
dane z tego kanału (zwykle jest to
klawiatura)
Standardowe wyjście
(stdout)
1 Program wysyła dane do tego kanału
(zwykle jest to monitor)
Standardowe wyjście
błędów (stderr)
2 Błędy są przesyłane do tego kanału
(zwykle na monitor)
Każdy kanał może być przez powłokę przekierowany. Na przykład, standardowe
wejście może być przekierowane na plik, albo dane wyjściowe lub informacje
o błędach mogą być kierowane do pliku.
Symbole przekierowania:
< przekierowuje standardowe wejście,
> przekierowuje standardowe wyjście (jest to skrót od „1 > ”),
2 > przekierowuje standardowe wyjście dla błędów.
> ” nadpisze istniejący plik. Jeżeli dane mają być
dopisane do zawartości pliku, należy użyć „ >> ” lub
„2 >> ”.
Poniższe przykłady pokazują standardowe wejście, wyjście,wyjście błędów oraz
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
2.3.1 Stosowanie potokowania (
124532929.012.png 124532929.013.png 124532929.014.png 124532929.015.png 124532929.001.png 124532929.002.png 124532929.003.png
Podstawy open source – system SUSE Linux cz. II 2-56
domyślne zachowanie powłoki (shell).
geeko@da51:~ > ls /opt /recipe
/bin/ls: /recipe: No such file or directory
/opt:
gnome kde3
Wyjaśnienie. Zawartość katalogu /opt wyświetlona jest w wierszu 3 i 4. Katalog /recipe
nie istnieje. Komunikat błędu wyświetlony jest w wierszu 2.
Jeżeli standardowe wyjście błędów przekierujemy do /dev/null , tylko
standardowe wyjście wyświetlone zostanie na ekranie:
geeko@da51:~ > ls /opt /recipe 2> /dev/null
/opt:
gnome kde3
By przekierować standardowe wyjście i standardowe wyjście błędów do pliku
(takiego jak „output”) napiszemy:
geeko@da51:~ > ls /opt /recipe > output 2>&1
geeko@da51:~ > 
Wyjaśnienie . Standardowe wyjście jest przekierowane do pliku output, a następnie
standardowe wyjście błędów jest przekierowane na standardowej wyjście (2>&1). Znak
„&” wskazuje na poprzedzający opis pliku.
W innym przykładzie użyto pliku list zamiast output . By wyświetlić jego
zawartość użyjemy polecenia cat :
geeko@da51:~> cat list
/bin/ls: /recipe: No such file or directory
/opt:
gnome
kde3
Te opcje komunikacji procesów są dostępne nie tylko w powłoce, ale mogą też
być używane bezpośrednio w programach. Wszystkie pliki w systemie mogą
być użyte jako wejście lub wyjście.
Przydatną czasem możliwością jest użycie pliku jako wejścia do programu
oczekującego strumienia danych z klawiatury. Należy wtedy odpowiednio
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
124532929.004.png
Podstawy open source – system SUSE Linux cz. II 2-57
przekierować standardowe wejście:
geeko@da51:~ # echo "Hello Tux,
>
> how are you?
> Is everything okay?" > greetings
geeko@da51:~ # mail tux < greetings
Wyjaśnienie . Po pierwsze, tekst jest przekierowywany do pliku greetings poleceniem >
(wiersze 1-3). Program mail otrzymuje wejście z pliku greetings (nie z klawiatury),
a następnie wysyła email do użytkownika tux (wiersz 4 ).
Ćwiczenie. Stosowanie potokowania i przekierowywania –
część I
Utwórz plik o nazwie Redirection w swoim domowym katalogu, który
zawiera:
… wyjście (wynik działania) polecenia ls /; uzupełniony następnie...
...zawartością zmiennej $PATH, oraz …
...komunikatem o błędnym wykonaniu polecenia cd /root
Wyjście jednego polecenia może być użyte jako wejście do innego przez użycie
potoku (pipe, symbol „ | ”).
składnia: command1 | command2
W pojedynczym potoku (pipe) może istnieć maksymalnie 4 KB
nieprzetworzonych danych. Jeżeli proces generujący wyjście próbuje zapisać
dane do zapełnionego potoku, jest to zatrzymywane i wznawiane w chwili, gdy
zapis jest już możliwy. Z drugiej strony – proces czytający jest zatrzymywany,
gdy próbuje czytać z pustego potoku.
geeko@da51:~ > ls ­l /etc | less
Czasami możemy chcieć wynik polecenia mieć zarówno wyświetlony na ekranie
jak i zapisany do pliku. Użyjemy wtedy polecenia tee :
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
Ćwiczenie. Stosowanie potokowania i przekierowywania –
część I
124532929.005.png 124532929.006.png
Podstawy open source – system SUSE Linux cz. II 2-58
geeko@da51:~ > ls ­l | tee output
W tym przypadku wyjście polecenia zostanie wyświetlone na ekranie
i jednocześnie zapisane do pliku output.
Aby przekierować wyjście sekwencji kilku poleceń w wierszu poleceń, polecenia
te muszą być oddzielone od siebie średnikami i cała sekwencja zamknięta
nawiasami (command1; command2):
geeko@da51:~> (id ; ls ~) > output
geeko@da51:~> cat output
uid=1000(geeko) gid=100(users)
groups=14(uucp),16(dialout),33(video),100(users)
bin
Desktop
Documents
output
public_html
geeko@da51:~>
Ćwiczenie. Stosowanie potokowania i przekierowywania
część II
Polecenie wc (word count) zlicza słowa w pliku tekstowym. Polecenie wc
-l zlicza wiersze w pliku.
Przekaż potokiem wyjście polecenia ls -l do polecenia ws -l . Co będzie
rezultatem takiej konstrukcji?
________________________________________________________________
Powłoka uruchamia osobną podpowłokę (subshell) dla przetwarzania
indywidualnych poleceń. By przekierować powiązane polecenia, powłoka musi
być zmuszona do wykonywania łańcucha powiązanych poleceń w tej samej
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
Ćwiczenie. Stosowanie potokowania i przekierowywania
część II
124532929.007.png 124532929.008.png
Podstawy open source – system SUSE Linux cz. II 2-59
podpowłoce. Jest to robione przez zamknięcie wyrażenia w nawiasach.
Po wykonaniu, każdy program zwraca wartość stanu wykonania (status). Jeżeli
ta wartość jest równa zeru – program zakończył się sukcesem. W przypadku
błędu – zwracana jest wartość różna od zera. Zależnie od programu – różne
wartości wskazują na różne błędy (są kodami błędu).
Można użyć polecenia echo $? do wyświetlenia zwracanej wartości:
geeko@da51:~> ls
bin  Desktop  Documents  public_html
geeko@da51:~> echo $?
0
geeko@da51:~>
Zwracany kod może być użyty jako wyzwalacz (trigger) wykonania innego
polecenia:
Wiązanie
Wynik
Polecenie1 &&
polecenie2
Polecenie 2 zostanie wykonane tylko wtedy,
gdy polecenie1 zakończy się bezbłędnie.
Polecenie1 || polecenie2 Polecenie 2 zostanie wykonane tylko wtedy,
gdy polecenie1 zakończy się z błędem.
Przykład:
1
geeko@da51:~> ls recipe || ls ~
2
3
/bin/ls: recipe: No such file or directory
bin Desktop Documents output public_html test
4
5
geeko@da51:~> ls recipe && ls ~
/bin/ls: recipe: No such file or directory
6
geeko@da51:~>
Wyjaśnienie . Plik recipe nie istnieje i polecenie ls recipe musi zakończyć się
błędem (wiersze 1-2). Z tej przyczyny polecenie ls ~ z wiersza pierwszego jest
wykonywane, a polecenie ls ~ w wierszu czwartym nie jest wykonywane.
2008 Novell Inc. Licencja Creative Commons Attribution-NonCommercial-ShareAlike 2.5. Wolno kopiować, rozprowadzać, przedstawiać
i wykonywać utwór oraz opracowane na jego podstawie utwory zależne jedynie dla celów niekomercyjnych, przy zachowaniu autorstwa
Novell Inc.
124532929.009.png 124532929.010.png 124532929.011.png
Zgłoś jeśli naruszono regulamin