Das Folgende wird ein wenig vereinfacht, um neuen Benutzern zu helfen.
Zunächst müssen Sie das Konzept der Standardeingabe und der Standardausgabe verstehen.
In Linux und anderen UNIX-ähnlichen Betriebssystemen verfügt jeder Prozess über eine Standardeingabe ( stdin
) und eine Standardausgabe ( stdout
). Die übliche Situation ist, dass dies stdin
Ihre Tastatur und stdout
Ihr Bildschirm oder Terminalfenster ist.
Wenn du also rennst ls
, wirft es die Ausgabe auf stdout
. Wenn Sie nichts anderes tun, wird der Bildschirm oder das Terminalfenster angezeigt.
Nun interagieren einige Linux-Befehle mit dem Benutzer und verwenden stdin
dies, wobei Ihr Texteditor einer dieser Befehle ist . Es liest aus stdin
, um Ihre Tastatureingaben zu akzeptieren, Dinge zu tun und dann Dinge zu schreiben stdout
.
Es gibt jedoch auch nicht interaktive oder "Filter" -Befehle, die NICHT interaktiv funktionieren, sondern eine Reihe von Daten benötigen. Diese Befehle nehmen alles stdin
, was es gibt, tun etwas und werfen es dann zustdout
Schauen wir uns einen anderen Befehl mit dem Namen an du
- steht für die Festplattennutzung. du /usr
Zum Beispiel wird stdout
eine Liste aller Dateien in diesem Verzeichnis und ihrer Größe gedruckt (so wie bei jedem anderen Linux-Befehl):
# 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
Wie Sie gleich erkennen können, ist es nicht sortiert und Sie möchten es wahrscheinlich in der Reihenfolge der Größe sortiert haben.
sort
ist einer dieser "Filter" -Befehle, die eine Menge Dinge entnehmen stdin
und sortieren.
Also, wenn wir das tun:
# du /usr | sort -nr
wir bekommen das, was ein bisschen besser ist:
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
Und Sie können jetzt sehen, dass die "Pipe" den stdout
von einem Befehl mit dem stdin
von einem anderen verbindet. Normalerweise werden Sie es in Situationen wie diesen verwenden, in denen Sie die Ausgabe eines Befehls filtern, sortieren oder anderweitig bearbeiten möchten. Sie können kaskadiert werden, wenn Sie die Ausgabe über mehrere Filterbefehle verarbeiten möchten.
Wenn Sie selbst tippen sort
, wird weiterhin versucht, auszulesen stdin
. Da stdin
es mit Ihrer Tastatur verbunden ist, wartet es darauf, dass Sie etwas eingeben und verarbeiten, bis Sie Strg-D drücken. Es wird Sie nicht dazu auffordern, da es nicht wirklich für die interaktive Verwendung gedacht ist.
Es ist möglich, dass ein Programm erkennt, ob stdin
es interaktiv ist oder nicht. Einige Programme verhalten sich daher möglicherweise anders, wenn Sie sie selbst oder am Ende einer Pipe ausgeben.
Außerdem führt das Weiterleiten eines Programms, das nur interaktiv funktioniert vi
, zu einer schlechten Zeit.
Pipes unterscheiden sich von der Umleitung darin, dass die Daten von einem Befehl zum nächsten gemischt werden, ohne dass sie irgendwo gespeichert werden. Im obigen Beispiel wird du
die Ausgabe also nirgendwo gespeichert. Die meiste Zeit möchten Sie dies nicht mit Pipes tun, da der Grund für die Verwendung von Pipes darin besteht, die Ausgabe eines Befehls auf irgendeine Weise zu verarbeiten. Es gibt jedoch einen Befehl tee
, mit dem Sie Ihren Kuchen haben und ihn auch essen können Kopieren Sie die empfangenen Daten stdin
in stdout
eine Datei Ihrer Wahl. Sie können dies wahrscheinlich auch bash
mit einer arkanen Syntax tun, die Et-Zeichen und Klammern enthält, die ich nicht kenne.
|
ist, dass es keinen Namen verwendet. Die Ausgabe des Befehls l-hand wird direkt an die Eingabe für den Befehl auf der rechten Seite der Pipe übergeben.