Skip to content
On this page

Eingabe und Ausgabe in Linux

In Linux sind Eingabe und Ausgabe wesentliche Konzepte, die es Ihnen ermöglichen, mit dem System zu interagieren und Daten zu verarbeiten. Das Verständnis, wie Eingabe und Ausgabe in der Linux-Umgebung funktionieren, ist entscheidend für eine effektive Arbeit im Terminal.

Standard Input, Output und Fehler

In Linux gibt es drei Standardstreams: STDIN (Standard Input), STDOUT (Standard Output) und STDERR (Standard Error). Diese Streams werden verwendet, um Eingabe, Ausgabe und Fehlermeldungen beim Ausführen von Programmen und Befehlen zu verarbeiten.

  • STDIN ist der Standard-Eingabestream, der Daten von der Tastatur oder einem anderen Programm liest. Die Nummer 0 repräsentiert den STDIN-Stream.
  • STDOUT ist der Standard-Ausgabestream, der die Ausgabe eines Programms oder Befehls anzeigt. Die Nummer 1 repräsentiert den STDOUT-Stream.
  • STDERR ist der Standard-Fehlerstream, der Fehlermeldungen und diagnostische Informationen anzeigt. Die Nummer 2 repräsentiert den STDERR-Stream.

Standardmäßig ist STDIN mit der Tastatur verbunden, und STDOUT und STDERR sind mit dem Terminal verbunden. Das bedeutet, dass wenn Sie einen Befehl in der Shell ausführen, die Eingabe von der Tastatur stammt und die Ausgabe sowie Fehlermeldungen auf dem Terminal angezeigt werden.

Eine gute Praxis ist es, Fehlermeldungen von regulärer Ausgabe zu trennen, damit Sie Fehler leicht identifizieren und behandeln können. Einige Programme halten sich jedoch möglicherweise nicht an diese Konvention, und Fehlermeldungen können mit regulärer Ausgabe vermischt sein.

Eingabeumleitung

In Linux ermöglicht die Eingabeumleitung die Steuerung, woher die Eingabe stammt. Standardmäßig ist bei der Ausführung eines Befehls in der Shell STDIN mit der Tastatur verbunden.

Die Eingabeumleitung ermöglicht es, zu ändern, woher der Befehl seine Eingabe liest. Sie können die Eingabe umleiten, sodass sie aus einer Datei und nicht aus der Tastatur stammt.

Um die Eingabe aus einer Datei umzuleiten, verwenden Sie das kleiner-als-Symbol (<) gefolgt vom Dateinamen. Zum Beispiel, um die Eingabe aus einer Datei namens input.txt zu lesen, würden Sie den folgenden Befehl verwenden:

sh
command < input.txt

Hier ist ein Beispiel, wie die Eingabeumleitung in realen Szenarien funktioniert. Angenommen, Sie haben eine Datei namens data.txt, die eine Liste von Namen enthält, und Sie möchten die Anzahl der Namen in der Datei mit dem Befehl wc zählen. Anstatt jeden Namen manuell in das Terminal einzugeben, können Sie die Eingabe aus der Datei umleiten. Durch Ausführen des Befehls wc -l < data.txt wird der wc-Befehl die Inhalte von data.txt als Eingabe lesen und die Anzahl der Zeilen zählen, was die Anzahl der Namen in der Datei darstellt. Auf diese Weise sparen Sie Zeit und Mühe, indem Sie die Namen nicht manuell eingeben müssen. Der Inhalt der Datei data.txt könnte wie folgt aussehen:

John Doe
Jane Smith
Michael Johnson
Emily Brown
William Davis

In diesem Fall enthält die Datei eine Liste von 5 Namen, jeweils in einer separaten Zeile. Durch Umleiten des Eingangs von der Datei wird der wc-Befehl die Anzahl der Zeilen in der Datei zählen und das Ergebnis anzeigen.

Das doppelte kleiner-als-Symbol (<<) wird für ein Here-Dokument verwendet, das es Ihnen ermöglicht, Eingaben interaktiv an einen Befehl zu übergeben. Zum Beispiel:

sh
Befehl << EOF
Dies sind einige Eingaben.
EOF

In diesem Fall werden die Eingaben interaktiv zwischen den Markierungen << und EOF bereitgestellt. Dies kann nützlich sein, wenn Sie mehrere Zeilen Eingaben an einen Befehl übergeben müssen.

Ausgaberichtung

Die Ausgaberichtung ermöglicht es Ihnen, zu ändern, wohin der Befehl seine Ausgabe sendet. Sie können die Ausgabe umleiten, damit sie anstatt zum Terminal in eine Datei geht.

Um die Ausgabe in eine Datei umzuleiten, verwenden Sie das Größer-als-Symbol (>), gefolgt vom Dateinamen. Zum Beispiel, um die Ausgabe in eine Datei namens output.txt umzuleiten, würden Sie den folgenden Befehl verwenden:

sh
Befehl > output.txt

Hinweis: > ist eine Vereinfachung von 1>, was STDOUT in eine Datei umleitet. Wenn Sie STDERR in eine Datei umleiten möchten, können Sie 2> verwenden.

