Eingabe-Ausgabe-Umleitung in Linux/Unix-Beispielen

⚡ Intelligente Zusammenfassung

Die Umleitung in Linux und Unix ändert, wo ein Befehl Eingaben liest oder Ausgaben sendet (Swap).ping Tastatur und Bildschirm für Dateien oder Geräte, die Operatoren wie das Größer-als-Zeichen, das Kleiner-als-Zeichen und den Anfügeoperator verwenden.

  • 🔀 Weiterleitung: Die Umleitung ändert die Standardeingabe oder -ausgabe eines Befehls von Tastatur und Bildschirm auf eine Datei oder ein Gerät.
  • ➡️ Ausgang: Der Operator > schreibt die Ausgabe in eine Datei, während >> an eine bestehende Datei anhängt, ohne sie zu löschen.
  • ⬅️ Eingang: Der Operator < übergibt eine Datei als Standardeingabe an einen Befehl anstelle der Tastatur.
  • 🔢 Dateideskriptoren: Jede geöffnete Datei erhält eine Nummer: 0 für stdin, 1 für stdout und 2 für stderr.
  • ⚠️ Fehlerumleitung: Die Verwendung von 2> leitet Fehlermeldungen in eine separate Datei um, damit sie die normale Ausgabe nicht überladen.
  • 🔗 Kombinierte Streams: Die Syntax 2>&1 leitet Standardfehler an dasselbe Ziel wie Standardausgabe um.
  • 🤖 KI-Hilfe: KI-Assistenten und GitHub Copilot können Umleitungsbefehle und Shell-Skripte erstellen und erklären.

Ein-/Ausgabeumleitung in Linux und Unix mit Beispielen

Die Umleitung ist eine der nützlichsten Funktionen des Linux und der Unix-Shell, da sie es Ihnen ermöglicht, festzulegen, wohin ein Befehl seine Eingabe liest und seine Ausgabe sendet. Diese Seite erklärt Ausgabe-, Eingabe- und Fehlerumleitung anhand von Beispielen.

Was ist Umleitung?

Die Umleitung ist eine Funktion in Linux, mit der man beim Ausführen eines Befehls die Standard-Ein- und Ausgabegeräte ändern kann. Der grundlegende Arbeitsablauf eines jeden Linux-Befehl Es nimmt eine Eingabe entgegen und liefert eine Ausgabe.

  • Das Standardeingabegerät (stdin) ist die Tastatur.
  • Das Standardausgabegerät (stdout) ist der Bildschirm.

Durch Umleitung können die oben genannten Standardeingaben und -ausgaben geändert werden.

Ausgabeumleitung

Die folgende Grafik markiert den Beginn der Beispiele zur Ausgabeumleitung.

Grafik für die Überschrift des Abschnitts „Ausgabeumleitung“

Das Symbol '>' wird zur Umleitung der Ausgabe (STDOUT) verwendet.

Ejemplo:

ls -al > listings

Hier wird die Ausgabe des Befehls `ls -al` in die Datei „listings“ umgeleitet, anstatt auf dem Bildschirm angezeigt zu werden. Der Screenshot unten zeigt das Ergebnis.

Terminalanzeige, die die Ausgabe von ls -al anzeigt, die in die Datei listings umgeleitet wurde

Hinweis: Verwenden Sie den korrekten Dateinamen, wenn Sie die Befehlsausgabe in eine Datei umleiten. Existiert bereits eine Datei mit demselben Namen, löscht der umgeleitete Befehl deren Inhalt und überschreibt ihn anschließend.

Wenn Sie eine Datei nicht überschreiben, sondern ihr zusätzlichen Inhalt hinzufügen möchten, verwenden Sie den Operator „>>“. Der folgende Screenshot zeigt mit „>>“ angehängten Inhalt.

Terminalanzeige, die die Befehlsausgabe mit dem doppelten Größer-als-Operator an eine bestehende Datei anhängt.

Sie können die Standardausgabe nicht nur in Dateien, sondern auch auf Endgeräte umleiten.

$ cat music.mp3 > /dev/audio

Der Befehl cat liest die Datei music.mp3 und sendet die Ausgabe an /dev/audio, das Audiogerät. Wenn die Soundkonfiguration Ihres PCs korrekt ist, spielt dieser Befehl die Musikdatei ab.mp3.

Eingabeumleitung

