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.
Text-Fu · Lektion 4
Pipe und Tee
Lerne, Befehle mit Pipelines zu verbinden und einen Strom mit tee zu speichern und zugleich weiterzugeben.
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:
- erzeugt die vollständige lange Auflistung,
- speichert den vollständigen Strom in
etc-listing.txtund - sendet denselben Strom an
grep, das nur Zeilen mitconfausgibt.
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:
- Redirecting Input and Output in Linux – Steuere Standardausgabe, Standardfehler und Standardeingabe mit Operatoren wie
>,>>und2>sowie mittee. - Sequence Control and Pipeline – Steuere Befehlsfolgen, verwende Pipelines und kombiniere Werkzeuge wie
cut,grep,wc,sortunduniq. - 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
teezugleich in eine Datei und nach stdout.Hänge mit
tee -aan, statt eine Datei zu ersetzen.Setze
teebewusst 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