Pipe und Tee
100%

Text-Fu · Lektion 4

Pipe und Tee

Lerne, Befehle mit Pipelines zu verbinden und einen Strom mit tee zu speichern und zugleich weiterzugeben.

Pipelines verbinden kleine Befehle, sodass Daten ohne Zwischendatei zwischen ihnen fließen können. Mit tee kannst du einen Teil dieses Stroms in eine Datei kopieren und zugleich weiterleiten.

Befehle mit | verbinden

Angenommen, eine Verzeichnisauflistung ist zu lang, um sie auf einmal zu lesen:

$ ls -la /etc

Setze den Pipe-Operator | zwischen zwei Befehle, um stdout des linken Befehls mit stdin des rechten zu verbinden:

$ ls -la /etc | less

Die Shell startet die Pipeline-Befehle und richtet die Stromverbindung ein. Die Befehle können gleichzeitig arbeiten: less kann bereits lesen, bevor ls seine gesamte Auflistung erzeugt hat.

Welche Ströme verbindet | in ls -la /etc | less standardmäßig?

stderr getrennt halten

Ein einfaches | überträgt nur stdout. Stderr des linken Befehls behält sein bisheriges Ziel, häufig also das Terminal:

$ find /etc -name "*.conf" | less

Passende Pfade fließen durch die Pipe, während Berechtigungsdiagnosen weiterhin unmittelbar im Terminal erscheinen können. Leite stderr getrennt um, wenn du ein anderes Verhalten benötigst:

$ find /etc -name "*.conf" 2> find-errors.log | less

Wohin fließt stderr von find in find /etc -name "*.conf" | less normalerweise, wenn keine weitere Umleitung vorhanden ist?

Einen Strom mit tee kopieren

tee liest stdin, schreibt eine Kopie in jede benannte Datei und gibt dieselben Daten außerdem nach stdout aus:

$ ls | tee listing.txt

Hier erhält listing.txt die Auflistung, während stdout von tee mit dem Terminal verbunden bleibt. Standardmäßig erstellt oder leert tee die benannte Datei wie >.

Welcher Befehl zeigt die Ausgabe von generate-report an und ersetzt zugleich report.txt durch dieselbe Ausgabe?

Verwende -a, wenn die Datei ergänzt statt ersetzt werden soll:

$ date | tee -a activity.log

Welcher Befehl zeigt das aktuelle Datum an und hängt es an activity.log an?

Ein Zwischenergebnis speichern

Setze tee in die Mitte einer Pipeline, um einen Zwischenstrom zu speichern und zugleich weiterzuverarbeiten:

$ ls -la /etc | tee etc-listing.txt | grep "conf"

Diese Pipeline:

  1. erzeugt die vollständige lange Auflistung,
  2. speichert den vollständigen Strom in etc-listing.txt und
  3. sendet denselben Strom an grep, das nur Zeilen mit conf ausgibt.

Die Datei enthält die Daten vor der Filterung durch grep. Soll sie nur die gefilterten Zeilen enthalten, setze tee hinter grep.

Was enthält all.txt, nachdem produce | tee all.txt | grep error erfolgreich beendet wurde?

Mit diesen Labs kannst du Pipelines und das Kopieren von Strömen praktisch trainieren:

  1. Redirecting Input and Output in Linux – Steuere Standardausgabe, Standardfehler und Standardeingabe mit Operatoren wie >, >> und 2> sowie mit tee.
  2. Sequence Control and Pipeline – Steuere Befehlsfolgen, verwende Pipelines und kombiniere Werkzeuge wie cut, grep, wc, sort und uniq.
  3. Data Stream Redirection – Leite Eingabe-, Ausgabe- und Fehlerströme um, kombiniere Ausgaben und nutze /dev/null.

Lektion abgeschlossen

Sie haben Pipe und Tee abgeschlossen

Du kannst nun Befehle verbinden und ausgewählte Stellen in einem Datenstrom bewahren.

  • Leite stdout eines Befehls in stdin eines anderen.

  • Leite stderr bei Bedarf getrennt um.

  • Kopiere Eingaben mit tee zugleich in eine Datei und nach stdout.

  • Hänge mit tee -a an, statt eine Datei zu ersetzen.

  • Setze tee bewusst vor oder hinter einen Filter.

Lernfortschritt speichern

Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.

Kostenloses Konto erstellen
Nächste Lektion
Zurück zu Text-Fu