Einführung
Standardmäßig geben Linux-Befehle alles auf dem Bildschirm aus. Aber was ist, wenn Sie diese Daten speichern möchten?
Dieser Vorgang heißt Umleitung. Stellen Sie sich vor, Sie würden Ihrer Post eine „Weiterleitungsadresse“ geben.
So lässt sich die Shell-Syntax allgemein gut verstehen: Die Umleitung ändert nicht die grundlegende Funktion eines Befehls, sondern nur das Ziel, an das seine Eingabe oder Ausgabe gesendet wird.
In diesem Lab lernen Sie drei Möglichkeiten kennen, das Ziel von Daten zu steuern:
- Umleiten und überschreiben (
>): Speichert die Ausgabe in einer Datei und ersetzt den bisherigen Inhalt. - Umleiten und anhängen (
>>): Fügt die Ausgabe am Ende einer Datei hinzu. - Fehler umleiten (
2>): Erfasst ausschließlich Fehlermeldungen.
Ausgabe umleiten und überschreiben
Das Größer-als-Zeichen > ist der Operator zum Überschreiben.
Viele Anfänger lernen > als „in einer Datei speichern“. Genauer ist jedoch: „Die Standardausgabe an diese Datei senden und den bisherigen Inhalt ersetzen.“ Diese Formulierung wird wichtig, sobald Sie mehrere Befehle gezielter miteinander kombinieren.
Linux erhält damit sinngemäß folgende Anweisung: „Nimm die Ausgabe dieses Befehls und schreibe sie in diese Datei. Wenn die Datei bereits existiert, lösche ihren bisherigen Inhalt zuerst.“
Wechseln Sie in Ihr Projektverzeichnis:
cd ~/project
Leiten Sie die Ausgabe in output.txt um:
echo "Hello, Linux." > output.txt
Auf dem Bildschirm erscheint nichts. Der Text wurde in die Datei geschrieben. Überprüfen Sie den Inhalt:
cat output.txt
Sehen Sie nun, warum wir von „Überschreiben“ sprechen. Führen Sie Folgendes aus:
echo "This is new content." > output.txt
cat output.txt
Der alte Text „Hello, Linux.“ ist verschwunden. Der Operator > hat die Datei vollständig geleert und mit dem neuen Inhalt beschrieben.
Behandeln Sie eine Umleitung deshalb genauso vorsichtig wie eine Änderung an einer Datei. Ein kurzer Befehl kann den Inhalt einer vorhandenen Datei sofort ersetzen.
Ausgabe anhängen (>>)
Oft möchten Sie Daten nicht löschen, sondern erweitern. Verwenden Sie dafür das doppelte Größer-als-Zeichen >>.
Dieser Operator dient zum Anhängen.
Fügen Sie eine neue Zeile an output.txt an:
echo "This line is appended." >> output.txt
cat output.txt
Sie sollten jetzt beide Zeilen sehen.
Der ursprüngliche Inhalt ist erhalten geblieben. Führen Sie den Vorgang erneut aus:
echo "Another line." >> output.txt
cat output.txt
Der Operator >> eignet sich besonders gut für Protokolldateien.
Das Anhängen ist wichtig, weil viele Dateien im laufenden Betrieb wachsen, anstatt jedes Mal vollständig neu erstellt zu werden. Protokolle, Berichte und Befehlsprotokolle verwenden häufig einen Arbeitsablauf, bei dem neue Daten am Ende hinzugefügt werden.
Fehler umleiten (2>)
Wie Sie gelernt haben, trennt Linux die „gute Ausgabe“ (stdout) von der „Fehlerausgabe“ (stderr).
Die Operatoren > und >> verarbeiten ausschließlich die „gute Ausgabe“. Fehlermeldungen ignorieren sie.
Hier wird das Stream-Modell aus dem vorherigen Lab praktisch. Wenn Ausgabe und Fehlermeldungen über getrennte Streams laufen, kann Linux sie an unterschiedliche Ziele weiterleiten.
Um Fehlermeldungen zu erfassen, verwenden wir 2>. Die Kennung für die Standardfehlerausgabe lautet 2.
Versuchen Sie, ein nicht vorhandenes Verzeichnis aufzulisten:
ls /missing_directory 2> error.log
Der Bildschirm bleibt leer. Die Fehlermeldung wurde abgefangen und in error.log geschrieben.
Sehen Sie sich die Datei an:
cat error.log
Die Fehlermeldung wird nun in der Datei angezeigt.
Die 2 in 2> stammt von der herkömmlichen Dateideskriptornummer für die Standardfehlerausgabe. Sie müssen sich noch nicht alle Dateideskriptoren merken. Es ist jedoch hilfreich zu wissen, dass diese Zahlen auf die Stream-Kanäle der Shell verweisen.
Zusammenfassung
Sie beherrschen nun die grundlegende Steuerung von Ausgabeströmen:
>(Überschreiben): Speichert die Ausgabe in einer Datei und löscht den bisherigen Inhalt.>>(Anhängen): Fügt die Ausgabe am Ende einer Datei hinzu und bewahrt den bisherigen Inhalt.2>(Fehlerumleitung): Erfasst Fehlermeldungen.
Mit diesen Werkzeugen können Sie die Ergebnisse von Befehlen effizient speichern.