Die folgende Grafik veranschaulicht die Eingabeumleitung.

Grafik für die Überschrift des Abschnitts „Eingabeumleitung“

Das Symbol '<' wird zur Eingabeumleitung (STDIN) verwendet.

Beispiel: Das Mailprogramm in Linux kann Ihnen dabei helfen, E-Mails vom Terminal aus zu versenden.

Sie können den Inhalt der E-Mail über die Tastatur, das Standardeingabegerät, eingeben. Wenn Sie jedoch eine Datei an die E-Mail anhängen möchten, können Sie den Eingabeumleitungsoperator im folgenden Format verwenden.

mail -s "Subject" to-address < Filename

Der folgende Screenshot zeigt, wie der Befehl mail eine Datei als Eingabe liest.

Mail-Befehl mit Eingabeumleitung zum Anhängen einer Datei an eine E-Mail

Dadurch wird die Datei an die E-Mail angehängt und an den Empfänger gesendet.

Die obigen Beispiele waren einfach. Betrachten wir nun einige fortgeschrittene Umleitungstechniken, die Dateideskriptoren verwenden.

Reichen Sie das Descriptoder (FD)

In Linux und Unix ist alles eine Datei. Normale Dateien, Verzeichnisse und sogar Geräte sind Dateien. Jeder Datei ist eine Nummer zugeordnet, der Dateideskriptor (FD) genannt wird.

Das folgende Diagramm zeigt die Standard-Streams und ihre Dateideskriptoren.

Diagramm der Standardeingabe-, -ausgabe- und -fehlerströme und ihrer Dateideskriptoren

Ihr Bildschirm verfügt ebenfalls über einen Dateideskriptor. Wird ein Programm ausgeführt, wird die Ausgabe an den Dateideskriptor des Bildschirms gesendet und auf Ihrem Monitor angezeigt. Würde die Ausgabe an den Dateideskriptor des Druckers gesendet, würde sie ausgedruckt.

Fehlerumleitung

Wenn Sie ein Programm oder einen Befehl im Terminal ausführen, sind immer drei Dateien geöffnet: Standardeingabe, Standardausgabe und Standardfehlerausgabe.

Diese Dateien sind immer vorhanden, wenn ein Programm ausgeführt wird. Wie bereits erwähnt, ist jeder dieser Dateien ein Dateideskriptor zugeordnet.

Reichen Sie das Reichen Sie das Descriptor
Standardeingabe STDIN 0
Standardausgabe STDOUT 1
Standardfehler STDERR 2

Standardmäßig wird der Fehlerstrom auf dem Bildschirm angezeigt. Die Fehlerumleitung leitet die Fehler in eine andere Datei um.

Warum Fehlerumleitung?

Fehlerumleitung ist eine der sehr beliebten Funktionen von Unix und Linux.

Erfahrene Unix-Nutzer wissen, dass viele Befehle eine Vielzahl von Fehlermeldungen ausgeben. Beispielsweise erhält man bei der Suche nach Dateien typischerweise die Fehlermeldung „…“. Erlaubnis Fehler werden oft als „verweigert“ angezeigt, was demjenigen, der nach einer bestimmten Datei sucht, in der Regel nicht weiterhilft. Beim Ausführen von Shell-Skripten möchte man häufig vermeiden, dass Fehlermeldungen die normale Programmausgabe verfälschen.

Die Lösung besteht darin, die Fehlermeldungen in eine Datei umzuleiten.

Beispiel 1

$ myprogram 2>errorsfile

Der folgende Screenshot zeigt diesen Befehl im Terminal.

Terminal, das mein Programm ausführt, wobei die Standardfehlerausgabe in die Fehlerdatei umgeleitet wird

Oben führen wir ein Programm namens „myprogram“ aus. Der Dateideskriptor für die Standardfehlerausgabe ist 2. Mit „2>“ leiten wir die Fehlerausgabe in eine Datei namens „errorsfile“ um. Dadurch wird die Programmausgabe nicht mit Fehlermeldungen überladen.

Beispiel 2

Hier ist ein weiteres Beispiel, das die find-Anweisung verwendet.

find . -name 'my*' 2>error.log

Mit dem Befehl find suchen wir im aktuellen Verzeichnis “.” nach einer Datei, deren Name mit “my” beginnt, und senden alle Fehler an error.log.

Beispiel 3: Betrachten wir ein komplexeres Beispiel.

Serveradministratoren listen häufig Verzeichnisse auf und speichern sowohl Fehler- als auch Standardausgabe in einer Datei, die später verarbeitet werden kann. Hier ist der Befehl.

ls Documents ABC> dirlist 2>&1

Das untenstehende Diagramm zeigt, wie beide Datenströme in einer Datei erfasst werden.

Diagramm der Standardausgabe und der Standardfehlerausgabe, die beide in die Datei dirlist umgeleitet werden.

Hier:

  • 2>&1 bedeutet, dass STDERR an dasselbe Ziel wie STDOUT (das Dateiverzeichnis) umgeleitet wird.
  • Die Fehlerausgabe wird an die Standardausgabe umgeleitet, die wiederum in die Datei dirlist umgeleitet wird. Somit werden beide Ausgabeströme in die Datei dirlist geschrieben.

Das folgende Diagramm veranschaulicht, wie Eingabe, Ausgabe und Fehlerumleitung zusammenwirken.

Diagramm zur Zusammenfassung von Eingabe, Ausgabe und Fehlerumleitung in Linux und Unix

Häufig gestellte Fragen

A Rohr Das Symbol (|) leitet die Ausgabe eines Befehls direkt als Eingabe an einen anderen Befehl weiter. Die Umleitung hingegen verbindet einen Befehl mit einer Datei oder einem Gerät, um Ausgaben dorthin zu schreiben oder Eingaben daraus zu lesen. Pipes verknüpfen Befehle; die Umleitung verknüpft einen Befehl mit einer Datei.

Der Operator > schreibt die Ausgabe eines Befehls in eine Datei und überschreibt dabei den vorhandenen Inhalt. Der Operator >> hängt die Ausgabe stattdessen an das Ende der Datei an.ping Was bereits vorhanden ist. Verwenden Sie >> immer dann, wenn Sie einer Datei etwas hinzufügen möchten, anstatt sie zu überschreiben.

Die Datei `/dev/null` ist eine spezielle Datei, die alle darin geschriebenen Daten verwirft. Fügt man einem Befehl `2>/dev/null` hinzu, werden dessen Fehlermeldungen in diese Datei umgeleitet und stillschweigend verworfen, sodass nur die normale Ausgabe auf dem Bildschirm erscheint. Dies ist eine gängige Methode, um unerwünschte Fehlermeldungen auszublenden.

Der Befehl `tee` liest von der Standardeingabe und gibt die Daten gleichzeitig auf dem Bildschirm und in einer oder mehreren Dateien aus, beispielsweise `ls -al | tee listing.txt`. Er ermöglicht es, die Ausgabe eines Befehls in einer Datei zu speichern und sie gleichzeitig auf dem Bildschirm anzuzeigen.

Ein Here-Dokument verwendet den Operator <<, um mehrere Zeilen Text als Eingabe an einen Befehl zu übergeben, wobei die Eingabe an einem von Ihnen gewählten Markierungswort endet. Dies ist in Shell-Skripten praktisch, um mehrzeilige Eingaben, wie beispielsweise den Text einer E-Mail, ohne separate Datei zu übergeben.

Verwenden Sie die Syntax `2>&1` nach der Ausgabeumleitung, z. B. `command > file 2>&1`, damit die Standardfehlerausgabe in die Datei umgeleitet wird. In modernen Bash-Versionen bewirkt der Kurzbefehl `&> file` dasselbe. Die Reihenfolge ist wichtig: Platzieren Sie `2>&1` nach der Ausgabeumleitung.

KI-Assistenten können eine Anfrage in natürlicher Sprache in den korrekten Umleitungsbefehl umwandeln, die Funktion von Operatoren wie 2>&1 oder &> erklären und Fehler vor der Ausführung erkennen. Tools für maschinelles Lernen durchsuchen zudem umgeleitete Protokoll- und Fehlerdateien, um Anomalien aufzudecken, die bei einer manuellen Überprüfung übersehen würden.

Ja. GitHub-Copilot kann Befehle und Skripte generieren, die Eingaben, Ausgaben und Fehler anhand eines kurzen Kommentars, der das Ziel beschreibt, umleiten und diese während der Eingabe vervollständigen. RevÜberprüfen Sie alle vorgeschlagenen Befehle an Ihren Dateien, insbesondere solche, die > verwenden und vorhandene Daten überschreiben.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: