
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/stdin | Eingabe erfolgt über die Tastatur |
Standardausgabe (stdout) mit der Gerätedatei /dev/stdout | Ausgabe erfolgt über den Bildschirm |
Standarderror (stderr) mit der Gerätedatei /dev/stderr | Ausgabe 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.