#4 Open Source – podstawy, Dokumentacja Suse L

[ Pobierz całość w formacie PDF ]
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 (
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.
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.
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.
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.
[ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • ewunia87.pev.pl