Datenströme in Linux umleiten

Ausgeführte Kommandos auf der Kommandozeile können eine Ausgabe mit sich bringen, die im analogen Leben einer Straßenverkehrsgefährdung gleichen würden. Die Auswertung von zahllosen Zeilen lassen uns in die Lage eines Forensikers zwangsversetzen, um einzusehen, was das Kommando denn nun angerichtet hat. Erschwerend kommt hinzu, dass keine Unterscheidung zwischen Fehlermeldungen und tatsächlicher Ausgabe gemacht wird und einfach alles in einem ordentlichen Chaos untereinander weggeschrieben wird.
Wie sich in dieser Situation ein wenig mehr Übersichtlichkeit verschaffen lässt, wird im folgenden gezeigt.

Bevor wir zum Kern dieses Beitrags vorstoßen, soll an dieser Stelle die Funktion der 3 Datenströme in unixoiden Betriebssystemen ein wenig erläutert werden. Diese 3 Datenströme setzen sich zusammen aus der …

Standardeingabe (stdin) mit der Gerätedatei /dev/stdinEingabe erfolgt über die Tastatur
Standardausgabe (stdout) mit der Gerätedatei /dev/stdoutAusgabe erfolgt über den Bildschirm
Standarderror (stderr) mit der Gerätedatei /dev/stderrAusgabe ebenfalls erfolgt über den Bildschirm

Um diese Informationen nun für sich zu nutzen, beginnen wir mit der Umleitung der Ausgabe eines Befehls in eine Datei:

df -h > log.txt

Hiermit wird eine neue Datei ‘log.txt’ erstellt und lediglich der stdout Kanal in die Datei geschrieben, soll heissen, es wird die Datei nur nach erfolgreicher Ausführung mit Inhalt gefüllt. Sollte der Befehl fehlschlagen oder wird eine Fehlermeldung generiert, taucht diese nicht auf.
Soll die Datei ‘log.txt’ nicht überschrieben sondern mit zusätzlichem Inhalt erweitert werden, wird der Shell Operator ‘>>’ einfach doppelt verwendet:

df -h >> log.txt

Andersherum lässt sich auch die Standardeingabe aus der Datei ‘log.txt’ beziehen:

cat < log.txt

Um nicht nur den Standardausgabe, sondern auch den Standarderror Kanal in 2 separaten Dateien zu protollieren, lässt sich dies folgendermaßen erreichen:

find / -name "snapshot" 1> log.txt 2> err.txt

durch die zwei Anweisungen ‘1> log.txt’ und ‘2> err.txt’ wird die Ausgabe des find-Kommandos in die ‘log.txt’ geschrieben und zusätzlich alle aufkommenden Fehlermeldungen in die ‘err.txt’.
Möchte man nun doch beides in einer einzigen Datei zusammen speichern, hilft folgender Befehl:

find / -name "snapshot" > log_err.txt 2>&1

Im großen und ganzen war es das bereits mit den groben Grundlagen. Mit Hilfe dieser Befehlsketten und ein wenig Verständnis der Funktionsweisen, lassen sich hiermit nicht nur wiederverwertbare Ausgaben erzeugen, die zur Fehleranalyse sehr hilfreich sein können, sondern auch rudimentäre Log-Dateien erstellen.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen