tekst_suzie_4c.pdf

(1591 KB) Pobierz
389516128 UNPDF
Podstawy open source – system SUSE Linux cz. II 2-53
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 >> ”.
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 (
389516128.010.png 389516128.011.png 389516128.012.png 389516128.013.png 389516128.001.png 389516128.002.png 389516128.003.png
Podstawy open source – system SUSE Linux cz. II 2-54
Poniższe przykłady pokazują standardowe wejście, wyjście,wyjście błędów oraz
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.
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.
389516128.004.png
Podstawy open source – system SUSE Linux cz. II 2-55
Przydatną czasem możliwością jest użycie pliku jako wejścia do programu oczekującego
strumienia danych z klawiatury. Należy wtedy odpowiednio 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 przekierowywny 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 :
geeko@da51:~ > ls -l | tee output
W tym przypadku wyjście polecenia zostanie wyświetlone na ekranie i jednocześnie
zapisane do pliku output.
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.
389516128.005.png 389516128.006.png
Podstawy open source – system SUSE Linux cz. II 2-56
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 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).
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.
389516128.007.png 389516128.008.png
Podstawy open source – system SUSE Linux cz. II 2-57
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:~>
Zw racany 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
2
3
4
5
6
geeko@da51:~> ls recipe || ls ~
/bin/ls: recipe: No such file or directory
bin Desktop Documents output public_html test
geeko@da51:~> ls recipe && ls ~
/bin/ls: recipe: No such file or directory
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.
389516128.009.png
Zgłoś jeśli naruszono regulamin