Startseite > Umgebung & Hilfsprogramme > pipe(|)

Pipe (|) meistern: Das Kernwerkzeug zur Befehlsverknüpfung

Die Pipe (pipe) ist ein Mechanismus in der Linux-/Unix-Shell, der zwei oder mehr Befehle miteinander verbindet, indem die Standardausgabe eines Befehls als Standardeingabe für den nächsten Befehl übergeben wird. Sie ist eine der Kernfunktionen der Shell, die verwendet wird, um komplexe Aufgaben in mehrere einfache Befehle aufzuteilen und diese sequentiell zu verarbeiten. Sie lässt Daten wie durch eine Wasserleitung in eine Richtung fließen.

Ü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.


Verwandte Befehle

Funktional ähnliche oder häufig zusammen verwendete Befehle.


Gleiche Kategorie Befehle