Einführung
Stellen Sie sich jeden Linux-Befehl als eine Maschine vor. Auf der einen Seite werden Daten eingegeben, die Maschine verarbeitet sie. Anders als einfache Maschinen mit nur einem Ausgang hat ein Linux-Befehl jedoch zwei getrennte Ausgänge:
- Standard Output (stdout): Der „gute Ausgang“. Wenn die Maschine korrekt arbeitet, kommt das fertige Ergebnis hier heraus.
- Standard Error (stderr): Der „schlechte Ausgang“. Wenn etwas schiefgeht, werden Fehlermeldungen hier ausgegeben.
Standardmäßig leiten beide Ausgänge ihre Inhalte auf Ihren Bildschirm.
Dieses Modell der „Datenströme“ gehört zu den wichtigsten Konzepten bei der Arbeit mit der Shell. Linux-Befehle „geben nicht einfach Text aus“; häufig erzeugen sie strukturierte Datenströme. Sobald Sie diese Datenströme verstehen, wirken Umleitungen und Pipelines logisch statt magisch.
In diesem Lab führen Sie Befehle aus, um diese beiden unterschiedlichen Datenströme in Aktion zu sehen.
Standardausgabe (stdout)
Sehen wir uns den „guten Ausgang“ in Aktion an.
Wir verwenden ls, um Dateien aufzulisten. Wenn ls erfolgreich ausgeführt wird, sendet das Programm die Dateinamen an die Standardausgabe.
Führen Sie diesen Befehl aus:
ls -l
Sie sollten eine Liste von Dateien sehen.
Was ist passiert?
Da der Befehl erfolgreich ausgeführt wurde, hat das Programm ls die Liste an den Datenstrom stdout gesendet. Ihr Terminal überwacht diesen Datenstrom und zeigt seinen Inhalt an.
Wichtig ist: Das Terminal ist lediglich das Standardziel. Die Standardausgabe ist nicht dauerhaft an den Bildschirm gebunden. Deshalb können Sie sie später speichern oder an ein anderes Ziel umleiten.
Standardfehler (stderr)
Sehen wir uns nun den „schlechten Ausgang“ an. Der Standardfehler (stderr) ist für Fehler reserviert.
Sie können ls dazu bringen, eine Fehlermeldung auszugeben, indem Sie ein Verzeichnis angeben, das nicht existiert.
Führen Sie diesen Befehl aus:
ls -l /nonexistent_directory
Sie sollten eine Fehlermeldung sehen.
Was ist passiert?
Der Befehl ist fehlgeschlagen. Statt die Meldung an stdout zu senden, hat er sie an den Datenstrom stderr gesendet.
Ihr Terminal überwacht standardmäßig beide Datenströme. Deshalb zeigt es den Fehler genauso an wie normalen Text.
Aus diesem Grund nehmen Anfänger häufig an, Erfolgsmeldungen und Fehlermeldungen seien „dieselbe Art von Ausgabe“. Auf dem Bildschirm sehen sie möglicherweise ähnlich aus, intern werden sie jedoch über unterschiedliche Kanäle übertragen.
Gemischte Ausgabe
Sehen wir uns nun an, was passiert, wenn ein Befehl beide Datenströme erzeugt.
Wir weisen ls an, zwei Dinge zu tun:
- Das aktuelle Verzeichnis
.aufzulisten (dies ist erfolgreich). /fakeaufzulisten (dies schlägt fehl).
Führen Sie diesen Befehl aus:
ls -l . /fake
Sehen Sie genau hin. Sie sollten zwei Teile sehen:
- Eine Fehlermeldung für
/fake. - Eine erfolgreiche Dateiliste für
..
Was ist passiert?
Die Fehlermeldung kam über den stderr-Datenstrom. Die Dateiliste kam über den stdout-Datenstrom. Ihr Terminal hat beide Datenströme empfangen und auf Ihrem Bildschirm ausgegeben.
Diese Unterscheidung ist entscheidend. Im nächsten Lab lernen Sie, wie Sie stdout erfassen und stderr dabei ignorieren.
Diese Trennung ist nicht nur von theoretischer Bedeutung. In der praktischen Automatisierung möchten Skripte häufig normale Ergebnisse speichern und Fehler trotzdem sichtbar lassen oder Fehler in Protokollen erfassen, ohne sie mit nützlichen Daten zu vermischen.
Zusammenfassung
In diesem Lab haben Sie mithilfe der Analogie einer Maschine mit zwei Ausgängen die „Datenströme“ untersucht:
- Standardausgabe: Der Kanal für normale Ergebnisse.
- Standardfehler: Der Kanal für Fehlermeldungen.
Standardmäßig zeigt Linux beide Datenströme gemeinsam auf Ihrem Bildschirm an. Als Nächstes lernen Sie, sie voneinander zu trennen.



