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: