Lernen Sie die Grundlagen der Funktionsweise der Linux-E/A-Umleitung

Einer der wichtigsten und interessantesten Themen im Zusammenhang mit der Linux-Administration ist die E/A-Umleitung. Diese Funktion der Kommandozeile ermöglicht es Ihnen, die Eingabe und/oder Ausgabe von Befehlen von und/oder zu Dateien umzuleiten oder mehrere Befehle mithilfe von Pipes zu kombinieren, um das, was als „Befehls-Pipeline“ bekannt ist, zu bilden.

Alle Befehle, die wir ausführen, erzeugen grundsätzlich zwei Arten von Ausgaben:

  1. das Befehlsergebnis – Daten, die das Programm produzieren soll, und
  2. Programmstatus und Fehlermeldungen, die einem Benutzer Einzelheiten zur Programmausführung mitteilen.

In Linux und anderen unixartigen Systemen gibt es drei Standarddateien, die unten aufgeführt sind und auch von der Shell mithilfe von Dateideskriptor-Nummern identifiziert werden:

  1. stdin oder 0 – es ist mit der Tastatur verbunden, die meisten Programme lesen Eingaben aus dieser Datei.
  2. stdout oder 1 – es ist mit dem Bildschirm verbunden, und alle Programme senden ihre Ergebnisse an diese Datei und
  3. stderr oder 2 – Programme senden Status-/Fehlermeldungen an diese Datei, die auch mit dem Bildschirm verbunden ist.

Daher ermöglicht die E/A-Umleitung es Ihnen, die Eingabequelle eines Befehls sowie den Zielort seiner Ausgabe und Fehlermeldungen zu ändern. Und dies wird durch die „<“ und „>“ Umleitungsoperatoren möglich gemacht.

So leiten Sie Standardausgabe in eine Datei in Linux um

Sie können die Standardausgabe wie im folgenden Beispiel umleiten, hier möchten wir die Ausgabe des Befehls top zur späteren Überprüfung speichern:

$ top -bn 5 >top.log

Wo die Flags:

  1. -b – ermöglicht es top, im Batch-Modus zu laufen, damit Sie seine Ausgabe in eine Datei oder einen anderen Befehl umleiten können.
  2. -n – gibt die Anzahl der Iterationen an, bevor der Befehl beendet wird.

Sie können den Inhalt der Datei top.log mit dem cat-Befehl wie folgt anzeigen:

$ cat top.log

Um die Ausgabe eines Befehls anzuhängen, verwenden Sie den Operator “>>”.

Zum Beispiel, um die Ausgabe des Befehls top oben in der Datei top.log besonders in einem Skript (oder auf der Befehlszeile) anzuhängen, geben Sie die folgende Zeile ein:

$ top -bn 5 >>top.log

Hinweis: Durch Verwendung der Dateideskriptor-Nummer ist der Ausgabeumleitbefehl oben derselbe wie:

$ top -bn 5 1>top.log

So leiten Sie Standardfehler in Linux in eine Datei um

Um den Standardfehler eines Befehls umzuleiten, müssen Sie explizit die Dateideskriptor-Nummer 2 angeben, damit die Shell versteht, was Sie versuchen zu tun.

Zum Beispiel wird der ls-Befehl unten einen Fehler produzieren, wenn er von einem normalen Systembenutzer ohne Root-Rechte ausgeführt wird:

$ ls -l /root/

Sie können den Standardfehler wie folgt in eine Datei umleiten:

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 
Redirect Standard Error to File

Um den Standardfehler anzuhängen, verwenden Sie den folgenden Befehl:

$ ls -l /root/ 2>>ls-error.log

Wie man die Standardausgabe/Fehler in eine Datei umleitet

Es ist auch möglich, die gesamte Ausgabe eines Befehls (sowohl Standardausgabe als auch Standardfehler) in eine einzelne Datei zu erfassen. Dies kann auf zwei mögliche Arten erfolgen, indem die Dateideskriptornummern angegeben werden:

1. Die erste Methode ist eine relativ alte Methode, die wie folgt funktioniert:

$ ls -l /root/ >ls-error.log 2>&1

Der obige Befehl bedeutet, dass die Shell zuerst die Ausgabe des ls-Befehls in die Datei ls-error.log sendet (unter Verwendung von >ls-error.log), und dann alle Fehlermeldungen in den Dateideskriptor 2 (Standardausgabe) umleitet, der in die Datei ls-error.log (unter Verwendung von 2>&1) umgeleitet wurde. Dies bedeutet, dass der Standardfehler auch in dieselbe Datei wie die Standardausgabe gesendet wird.

2. Die zweite und direkte Methode ist:

$ ls -l /root/ &>ls-error.log

Sie können auch die Standardausgabe und den Standardfehler an eine einzelne Datei anhängen, wie folgt:

$ ls -l /root/ &>>ls-error.log

So leiten Sie die Standardausgabe in eine Datei um

Die meisten, wenn nicht alle Befehle erhalten ihre Eingabe von der Standardtasteingabe, und standardmäßig ist die Standardtasteingabe mit der Tastatur verbunden.

Um die Standardeingabe von einer Datei statt der Tastatur umzuleiten, verwenden Sie den Operator „"<" wie folgt:

$ cat <domains.list 
Redirect Standard Input to File

Wie man die Standard Ein-/Ausgabe in eine Datei umleitet

Sie können die Standard Ein-/Ausgabe Umleitung gleichzeitig mit dem sort Befehl wie folgt durchführen:

$ sort <domains.list >sort.output

Wie man die Ein-/Ausgabe-Umleitung mit Pipes verwendet

Um die Ausgabe eines Befehls als Eingabe für einen anderen umzuleiten, können Sie Pipes verwenden. Dies ist ein leistungsstolles Mittel zum Erstellen nützlicher Befehlszeilen für komplexe Operationen.

Zum Beispiel wird der folgende Befehl die fünf zuletzt geänderten Dateien auflisten.

$ ls -lt | head -n 5 

Hier sind die Optionen:

  1. -l – aktiviert das lange Listenformat
  2. -tnach Änderungszeit sortieren, die neuesten Dateien werden zuerst angezeigt
  3. -n – gibt die Anzahl der Kopfzeilen an, die angezeigt werden sollen

Wichtige Befehle zum Erstellen von Pipelines

Hier werden wir kurz zwei wichtige Befehle zur Erstellung von Befehlspipelines überprüfen, und zwar:

xargs, das verwendet wird, um Befehlszeilen aus der Standardeingabe zu erstellen und auszuführen. Im Folgenden ein Beispiel für eine Pipeline, die xargs verwendet, um eine Datei in mehrere Verzeichnisse in Linux zu kopieren:

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
Copy Files to Multiple Directories

Und die Optionen:

  1. -n 1 – weist xargs an, höchstens ein Argument pro Befehlszeile zu verwenden und an den cp-Befehl zu senden
  2. cp – kopiert die Datei
  3. -vzeigt den Fortschritt des Kopiervorgangs an.

Für weitere Verwendungsoptionen und Informationen lesen Sie die xargs man page:

$ man xargs 

A tee command reads from standard input and writes to standard output and files. We can demonstrate how tee works as follows:

$ echo "Testing how tee command works" | tee file1 
tee Command Example

Datei- oder Textfilter werden häufig mit Pipes für effektive Linux-Dateioperationen verwendet, um Informationen auf leistungsstarke Weise zu verarbeiten, wie beispielsweise die Umstrukturierung der Ausgabe von Befehlen (dies kann für die Generierung nützlicher Linux-Berichte entscheidend sein), die Änderung von Text in Dateien sowie mehrere andere Aufgaben der Linux-Systemverwaltung.

Lesen Sie diesen Artikel, um mehr über Linux-Filter und Pipes zu erfahren: Finden Sie die Top 10 IP-Adressen, die auf den Apache-Server zugreifen, der ein nützliches Beispiel für die Verwendung von Filtern und Pipes zeigt.

In diesem Artikel haben wir die Grundlagen der Ein- und Ausgaberichtlinien in Linux erklärt. Teilen Sie bitte Ihre Gedanken im Feedbackbereich unten.

Source:
https://www.tecmint.com/linux-io-input-output-redirection-operators/