GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Praktische Linux- und Unix-Tee-Befehle für den Linux-Administrator

Als Linux-Administrator gibt es viele Gelegenheiten, bei denen Sie die Ausgabe eines Befehls in einer Datei speichern müssen, abgesehen davon, dass Sie die Ausgabe nur auf dem Terminal drucken. Nicht sicher wie? Lassen Sie den Unix-Befehl tee den Trick machen.

In diesem Tutorial lernen Sie viele Möglichkeiten kennen, den tee zu verwenden Befehl zum Speichern und Anhängen der Ausgabe an eine Datei.

Bereit? Lesen Sie weiter, um Ihr Shell-Scripting auf die nächste Stufe zu bringen!

Voraussetzungen

Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie ein Linux-System haben. Dieses Tutorial verwendet Ubuntu 20.04, aber Sie können jede Linux-Variante verwenden.

Befehlsausgaben umleiten (STDOUT/STDERR)

Vor dem Ausführen von tee Befehl, ist es wichtig zu verstehen, wie Weiterleitungen funktionieren. Unter Linux wird alles als Datei betrachtet, einschließlich Geräte, Verzeichnisse und sogar die Ausgabe von Befehlen. Als Ergebnis können Sie die Ausgabe eines Befehls nehmen und diese Ausgabe als Eingabe für einen anderen Befehl verwenden (Dateiumleitungen).

Es gibt verschiedene Arten von Weiterleitungen, und jede dient einem bestimmten Zweck. Aber beim Ausführen von tee verwenden Sie hauptsächlich zwei verschiedene Arten von Weiterleitungen:

  • Standard Output Redirect (STDOUT) (>) – Die Standardausgabe eines Befehls.
  • Standard Error Redirect (STDERR)(2>) – Eine Fehlermeldung, die von einem Befehl generiert und auf Ihrem Bildschirm angezeigt wird.

Beide Umleitungen nehmen und speichern Ausgaben von Befehlen in einer Datei, aber Sie werden unten sehen, wie Umleitungen funktionieren.

Führen Sie ls aus Befehl ohne Argumente, um alle Inhalte (Dateien und Ordner) Ihres Arbeitsverzeichnisses aufzulisten.

ls

Unten ist die STDOUT des ls-Befehls.

Führen Sie als Nächstes den folgenden Befehl aus, um den Inhalt eines Verzeichnisses absichtlich aufzulisten (fake_directory ), das nicht existiert.

ls fake_directory

Sie erhalten eine Fehlermeldung, die besagt, dass das Verzeichnis nicht existiert. Diese Ausgabe ist die STDERR des ls-Befehls.

Befehlsausgaben in einer Datei speichern

Angenommen, Sie möchten die STDOUT von ls speichern Befehl in eine Datei, anstatt nur die Ausgabe auf dem Terminal auszugeben. In diesem Fall muss der Redirect-Operator (> ) ist praktisch.

1. Führen Sie den folgenden Befehl aus, um die STDOUT des Befehls ls in eine Datei mit dem Namen ls_stdout.txt zu speichern/umzuleiten (>). Da dieser Befehl die Ausgabe in einer Datei speichert, erhalten Sie keine Ausgabe auf Ihrem Terminal.

ls > ls_stdout.txt

2. Führen Sie nun den folgenden cat-Befehl aus, um den Inhalt Ihrer Datei ls_stdout.txt anzuzeigen.

cat ls_stdout.txt

3. Führen Sie auf ähnliche Weise den folgenden Befehl aus, um STDERR (2>) des Befehls ls in einer Datei namens ls_stderr.txt zu speichern. Auch hier erhalten Sie keine Ausgabe auf Ihrem Terminal, da die Ausgabe in einer Datei gespeichert wird.

ls fake_directory 2> ls_stderr.txt

4. Führen Sie nun den folgenden cat-Befehl aus, um den Inhalt der Datei ls_stderr.txt anzuzeigen.

cat ls_stderr.txt

Unten können Sie bestätigen, dass die STDERR des ls-Befehls in ls_stderr.txt gespeichert wurde Datei.

5. Führen Sie den folgenden Befehl aus, um sowohl (&>) STDOUT als auch STDERR des Befehls ls in einer Datei namens ls_alloutput.txt zu speichern.

Warum sich mit einem zufrieden geben, wenn man beides haben kann, richtig? In der Regel möchten Sie möglicherweise beide Ausgaben zur Fehlerbehebung oder zu Protokollierungszwecken in derselben Datei speichern.

ls &> ls_alloutput.txt

6. Führen Sie zuletzt den folgenden cat-Befehl aus, um den Inhalt der Datei ls_alloutput.txt anzuzeigen

cat ls_alloutput.txt

Programme mit Pipes verbinden

Neben dem einfachen Speichern von Ausgaben in einer Datei können Sie mit Pipes noch viel mehr erreichen, z. B. das Verbinden von Programmen. In realen Szenarien werden Sie höchstwahrscheinlich Pipes in Verbindung mit Dateiumleitungen und dem tee verwenden Befehl.

Eine Pipe (| ) ist ein Mechanismus für die Kommunikation zwischen Prozessen, mit dem Sie die Ausgabe eines Befehls mit der Eingabe eines anderen Befehls verbinden können. Mit anderen Worten, die Pipe nimmt die STDOUT eines Prozesses und verbindet diese STDOUT mit der STDIN eines anderen Prozesses.

Führen Sie den folgenden grep-Befehl aus, um alle Zeilen zu finden, die das Wort tcp in der Datei /etc/services enthalten.

grep tcp /etc/services

Führen Sie nun dasselbe grep aus Befehl unten. Aber diesmal leiten Sie die Ausgabe des obigen grep weiter Befehl an less Befehl, um die Suchergebnisse bildschirmweise anzuzeigen.

grep tcp /etc/services | less

Wie funktioniert die Verrohrung? Wie Sie unten sehen können, wird bei Verwendung des Pipe-Zeichens (|) die Ausgabe von grep Der Befehl wird an einem temporären Ort gespeichert. Die Ausgabe wird dann als Eingabe an less übergeben Befehl.

Das Kombinieren des Unix-Tees (tee ) Befehl, Pipes und Weiterleitungen

Bisher haben Sie gelernt, wie der tee Befehl, Pipes und Weiterleitungen funktionieren. Aber warum nicht alle drei zusammen verwenden, um die Befehlsausgaben besser steuern zu können?

Sie haben zuvor die Rohrleitungen mit Weiterleitungen verwendet, und das ist ein großer Schritt. Dieses Mal verwenden Sie Paspeln und den tee Befehl, um die Ausgabe eines Befehls zur weiteren Verarbeitung an einen anderen zu senden.

Führen Sie den folgenden Befehl aus, um die Ausgabe von ls zu senden Befehl auf den Bildschirm und den result.txt Datei. Die Ausgabe von ls wird weiter an grep geleitet Befehl, um nur die Zeilen zu filtern, die das Wort ip enthalten .

ls | grep 'ip' | tee result.txt

Führen Sie nun cat aus Befehl, um den Inhalt des Ergebnisses zu überprüfen .txt-Datei.

cat result.txt

Ausgabe an vorhandene Dateien anhängen

Sie haben zuvor die Ausgabe von Befehlen in einer Datei gespeichert, aber können Sie eine vorhandene Datei aktualisieren, anstatt eine neue zu erstellen? Ja! Lassen Sie die tee Befehl zaubern.

Standardmäßig ist die tee Befehl überschreibt den Inhalt einer vorhandenen Datei. In vielen Fällen möchten Sie jedoch möglicherweise die Ausgabe eines Befehls an eine vorhandene Datei anhängen. Beispielsweise das Protokollieren aller Serverereignisse in Echtzeit in einer Protokolldatei.

Mit dieser Funktion wird die Protokolldatei mit neuen Einträgen angehängt, wenn ein Ereignis auf dem Server auftritt.

Führen Sie den folgenden Befehl aus, um die Ausgabe des Befehls ls -lR zu übernehmen und die Ausgabe (tee -a) an result.txt anzuhängen Dateiinhalt. Dieser Befehl liefert keine Ausgabe, da Sie die Befehlsausgabe an eine Datei senden.

ls -lR | tee -a result.txt

Führen Sie nun cat aus Befehl, um den Inhalt von result.txt zu überprüfen Datei.

cat result.txt

Wie Sie unten sehen können, ist die Ausgabe von ls -lR Befehl wird an das Ende der result.txt angehängt Datei.

Mit dem tee Befehl in Verbindung mit sudo

Viele Befehle erfordern erhöhte Rechte oder sudo Zugriff, wie das Durchführen von Änderungen innerhalb von /etc Verzeichnis. Die Frage ist, funktioniert der tee Befehlsarbeit Hand in Hand mit sudo ? Ja!

Das Voranstellen von sudo an den Befehl tee ermöglicht es einem Nicht-Root-Benutzer, Daten in eine Datei zu schreiben, die nur ein Root-Benutzer ändern kann. Beispielsweise möchten Sie den Benutzer ata aktivieren um Daten in die /etc/ata.conf zu schreiben Datei. Aber gleichzeitig möchten Sie dem Benutzer keine Daten geben Root-Rechte.

1. Melden Sie sich mit einem Nicht-Root-Benutzer bei Ihrem Computer an.

2. Führen Sie als Nächstes den folgenden Befehl ohne sudo aus, um die Textdaten in die Datei /etc/ata.conf zu schreiben.

echo "data" > tee /etc/ata.conf

Wie Sie unten sehen können, erhalten Sie seit ata einen Permission denied-Fehler Benutzer hat keinen Schreibzugriff auf /etc/ata.conf Datei.

3. Führen Sie denselben Befehl unten aus wie in Schritt 2, um die Textdaten in die Datei /etc/ata.conf zu schreiben. Aber stellen Sie dieses Mal den sudo-Befehl dem tee-Befehl voran. Dadurch kann der Benutzer ata um den Befehl (mit erhöhten Rechten) als Nicht-Root-Benutzer auszuführen.

echo "data" | sudo tee /etc/ata.conf

Führen Sie zuletzt den folgenden cat-Befehl aus, um zu überprüfen, ob die Datei ata Der Benutzer könnte den Text „data“ in die /etc/ata.conf schreiben.

cat /etc/ata.conf

Schlussfolgerung

In diesem Lernprogramm haben Sie gelernt, wie Sie mit dem Unix-Befehl tee Daten in Dateien schreiben und wie er in Verbindung mit anderen Befehlen funktioniert. An diesem Punkt sollten Sie über eine leistungsstarke Kombination von Befehlen verfügen, mit denen Sie die Ein- und Ausgabe in der Linux-Befehlszeilenumgebung verwalten können.

Sie sind wie ein Sushi-Koch, der die Zutaten und Proportionen, die in jedes Gericht fließen, vollständig kontrolliert. Sie können jede Bestellung spontan an den Geschmack Ihrer Kunden anpassen. Die einzige Grenze ist Ihre Vorstellungskraft (und vielleicht die Größe Ihres Terminalfensters).

Gehen Sie jetzt los und erstellen Sie einige erstaunliche Kommandozeilen-Gebräue!


Linux
  1. Bash-Bang-Befehle:Ein Must-Know-Trick für die Linux-Befehlszeile

  2. 5 praktische Beispiele für Head-Befehle unter Linux

  3. Wesentliche Beispiele für den Dateibefehl in Linux

  4. 5 praktische Beispiele des dd-Befehls unter Linux

  5. Was ist das Äquivalent zum Linux-Dateibefehl für Windows?

Die 50 nützlichen Linux-IP-Befehle für Netzwerkadministratoren

5 Befehle zum Anzeigen des Inhalts einer Datei in der Linux-Befehlszeile

AWK-Befehl unter Linux/Unix

Ein praktischer Leitfaden für den Chroot-Befehl unter Linux

Unix LS-Befehl:15 praktische Beispiele

UNIX / Linux:7 praktische Beispiele für PS-Befehle zur Prozessüberwachung