Poniższe zostało nieco uproszczone, aby pomóc nowym użytkownikom.
Po pierwsze, konieczne jest zrozumienie pojęcia standardowego wejścia i standardowego wyjścia.
W systemie Linux i innych systemach operacyjnych typu UNIX każdy proces ma standardowe wejście ( stdin
) i standardowe wyjście ( stdout
). Zazwyczaj jest stdin
to klawiatura i stdout
okno ekranu lub terminala.
Więc kiedy uruchomisz ls
, wyrzuci swoje wyjście do stdout
. Jeśli nie zrobisz nic więcej, przejdzie do ekranu lub okna terminala i wyświetlisz go.
Teraz niektóre polecenia Linuksa współdziałają z użytkownikiem i używają stdin
do tego celu, a edytor tekstowy jest jednym z nich. Czyta z, stdin
aby zaakceptować naciśnięcia klawiszy, robić rzeczy, a następnie zapisuje różne rzeczy stdout
.
Istnieją jednak również nieinteraktywne lub „filtrujące” polecenia, które NIE działają interaktywnie, ale wymagają dużej ilości danych. Te polecenia zabiorą wszystko stdin
, zrób coś, a następnie wrzućstdout
Spójrzmy na inne polecenie o nazwie du
- oznacza użycie dysku. du /usr
, na przykład wydrukuje (aby stdout
polubić każde inne polecenie Linuksa) listę każdego pliku w tym katalogu i jego rozmiar:
# du /usr
2312 /usr/games
124 /usr/lib/tc
692 /usr/lib/rygel-1.0
400 /usr/lib/apt/methods
40 /usr/lib/apt/solvers
444 /usr/lib/apt
6772 /usr/lib/gnash
Jak widać od samego początku nietoperz, nie jest sortowany i prawdopodobnie chcesz go posortować według wielkości.
sort
jest jednym z tych poleceń „filtrujących”, które wezmą kilka rzeczy stdin
i posortują je.
Więc jeśli to zrobimy:
# du /usr | sort -nr
otrzymujemy to, co jest nieco lepsze:
4213348 /usr
2070308 /usr/lib
1747764 /usr/share
583668 /usr/lib/vmware
501700 /usr/share/locale
366476 /usr/lib/x86_64-linux-gnu
318660 /usr/lib/libreoffice
295388 /usr/lib/vmware/modules
290376 /usr/lib/vmware/modules/binary
279056 /usr/lib/libreoffice/program
216980 /usr/share/icons
I możesz teraz zobaczyć, że „potok” łączy stdout
jedno polecenie stdin
z drugim. Zazwyczaj używasz go w takich sytuacjach, w których chcesz filtrować, sortować lub w inny sposób manipulować wyjściem polecenia. Mogą być kaskadowane, jeśli chcesz przetwarzać dane wyjściowe za pomocą wielu poleceń typu filtr.
Jeśli wpiszesz sort
sam, nadal będzie próbował czytać stdin
. Ponieważ stdin
jest podłączony do klawiatury, będzie czekał na wpisanie i przetworzenie rzeczy do momentu naciśnięcia klawisza Control-D. Nie wyświetli monitu, ponieważ tak naprawdę nie jest przeznaczony do interaktywnego używania.
Program może stwierdzić, czy stdin
jest interaktywny, czy nie, więc niektóre programy mogą działać inaczej, jeśli wydasz je samodzielnie lub na końcu potoku.
Ponadto, potokowanie programu, który działa tylko interaktywnie, na przykład vi
, spowoduje, że będziesz miał zły czas.
Rurki różnią się od przekierowania tym, że dane są losowo przenoszone z jednego polecenia do drugiego, ale nie są nigdzie przechowywane. W powyższym przykładzie du
dane wyjściowe nie są nigdzie przechowywane. W większości przypadków nie chcesz tego z potokami, ponieważ powodem użycia potoków jest w pewien sposób przetworzenie wyniku polecenia - ale istnieje polecenie, tee
które pozwala ci mieć ciasto i je zjeść, to będzie skopiuj to, co otrzyma, stdin
do obu stdout
plików i wybranego pliku. Możesz to również zrobić bash
z tajemniczą składnią obejmującą ampersands i nawiasy, o których nie wiem.
|
jest to, że nie używa ona nazwy, dane wyjściowe z polecenia z lewej strony są przekazywane bezpośrednio do danych wejściowych dla polecenia z prawej strony potoku.