
Der Linux-Befehl ‚tee‘ löst ein konkretes Problem: Du willst die Ausgabe eines Befehls im Terminal sehen UND sie gleichzeitig in eine Datei speichern. Ohne ‚tee‘ musst du dich für eines von beiden entscheiden.
Was ist der Linux-Befehl ‚tee‘?
‚tee‘ liest von der Standardeingabe und schreibt gleichzeitig in die Standardausgabe und in eine oder mehrere Dateien. Der Name stammt von T-förmigen Rohrverbindungen in der Sanitärtechnik, die den Fluss in zwei Richtungen aufteilen. Gleiches Prinzip hier.
Wie ‚tee‘ in die Unix-Pipeline passt
In einer Standard-Unix-Pipeline fließen Daten von links nach rechts durch Pipes. ‚tee‘ klinkt sich in diesen Fluss ein und gabelt die Ausgabe: Eine Kopie geht weiter durch die Pipeline, eine Kopie geht in eine Datei. Ohne ‚tee‘ müsstest du den Befehl zweimal ausführen oder auf die Terminalausgabe verzichten.
‚tee‘-Befehlssyntax
command | tee [OPTIONS] [FILE...]Das Pipe-Zeichen leitet die Ausgabe des vorhergehenden Befehls an ‚tee‘ weiter. ‚tee‘ schreibt diese Ausgabe dann ins Terminal und in jede angegebene Datei.
So verwendest du den Befehl ‚tee‘
Ausgabe in eine Datei und ins Terminal schreiben
Grundlegende Verwendung: Führe einen Befehl aus und schreibe seine Ausgabe in eine Datei, während du sie weiterhin auf dem Bildschirm siehst:
ls -la | tee directory_listing.txtDas Terminal zeigt die ‚ls‘-Ausgabe. ‚directory_listing.txt‘ erhält den gleichen Inhalt. Ohne ‚tee‘ würde ‚ls > directory_listing.txt‘ in die Datei umleiten, aber nichts auf dem Bildschirm anzeigen.
Mit ‚tee -a‘ an eine Datei anhängen
Standardmäßig überschreibt ‚tee‘ die Datei bei jedem Aufruf. Das Flag ‚-a‘ hängt stattdessen an:
echo "New entry" | tee -a logfile.txtDas ist das Muster, um Logdateien in Skripten schrittweise aufzubauen.
In mehrere Dateien gleichzeitig schreiben
Gib mehrere Dateinamen an, und ‚tee‘ schreibt gleichzeitig in alle:
uptime | tee file1.txt file2.txt file3.txtAlle drei Dateien erhalten identischen Inhalt. Nützlich, um Konfigurations-Snapshots an mehrere Orte zu kopieren.
’sudo‘ mit ‚tee‘ für Root-Dateien verwenden
Hier zeigt ‚tee‘ seinen wahren Wert auf Produktionssystemen. Du kannst Output-Redirection nicht mit ’sudo‘ verwenden, weil die Shell die Umleitung verarbeitet, bevor ’sudo‘ ausgeführt wird:
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.confDie Pipe leitet durch ‚tee‘, das über ’sudo‘ als Root läuft und in die geschützte Datei schreibt. Um anzuhängen statt zu überschreiben, füge ‚-a‘ hinzu:
echo "new config line" | sudo tee -a /etc/nginx/nginx.confFortgeschrittene ‚tee‘-Nutzungsmuster
Terminalausgabe mit ‚tee‘ unterdrücken
Wenn du die Ausgabe in eine Datei speichern, aber nicht auf dem Bildschirm sehen willst, leite die Standardausgabe von ‚tee‘ nach ‚/dev/null‘ um:
command | tee output.txt > /dev/nullDie Datei wird trotzdem geschrieben. Das Terminal zeigt nichts an.
‚tee‘ mit anderen Befehlen kombinieren
‚tee‘ kann mitten in einer Pipeline stehen und dir ermöglichen, Daten in Zwischenschritten zu inspizieren:
cat large_file.txt | tee snapshot.txt | grep "ERROR" | wc -l’snapshot.txt‘ erfasst die vollständige Datei. Das Terminal zeigt nur die Anzahl der ERROR-Zeilen. Zwei Ergebnisse aus einem Durchlauf.
‚tee‘ vs. Output-Redirection: Wann du was verwendest
Output-Redirection (>) ist einfacher, wenn du nur in eine Datei speichern willst und die Terminalausgabe nicht brauchst. ‚tee‘ ist die richtige Wahl, wenn du beides brauchst, wenn du gleichzeitig in mehrere Dateien schreiben musst oder wenn du ’sudo‘ benötigst, um in geschützte Pfade zu schreiben. Wenn dein Skript unbeaufsichtigt läuft, reicht Redirection in der Regel aus. Wenn jemand live mitschaut, hält ‚tee‘ die Ausgabe sichtbar.
FAQ: Linux ‚tee‘-Befehl
Er liest von der Standardeingabe und schreibt gleichzeitig ins Terminal und in eine oder mehrere Dateien. Stell es dir als Pipe-Splitter vor.
Füge das Flag ‚-a‘ hinzu: ‚command | tee -a dateiname.txt‘. Ohne ‚-a‘ überschreibt ‚tee‘ die Datei bei jedem Aufruf.
Pipe zu ’sudo tee‘: echo „content“ | sudo tee /pfad/zur/geschützten/datei. Das funktioniert, weil ‚tee‘ das Schreiben übernimmt (nicht die Shell-Redirection) und ‚tee‘ mit erhöhten Rechten läuft.
Output-Redirection (> oder >>) schreibt nur in eine Datei. Die Terminalausgabe geht verloren. ‚tee‘ schreibt in beides. Verwende Redirection für Hintergrund-Skripte, bei denen die Terminalausgabe keine Rolle spielt. Verwende ‚tee‘, wenn du die Ausgabe sehen und gleichzeitig speichern willst.