Was ist Umleitung?
Die Umleitung ist eine Funktion in Linux, mit der Sie beim Ausführen eines Befehls die Standard-Eingabe-/Ausgabegeräte ändern können. Der grundlegende Arbeitsablauf jedes Linux-Befehls besteht darin, dass er eine Eingabe entgegennimmt und eine Ausgabe ausgibt.
Arten der Weiterleitung
1. Überschreiben
- “>” Das Standardeingabegerät (stdin) ist die Tastatur.
- „<“ Das Standardausgabegerät (stdout) ist der Bildschirm.
2. Anhängt
- „>>“ Standardausgabe
- "<<" Standardeingabe
3. Zusammenführen
- „p> &q“ Führt die Ausgabe von Stream p mit Stream q zusammen
- „p <&q“ Führt Eingaben von Stream p mit Stream q zusammen
Ausgabeumleitung
Die ‘> ‘ Symbol wird für die Ausgabeumleitung (STDOUT) verwendet.
Beispiel:
ls -al > listings
Hier wird die Ausgabe des Befehls ls -al in die Datei „listings“ statt auf Ihren Bildschirm umgeleitet.
Hinweis :„Verwenden Sie den korrekten Dateinamen, während Sie die Befehlsausgabe in eine Datei umleiten. Wenn bereits eine Datei mit demselben Namen vorhanden ist, löscht der umgeleitete Befehl den Inhalt dieser Datei und kann dann überschrieben werden.“
— Wenn Sie nicht möchten, dass eine Datei überschrieben wird, sondern einer bestehenden Datei weitere Inhalte hinzufügen möchten, sollten Sie ‘>> verwenden ‘-Operator.
— Sie können die Standardausgabe nicht nur auf Dateien, sondern auch auf Geräte umleiten!
cat music.mp3 > /dev/audio
Der cat-Befehl liest die Datei music.mp3 und sendet die Ausgabe an /dev/audio, das das Audiogerät ist. Aber wenn die Soundkonfigurationen in Ihrem PC korrekt sind, spielt dieser Befehl die Datei music.mp3
abEingabeumleitung
Die ‘< ‘Symbol wird für die Eingabe(STDIN)-Umleitung verwendet
Dadurch würde die Datei an die E-Mail angehängt und an den Empfänger gesendet.
„News Today“ ist der E-Mail-Betreff, „[email protected]“ ist die E-Mail-Adresse und „NewsFlash“ ist die Anhangsdatei.
Die obigen Beispiele waren einfach. Sehen wir uns einige fortgeschrittene Umleitungstechniken an, die Dateideskriptoren verwenden.
Dateideskriptoren (FD)
In Linux/Unix ist alles eine Datei. Normale Dateien, Verzeichnisse und sogar Geräte sind Dateien. Jede Datei hat eine zugeordnete Nummer namens File Descriptor (FD).
Ihr Bildschirm hat auch einen Dateideskriptor. Wenn ein Programm ausgeführt wird, wird die Ausgabe an den Dateideskriptor des Bildschirms gesendet, und Sie sehen die Programmausgabe auf Ihrem Monitor. Wenn die Ausgabe an den Dateideskriptor des Druckers gesendet wird, wäre die Programmausgabe gedruckt worden.
Fehlerumleitung
Immer wenn Sie ein Programm/Befehl am Terminal ausführen, sind immer 3 Dateien geöffnet, nämlich Standardeingabe, Standardausgabe, Standardfehler.
Diese Dateien sind immer vorhanden, wenn ein Programm ausgeführt wird. Wie zuvor erläutert, ist jeder dieser Dateien ein Dateideskriptor zugeordnet.
Datei | Dateideskriptor |
---|---|
Standardeingabe STDIN | 0 |
Standardausgabe STDOUT | 1 |
Standardfehler STDERR | 2 |
Standardmäßig wird der Fehlerstrom auf dem Bildschirm angezeigt. Die Fehlerumleitung leitet die Fehler an eine andere Datei als den Bildschirm weiter.
Warum Fehlerumleitung?
Die Fehlerumleitung ist eine der sehr beliebten Funktionen von Unix/Linux.
Häufige UNIX-Benutzer werden damit rechnen, dass viele Befehle eine Menge Fehler verursachen.
- Während der Suche nach Dateien erhält man zum Beispiel normalerweise Fehlermeldungen zur Verweigerung der Berechtigung. Diese Fehler helfen der Person, die nach einer bestimmten Datei sucht, normalerweise nicht.
- Während der Ausführung von Shell-Skripten möchten Sie häufig NICHT, dass Fehlermeldungen die normale Programmausgabe überladen.
Die Lösung besteht darin, die Fehlermeldungen in eine Datei umzuleiten.
Beispiel 1
myprogram 2>errorsfile
Oben führen wir ein Programm namens myprogram.
ausDer Dateideskriptor für Standardfehler ist 2.
Mit „2>“ leiten wir die Fehlerausgabe in eine Datei namens „errorfile“
umDadurch wird die Programmausgabe nicht mit Fehlern übersät.
Beispiel 2
Hier ist ein weiteres Beispiel, das die find-Anweisung –
verwendetfind . -name 'my*' 2>error.log
Mit dem „finden “ suchen wir nach dem „. ” aktuelles Verzeichnis für eine Datei mit „name “ beginnend mit „meine „
Beispiel 3
Sehen wir uns also ein komplexeres Beispiel an,
Serveradministratoren listen häufig Verzeichnisse auf und speichern sowohl Fehler- als auch Standardausgaben in einer Datei, die später verarbeitet werden kann. Hier ist der Befehl.
ls Documents ABC> dirlist 2>&1
Hier,
- der die Ausgabe einer Datei in die Eingabe einer anderen Datei schreibt. 2>&1 bedeutet, dass STDERR zum Ziel von STDOUT umleitet (das ist die Datei dirlist)
- Wir leiten die Fehlerausgabe zur Standardausgabe um, die wiederum zur Datei dirlist umgeleitet wird. Daher wird sowohl die Ausgabe in die Datei dirlist geschrieben
Zusammenfassung
- Jeder Datei in Linux ist ein entsprechender Dateideskriptor zugeordnet
- Die Tastatur ist das Standardeingabegerät, während Ihr Bildschirm das Standardausgabegerät ist
- „>“ ist der Ausgabeumleitungsoperator. „>>“ fügt die Ausgabe an eine bestehende Datei an
- „<“ ist der Eingabeumleitungsoperator
- „>&“leitet die Ausgabe einer Datei in eine andere um.
- Sie können den Fehler mit dem entsprechenden Dateideskriptor 2 umleiten.