Wenn Sie die Ausgabe an eine vorhandene Datei anhängen möchten, anstatt sie zu überschreiben, können Sie das doppelte Größer-als-Symbol (>>) anstelle des einfachen Größer-als-Symbols (>) verwenden. Zum Beispiel:

sh
Befehl >> output.txt

Das kaufmännische Und-Symbol (&) bezieht sich auf einen Dateideskriptor. Im Kontext der Ausgaberichtung repräsentiert 1 STDOUT und 2 STDERR. Durch Kombinieren der Dateideskriptoren mit den Umleitungszeichen können Sie sowohl STDOUT als auch STDERR in dieselbe Datei umleiten. Zum Beispiel:

sh
Befehl > output.txt 2>&1

Lassen Sie uns den Befehl aufschlüsseln:

  • Befehl ist der Befehl, den Sie ausführen möchten.
  • > (gleichbedeutend mit 1>) leitet den STDOUT-Strom zur Datei output.txt um.
  • 2> leitet den STDERR-Stream irgendwohin um.
  • &1 bezieht sich auf den Dateideskriptor 1, der STDOUT ist.

Durch Kombinieren von 2> und &1 leiten Sie STDERR an denselben Speicherort wie STDOUT um, der in diesem Fall die Datei output.txt ist.

Kombination von Eingabe- und Ausgaberichtung

Sie können die Eingabe- und Ausgaberichtung kombinieren, um gleichzeitig aus einer Datei zu lesen und in eine Datei zu schreiben. Zum Beispiel:

sh
command < input.txt > output.txt

Durch die Verwendung von Eingabe- und Ausgaberichtung können Sie steuern, woher die Eingabe stammt und wohin die Ausgabe geht, was Ihre Shell-Befehle flexibler und leistungsfähiger macht.

Verwenden von Pipes zum Verbinden von Befehlen

Pipes sind ein leistungsstarkes Feature in Linux, das es Ihnen ermöglicht, mehrere Befehle zu verbinden und komplexe Befehlssequenzen zu erstellen. Die Verwendung von Pipes kann Ihre Produktivität und Effizienz erheblich steigern, wenn Sie in der Befehlszeile arbeiten.

Ein Pipe wird durch das senkrechte Strichsymbol | dargestellt. Es ermöglicht die Umleitung der Ausgabe eines Befehls als Eingabe für einen anderen Befehl. Dadurch können Sie mehrere Befehle miteinander verketten und Operationen auf den zwischen ihnen fließenden Daten ausführen.

Angenommen, Sie haben ein Verzeichnis mit einer großen Anzahl von Textdateien und möchten die Wortanzahl für jede Datei finden. Sie können den Befehl ls verwenden, um alle Dateien im Verzeichnis aufzulisten, und dann die Ausgabe an den Befehl wc weiterleiten, um die Wörter zu zählen. Der Befehl würde so aussehen:

sh
ls | wc -w

In diesem Beispiel listet der Befehl ls alle Dateien im Verzeichnis auf und das Pipe-Symbol | leitet die Ausgabe an den Befehl wc weiter. Der Befehl wc zählt dann die Wörter in der Eingabe und zeigt das Ergebnis an.

Pipes können mit jedem Befehl verwendet werden, der Ausgaben erzeugt. Sie ermöglichen es Ihnen, leistungsstarke Kombinationen von Befehlen zu erstellen und komplexe Aufgaben mühelos auszuführen.

Eine weitere häufige Anwendung für Pipes ist das Filtern und Verarbeiten von Text. Zum Beispiel können Sie das grep-Kommando verwenden, um nach einem bestimmten Muster in einer Datei zu suchen, und dann die Ausgabe an das sort-Kommando weiterleiten, um die Zeilen zu sortieren. Die resultierende Ausgabe kann dann in eine neue Datei umgeleitet oder auf dem Bildschirm angezeigt werden.

Hier ist ein Beispiel:

sh
grep 'error' log.txt | sort > errors.txt

In diesem Beispiel sucht das grep-Kommando nach Zeilen, die das Wort error in der Datei log.txt enthalten, und der Pipe leitet die Ausgabe an das sort-Kommando weiter. Das sort-Kommando sortiert dann die Zeilen alphabetisch und das >-Symbol leitet die Ausgabe in die Datei errors.txt.

Die Verwendung von Pipes zum Verbinden von Befehlen ermöglicht es Ihnen, komplexe Befehlssequenzen zu erstellen und wiederkehrende Aufgaben zu automatisieren. Es gibt Ihnen die Flexibilität, Operationen auf der Ausgabe eines Befehls durchzuführen, bevor Sie sie an den nächsten Befehl weitergeben, was es Ihnen ermöglicht, leistungsstarke Datenpipelines zu erstellen.

Fazit

Eingabe und Ausgabe sind grundlegende Konzepte in Linux, die es Ihnen ermöglichen, mit dem System zu interagieren und Daten zu verarbeiten. Indem Sie verstehen, wie Eingabe- und Ausgaberichtlinien, Pipes und Streams funktionieren, können Sie effektiver im Terminal arbeiten und eine Vielzahl von Aufgaben effizient ausführen.