Zum Inhalt springen

Ein-/Ausgabe

Jedes Linux-Programm hat beim Start automatisch drei geöffnete Kommunikationskanäle:

KanalNummerNameStandard
stdin0Standard-EingabeTastatur
stdout1Standard-AusgabeTerminal
stderr2Standard-FehlerausgabeTerminal

Das Entscheidende: Ein Programm weiß nicht, woher seine Eingabe kommt oder wohin seine Ausgabe geht. Es liest von stdin und schreibt nach stdout – egal ob dahinter eine Tastatur, eine Datei oder ein anderes Programm steckt. Dieses Prinzip ist die Grundlage für Umleitungen und Pipes.

Auf den ersten Blick landen beide Kanäle auf dem Terminal – sie sehen gleich aus:

Terminal-Fenster
ls /etc/hosts
# /etc/hosts ← stdout
ls /gibt/es/nicht
# ls: cannot access '/gibt/es/nicht': No such file or directory ← stderr

Der Unterschied wird sichtbar, sobald man die Ausgabe umleitet: stdout und stderr lassen sich unabhängig voneinander lenken – Fehlermeldungen können so von der normalen Ausgabe getrennt werden.

Viele Befehle lesen von stdin, wenn keine Datei als Argument angegeben wird:

Terminal-Fenster
cat
# wartet auf Tastatureingabe, gibt jede Zeile direkt zurück
# Beenden: Strg+D

Das macht sie zu Filtern – sie können Daten aus einer Datei, von der Tastatur oder aus einer Pipe verarbeiten, ohne dass der Befehl selbst geändert werden muss.

Wie die Kanäle umgeleitet und verbunden werden, zeigen die nächsten beiden Artikel.