Übersicht über Pipes
Die Pipe bezieht sich auf das Zeichen '|', das in der Linux-/Unix-Shell verwendet wird und die Ausgabe des linken Befehls als Eingabe für den rechten Befehl weiterleitet. Dies ermöglicht es Benutzern, mehrere Befehle zu kombinieren, um leistungsstarke und flexible Datenverarbeitungs-Pipelines zu erstellen.
Funktionsweise der Pipe
Die Standardausgabe (stdout) des ersten Befehls wird in einem temporären Puffer gespeichert, der von der Shell erstellt wird, und der Inhalt dieses Puffers wird als Standardeingabe (stdin) an den zweiten Befehl übergeben. Dieser Prozess kann mehrere Befehle verbinden, um eine Pipeline zu bilden.
Merkmale der Pipe
- Einseitiger Fluss: Daten fließen immer von links nach rechts, nur in eine Richtung.
- Datenwiederverwendung: Das Ergebnis eines vorherigen Befehls kann sofort als Eingabe für den nächsten Befehl verwendet werden.
- Modularisierung: Große und komplexe Aufgaben können in kleinere, einfachere Befehle zerlegt und verarbeitet werden.
- Effizienz: Effiziente Verarbeitung von Daten im Speicher, ohne dass temporäre Dateien erstellt werden müssen.
Anwendungsbeispiele für Pipes
Erleben Sie die Leistungsfähigkeit von Pipes anhand praktischer Beispiele, die mehrere Befehle kombinieren.
Suche nach einem bestimmten Muster in einer Dateiliste
ls -l | grep json
Der Befehl `ls -l` gibt die Dateiliste des aktuellen Verzeichnisses aus, und dann wird `grep` verwendet, um nur Zeilen zu suchen, die die Zeichenfolge 'json' enthalten. Diese Pipeline leitet die Ausgabe von `ls -l` als Eingabe an `grep` weiter.
Suchen eines bestimmten Prozesses in der Prozessliste
ps aux | grep nginx | grep -v grep
Überprüfen Sie alle Prozesse mit dem Befehl `ps aux` und filtern Sie dann nur den 'nginx'-Prozess mit `grep`. Da `grep` selbst ein Prozess ist, muss der `grep nginx`-Prozess ausgeschlossen werden.
Die 5 größten Dateien finden
ls -lh | sort -rh | head -5
Geben Sie die Dateiliste detailliert mit `ls -lh` aus und sortieren Sie sie dann umgekehrt (`-r`) nach Größe (`-h` Option für menschenlesbare Einheiten) mit `sort -rh`. Zum Schluss geben Sie nur die Top 5 Ergebnisse mit `head -5` aus.
Anzahl der .txt-Dateien im aktuellen Verzeichnis zählen
ls | grep '.txt' | wc -l
Geben Sie die Dateiliste mit `ls` aus und filtern Sie dann mit `grep` nur Dateien mit der Erweiterung '.txt'. Zählen Sie schließlich mit `wc -l` die Anzahl der gefilterten Zeilen (`-l` Option), um die Gesamtzahl der Dateien zu erhalten.
Dateien löschen durch Kombination von Pipe und xargs
find . -name '*.log' | xargs rm
Suchen Sie Dateien mit einem bestimmten Muster mit dem Befehl `find` und übergeben Sie dann die gefundene Dateiliste über `xargs` als Argumente an den Befehl `rm`, um sie zu löschen. Da es schwierig ist, Argumente direkt mit einer Pipe an `rm` zu übergeben, wird sie zusammen mit `xargs` verwendet.
Unterschied zur Umleitung (Redirection)
Die Umleitung, die oft zusammen mit Pipes verwendet wird, ähnelt diesen in der Steuerung des Datenflusses, weist jedoch wichtige Unterschiede in der Funktionsweise auf.
Pipe vs. Umleitung
- Pipe (`|`): Verbindet die **Ausgabe** eines Befehls mit der **Eingabe** eines anderen Befehls.
- Umleitung (`>`, `>>`): Leitet die **Ausgabe** eines Befehls in eine Datei um oder leitet den Inhalt einer Datei als **Eingabe** an einen Befehl weiter.
Beispiel für Umleitung
ls -l > file_list.txt
Speichert das Ergebnis von `ls -l` in der Datei `file_list.txt`. Dies wird nicht als Eingabe für einen anderen Befehl verwendet, sondern direkt in die Datei geschrieben.