UnixTools01 10
redirecting output of a programm to a file
Bisher war es so, dass, wenn wir ein Kommando ausführten, dass dieses Kommando siene Antwort auf den Bildschirm schrieb (damit wir, die Nutzer, sie dort lesen können). Das muss aber nicht immer so sein. Unix/Linux-Programme wurden nämlich so programmiert, dass sie ihre Ausgaben nicht ausdrücklich an den Bildschrim schicken, sondern über eine "Ausgangsleitung" in die Umwelt schicken. Diese "Ausgangsleitung", nennen wir Standard Out' oder kurz stdout. Normalerweise ist stdout mit dem Bildschirm verbunden, d.h. wenn das Programm der Umwelt etwas mitzuteilen hat, dann schriebt es das meist auf den Kanal stdout, und weil dieser Kanal in der Regel mit dem Bildschirm verbundenist, sehen wir die Ausgabe auf dem Bildschirm.
ls /bin > file.txt
Es ist jedoch möglich, einem Kommando zu sagen, dass es stdout nicht zum Bildschrim leiten soll, sondern zum Beispiel in eine Datei
$ ls /bin > file.txt
Dieses Kommando beispielsweise listet alle Dateien in dem Verzeichnis /bin auf. Das sind sehr sehr viele Dateien. Statt die Namen aller Dateien auf den Bildschirm zu schrieben (was der Normalfall wäre), sagen wir mit > file.txt am ENde des Kommandos, dass wir stdout in die besagte Datei umlenken. Anschließend können wir uns den Inhalt der datei ansehen, zu, Beispiel mit more
$ more file.txt arch arping awk basename bash cat ...
Das ist sinnvoll, falls wir die in die Datei umgelenkte Ausgabe des Programms später irgendwie bearbeiten wollen. Übrigens: Statt file.txt können Sie die Datei natürlich nennen, wie Sie wollen. Gibt es die Datei schon, wird der alte Inhalt gelöscht und die Datei wird mit dem neuen Inhalt überschrieben. Gibt es die Datei noch nicht, so wird sie neu angelegt.
ls /bin > /dev/null
Manchmal ist der Grund, warum wiur die Ausgabe eines Kommandos (stdout) in eine Datei umlenken wollen, gar nicht, dass wir diese Datei später lesen/verarbeiten wollen. Wir wollen nur einfach nicht, dass die Ausgabe auf dem Bildschirm erscheint. Wir lenken also stdout in eine Datei um, damit die Ausgaben dort verschwinden, wie auf einer Müllhalde. Für genau diesen Zweck wiurde die Datei /dev/null erfunden. Alles was in diese Datei geschrieben wird, wird vom Betriebssystem einfach weggeworfen. Sie wollen also gar nicht wissen, was ls ausgegeben hat? Dann lenken Sie stdout einfahc in die Datei /dev/null um.
$ ls > /dev/null
In diesem Beispiel ist es vielleicht wirklich schwer zu erklären, warum wir ls überhaupt aufrufen, wenn wir uns für die Ausgabe gar nicht interessieren. Aber glauben Sie mir, wir werden bald Programme kennenlernen, die etwas anderes sinnvolles machen, und von denen wir nur wollen, das sie dies machen, aber ohne uns dabei den Bildschrim vollzuschreiben. Dann ist die oben beschriebene Umlenkung von stdout nach /dev/null extrem praktisch.
ls >> file.txt =
ls /bin/b* >> file.txt
let a programm take its input from a file (redirecting input)
more < file.txt wc < file.txt
let the output of programm be used as input of another progra,
ls -lisa /bin | more ls -lisa /bin | wc