Einführung
Wenn der Benutzer einen Befehl in einer interaktiven Linux-Shell ausführt, wird die Ausgabe im Textterminal angezeigt. Es gibt jedoch Möglichkeiten, dieses Verhalten zu ändern, indem zusätzliche Shell-Befehle in einer Pipeline verbunden werden.
In diesem Tutorial erfahren Sie, wie Sie den tee-Befehl unter Linux verwenden, um die Ausgabe eines Befehls zu verwalten.
Voraussetzungen
- Ein System, auf dem Linux ausgeführt wird
- Zugriff auf die Befehlszeile oder das Terminal
- Sudo-Berechtigungen
Was macht der tee-Befehl unter Linux?
Das tee
Der Befehl liest die Standardeingabe (stdin) und schreibt sie sowohl in die Standardausgabe (stdout) als auch in eine oder mehrere Dateien. tee
ist normalerweise Teil einer Pipeline, und ihm können beliebig viele Befehle vorangehen oder folgen.
tee-Befehle in Linux mit Beispielen
Das tee
Der Befehl wird allein oder mit zusätzlichen Optionen verwendet. Die folgenden Abschnitte listen die verfügbaren Optionen auf und bieten Beispiele für die Verwendung von Befehlen.
Grundlegende Verwendung
Die grundlegende Syntax für das tee
Befehl ist:
[command] | tee [options] [filename]
Das folgende Beispiel zeigt die Verwendung von tee
So erstellen Sie eine Datei, die Informationen über eine Netzwerkschnittstelle speichert und gleichzeitig die gleiche Ausgabe im Terminal bereitstellt:
Der cat-Befehl bestätigt dieses tee
hat die Ausgabe von ifconfig
erfolgreich geschrieben in die Datei example.txt
:
Wenn die für den Befehl verwendete Datei bereits vorhanden ist, tee
überschreibt den vorherigen Inhalt der Datei.
An die gegebene Datei anhängen
Das Überschreiben des Inhalts der Datei ist das Standardverhalten des tee
Befehl. Verwenden Sie das Argument -a
(oder --append
), um die Befehlsausgabe am Ende der Datei hinzuzufügen.
[command] | tee -a [filename]
Verwenden Sie zum Beispiel echo
Befehl zum Anhängen einer Textzeile an eine Datei:
Bestätigen Sie das erfolgreiche Hinzufügen mit der cat
Befehl:
In mehrere Dateien schreiben
Verwenden Sie tee
gefolgt von einer beliebigen Anzahl von Dateien, um dieselbe Ausgabe in jede von ihnen zu schreiben:
[command] | tee [options] [filename1] [filename2]...
Das folgende Beispiel zeigt das Schreiben der Ausgabe von echo
Befehl in zwei Dateien:
Die ls
Befehl zeigt dieses tee
erfolgreich erstellte Dateien example1.txt
und example2.txt
.
Ausblenden der Ausgabe
Um tee
zu sagen Um die Befehlsausgabe in einer Datei zu speichern und die Terminalausgabe zu überspringen, verwenden Sie die folgende Syntax:
[command] | tee [options] [filename] >/dev/null
Im folgenden Beispiel tee
erstellt eine Datei mit den Netzwerkschnittstellendaten, wobei die Standardausgabe übersprungen wird:
Ausgabe eines Befehls auf einen anderen umleiten
tee
muss nicht der letzte Befehl in der Pipeline sein. Verwenden Sie es, um die Ausgabe an einen anderen Befehl weiterzuleiten:
[command] | tee [options] [filename] | [command]
Im folgenden Beispiel tee
speichert die Ausgabe von ls
Befehl zu example.txt
und übergibt den Inhalt dieser Datei an den grep-Befehl, der alle Instanzen des Wortes „Beispiel“ findet und anzeigt:
Interrupts ignorieren
Um tee
zu aktivieren Um auch nach Unterbrechung des vorherigen Befehls ordnungsgemäß zu beenden, fügen Sie das Argument -i
hinzu (oder --ignore-interrupts
):
[command] | tee -i [filename]
Das nächste Beispiel zeigt tee
Schreiben der Ausgabe des Ping-Befehls und erfolgreiches Abschließen der Aktion auch nach ping
wird mit Ctrl+C
unterbrochen :
Tee mit Sudo verwenden
Um tee
zu aktivieren Um in eine root-eigene Datei oder eine Datei eines anderen Benutzers zu schreiben, platzieren Sie den sudo-Befehl direkt vor tee
.
[command] | sudo tee [options] [filename]
Das folgende Beispiel zeigt einen erfolglosen Versuch, in die root-eigene Datei sudoex.txt
zu schreiben . Wenn die sudo
Befehl hinzugefügt wird, wird die Operation abgeschlossen:
Tee im Vim-Editor verwenden
Wenn Sie eine root-eigene Datei in Vim öffnen und bearbeiten, ohne die sudo
Befehl, der Versuch, Änderungen zu speichern, erzeugt einen Fehler:
Um diesen Fehler zu überschreiben, geben Sie Folgendes in Vim ein:
:w !sudo tee %
Nachdem Sie sudo
eingegeben haben Passwort, zeigt Vim eine Warnung an, schreibt aber die Änderungen in die Datei.
Fehler beim Schreiben in Nicht-Pipes diagnostizieren
Um tee
anzuweisen Um eine Fehlermeldung auszugeben, wenn der Vorgang fehlschlägt, verwenden Sie -p
Argument:
[command] | tee -p [filename]
Die Standardaktion von tee -p
besteht darin, die Fehlermeldung sofort zu beenden und auszugeben, wenn der Fehler beim Schreiben in eine Pipe erkannt wird. Um das Verhalten des Befehls bei Schreibfehlern zu ändern, verwenden Sie --output-error
Argument, gefolgt vom Modus, der das Verhalten angibt:
[command] | tee --output-error=[mode] [filename]
Es gibt vier mögliche Modi:
warn
– diagnostiziert Fehler beim Schreiben auf einen beliebigen Ausgang.warn-nopipe
– diagnostiziert Fehler beim Schreiben in Nicht-Pipe-Ausgaben.exit
– Beenden bei Fehlern beim Schreiben in eine beliebige Ausgabe.exit-nopipe
– wird bei Fehlern beim Schreiben in eine Nicht-Pipe-Ausgabe beendet.
Verwenden Sie den tee-Befehl mit Bash-Skript
Das tee
Der Befehl findet sich häufig in Bash-Skripten. Betrachten Sie das folgende Beispiel:
Das obige Skript gibt die Nachricht „Hello World“ aus und speichert die Ausgabe in einer Protokolldatei. Das Ausführen des Skripts erstellt eine Protokolldatei im tmp
Mappe. Das Protokoll enthält die Ausgabe des Skripts:
Protokolldateien beobachten
Das Schreiben von Skriptausgaben in eine Protokolldatei erfolgt normalerweise mit >
Betreiber:
./testbash.sh > testbash.log
Der obige Befehl erstellt eine Protokolldatei, schreibt jedoch nichts in die Standardausgabe.
Verwenden Sie tee
um eine Protokolldatei zu erstellen und die Ausgabe im Terminal anzuzeigen:
./testbash.sh | tee testbash.log
Siehe Hilfe und Versionsinformationen
Sehen Sie sich die aktuelle Version des tee
an Befehl durch Eingabe von:
tee --version
Für die Anweisungen bezüglich des tee
Befehlssyntax und den verfügbaren Argumenten verwenden Sie das Hilfsargument des Befehls:
tee --help