UnixTools01 10

From
Revision as of 13:07, 28 November 2024 by Jpr (talk | contribs) (Created page with "= 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...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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