Verstehen von Pipes und Umleitung für die Linux-Befehlszeile
Zwei leistungsstarke Funktionen der Linux-Befehlszeilen-Shell sind Umleitung und Pipes, die es ermöglichen, die Ausgabe (oder sogar die Eingabe) eines Programms an eine Datei oder ein anderes Programm zu senden. Möglicherweise haben Sie diese Funktionen bereits genutzt, ohne sich dessen bewusst zu sein. Jedes Mal, wenn Sie das Zeichen „ > “ in einem Befehl oder „ | “ verwendet haben, haben Sie respektive Umleitung oder eine Pipe verwendet.
In allen Unix-ähnlichen Betriebssystemen, wie Linux und FreeBSD, geht die Ausgabe von einem Befehlsprogramm automatisch an einen Ort, der als Standardausgabe (stdout) bekannt ist. Standardmäßig ist die Standardausgabe der Bildschirm (die Konsole), aber das kann durch Pipes und Umleitung geändert werden. Ebenso wird die Tastatur als Standard-Eingabe (stdin) betrachtet, und ebenso wie bei der Standardausgabe kann sie geändert werden.
Pipes
Pipes ermöglichen es Ihnen, die Ausgabe eines Befehls in einen anderen zu leiten, wo sie als Eingabe verwendet wird. Mit anderen Worten wird die Standardausgabe eines Programms zur Standardeingabe für ein anderes.
Der Befehl „ more “ nimmt die Standardeingabe und paginiert sie auf der Standardausgabe (dem Bildschirm). Das bedeutet, dass, wenn ein Befehl mehr Informationen anzeigt, als auf einem Bildschirm angezeigt werden können, das Programm „ more “ nach der ersten Bildschirmfüllung (Seite) pausiert und wartet, bis der Benutzer SPACE drückt, um die nächste Seite oder RETURN, um die nächste Zeile zu sehen.
Hier ist ein Beispiel, das alle Dateien mit Details ( -la) im Verzeichnis /dev auflistet und die Ausgabe an more pipet. Das Verzeichnis /dev sollte Dutzende von Dateien enthalten, daher stellen Sie sicher, dass more paginieren muss.
ls-la/dev |more
Beachten Sie den --More---Aufforderung am unteren Rand des Bildschirms. Drücken Sie SPACE, um die nächste Seite anzuzeigen, und drücken Sie weiterhin SPACE, bis die Ausgabe beendet ist.
Hier ist ein weiteres Pipe-Beispiel, diesmal mit dem Werkzeug „ wc “ (Wortzählung).
ls-1/dev |wcwc zählt die Anzahl der Zeilen, Wörter und Zeichen in der Standardeingabe. Wenn Sie den Parameter -l verwenden, zeigt er nur die Anzahl der Zeilen an, was eine gute Möglichkeit ist, um zu sehen, wie viele Dateien sich in einem Verzeichnis befinden!
Das Tutorial „Ein tiefer Einblick in die Archivierungs- und Komprimierungsbefehle von Linux“ hat ein Beispiel, das tar und 7-Zip zusammen verwendet:
tar cvf - *| 7zr a -si somefiles.tar.7zIn diesem Fall weist der Bindestrich nach der f-Option tar an, seine Ausgabe an die Standardausgabe und nicht an eine Datei zu senden. Die Ausgabe von tar wird über die Pipe in 7zr eingespeist, der aufgrund der -si-Option auf Eingaben von stdin wartet.
Umleitung
Umleitung ist ähnlich wie Pipes, jedoch unter Verwendung von Dateien anstelle eines anderen Programms. Die Standardausgabe eines Programms ist der Bildschirm. Mithilfe des Symbols > (größer als) kann die Ausgabe eines Programms in eine Datei gesendet werden. Hier ist erneut eine Verzeichnisauflistung von /dev, aber dieses Mal wird sie in eine Datei namens listing.txt umgeleitet:
ls-la> listing.txtEs wird nichts auf dem Terminal angezeigt, da alles in die Datei gesendet wurde. Sie können die Datei mit dem Befehl cat (der in more gepipet werden kann) anzeigen oder zur Vereinfachung können Sie einfach den more-Befehl für sich verwenden:
more listing.txtWenn listing.txt bereits existiert hat, wird sie überschrieben. Sie können jedoch in eine vorhandene Datei mit >> wie folgt anhängen:
ls-la/home > listing.txt
ls-la/dev >> listing.txtDie erste Umleitung überschreibt die Datei listing.txt, während die zweite an sie anhängt.
Der Befehl cat kann verwendet werden, um eine Datei mit Umleitung zu erstellen, zum Beispiel:
cat> atextfile.txtJetzt wird jeder Text, den Sie eingeben, in die Datei atextfile.txt gesendet, bis Sie Strg-D drücken, zu diesem Zeitpunkt wird die Datei geschlossen und Sie kehren zur Eingabeaufforderung zurück. Wenn Sie mehr Text zur Datei hinzufügen möchten, verwenden Sie denselben Befehl, jedoch mit zwei größeren Zeichen ( >>).
Fazit
Viele Programme der Linux-Befehlszeile sind darauf ausgelegt, mit Umleitungen und Pipes zu arbeiten, versuchen Sie, mit ihnen zu experimentieren und sehen Sie, wie sie interagieren. Zum Beispiel kann die Ausgabe des Befehls ps, der die aktuellen Prozesse auflistet, in grep gepipet werden. Überlegen Sie, ob Sie herausfinden können, wie Sie die Prozesse von root auflisten können.