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 stdinto klawiatura i stdoutokno 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ą stdindo tego celu, a edytor tekstowy jest jednym z nich. Czyta z, stdinaby 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 stdoutpolubić 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.
sortjest jednym z tych poleceń „filtrujących”, które wezmą kilka rzeczy stdini 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 stdoutjedno polecenie stdinz 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 sortsam, nadal będzie próbował czytać stdin. Ponieważ stdinjest 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 stdinjest 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 dudane 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, teektóre pozwala ci mieć ciasto i je zjeść, to będzie skopiuj to, co otrzyma, stdindo obu stdoutplików i wybranego pliku. Możesz to również zrobić bashz 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.