Pipes und Umleitung für die Linux-Befehlszeile verstehen
Zwei leistungsstarke Funktionen der Linux-Befehlszeilen-Shell sind Umleitung und Pipes, mit denen die Ausgabe (oder sogar die Eingabe) eines Programms an eine Datei oder ein anderes Programm gesendet werden kann. Möglicherweise haben Sie diese Funktionen bereits verwendet, ohne sich dessen bewusst zu sein. Immer wenn Sie das Zeichen " >
" in einem Befehl oder " |
"Dann haben Sie Umleitung oder eine Leitung verwendet.
Auf allen Unix-ähnlichen Betriebssystemen, wie Linux und FreeBSD, geht die Ausgabe eines Befehlszeilenprogramms automatisch an eine Stelle, die als Standardausgabe (stdout) bekannt ist. Standard out ist standardmäßig der Bildschirm (die Konsole), der jedoch mithilfe von Pipes und Redirection geändert werden kann. Ebenso wird die Tastatur als Standardeingabe (Stdin) betrachtet und wie bei der Standardausgabe kann sie geändert werden.
Rohre
Mit Pipes können Sie die Ausgabe von einem Befehl in einen anderen leiten, wo sie als Eingabe verwendet wird. Mit anderen Worten, die Standardausgabe von einem Programm wird zur Standardeingabe für ein anderes.
Der Befehl " more
" übernimmt die Standardeingabe und paginiert sie auf der Standardausgabe (dem Bildschirm). Dies bedeutet, dass wenn ein Befehl mehr Informationen anzeigt, als auf einem Bildschirm angezeigt werden können, das Programm " more
" nach dem ersten Bildschirm (Seite) pausiert und darauf wartet, dass der Benutzer SPACE zur Anzeige der nächsten Seite oder RETURN zur Anzeige der nächste Zeile.
Hier ist ein Beispiel, das alle Dateien mit Details ( -la
) im Verzeichnis /dev
und die Ausgabe an more
leitet. Das /dev
Verzeichnis sollte Dutzende von Dateien enthalten und somit sicherstellen, dass more
Seiten paginieren müssen.
ls -la / dev | Mehr
Beachten Sie die Aufforderung --More--
am unteren Bildschirmrand. Drücken Sie die LEERTASTE, um die nächste Seite anzuzeigen, und halten Sie die LEERTASTE gedrückt, bis die Ausgabe beendet ist.
Hier ist ein anderes Rohrbeispiel, diesmal mit dem Werkzeug " wc
" (Wortzählung).
ls -1 / dev | Toilette
wc
zählt die Anzahl der Zeilen, Wörter und Zeichen in der Standardeingabe. Wenn Sie den Parameter -l
, wird nur die Anzahl der Zeilen angezeigt. Auf diese Weise können Sie sehen, wie viele Dateien sich in einem Verzeichnis befinden.
Das Tutorial Linux-Archivierungs- und Komprimierungsbefehle enthält ein Beispiel für die Verwendung von tar
und 7-Zip:
tar cvf - * | 7zr a -si einige Dateien.tar.7z
In diesem Fall gibt der Bindestrich nach der Option f
dass tar
seine Ausgabe an den Standardausgang und nicht an eine Datei senden soll. Die Ausgabe von tar
wird über die Pipe in 7zr geleitet, die aufgrund der Option -si auf die Eingabe von standard in wartet.
Umleitung
Die Umleitung ist ähnlich wie bei Pipes, außer dass Dateien anstatt eines anderen Programms verwendet werden. Die Standardausgabe für ein Programm ist der Bildschirm. Mit dem Symbol >
(größer als) kann die Ausgabe eines Programms in eine Datei gesendet werden. Hier ist wieder eine Verzeichnisliste von /dev
, aber dieses Mal umgeleitet in eine Datei namens listing.txt
ls -la> listing.txt
Es wird nichts auf dem Terminal angezeigt, da alles an die Datei gesendet wurde. Sie können sich die Datei mit dem Befehl cat
anschauen (der in more
Dateien eingefügt werden more
) oder Sie können einfach den more command
:
mehr listing.txt
Wenn listing.txt
bereits existiert, wird es überschrieben. Aber Sie können eine bestehende Datei mit >>
wie folgt anhängen:
ls -la / home> auflistung.txt ls -la / dev >> auflistung.txt
Die erste Umleitung überschreibt die Datei listing.txt
während die zweite an sie listing.txt
wird.
Der Befehl cat
kann zum Erstellen einer Datei mithilfe der Umleitung verwendet werden, z.
cat> atextfile.txt
Nun wird der von Ihnen atextfile.txt
Text an die Datei atextfile.txt
gesendet, bis Sie Control-D drücken. An diesem Punkt wird die Datei geschlossen und Sie kehren zur Eingabeaufforderung zurück. Wenn Sie der Datei mehr Text hinzufügen möchten, verwenden Sie denselben Befehl, jedoch mit zwei Größer-als-Zeichen ( >>
).
Fazit
Viele Linux-Befehlszeilenprogramme sind so konzipiert, dass sie mit Umleitungen und Pipes arbeiten können, experimentieren mit ihnen und sehen, wie sie interagieren. Zum Beispiel kann die Ausgabe des Befehls ps
, der die aktuellen Prozesse auflistet, in grep
piped werden. Sehen Sie, ob Sie herausfinden können, wie Sie die Prozesse auflisten, die root gehören.