Website-Suche

Erfahren Sie, wie die Linux-E/A-Umleitung (Eingabe/Ausgabe) funktioniert


Eines der wichtigsten und interessantesten Themen bei der Linux-Administration ist die I/O-Umleitung. Mit dieser Funktion der Befehlszeile können Sie die Eingabe und/oder Ausgabe von Befehlen von und/oder in Dateien umleiten oder mehrere Befehle mithilfe von Pipes zu einer sogenannten „Befehlspipeline“ zusammenfügen. .

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

  1. das Befehlsergebnis – Daten, die das Programm erzeugen soll, und
  2. Der Programmstatus und Fehlermeldungen, die einen Benutzer über die Programmausführungsdetails informieren.

Unter Linux und anderen Unix-ähnlichen Systemen gibt es drei unten genannte Standarddateien, die auch von der Shell anhand von Dateideskriptornummern 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 wird an den Bildschirm angehängt und alle Programme senden ihre Ergebnisse an diese Datei und
  3. stderr oder 2 – Programme senden Status-/Fehlermeldungen an diese Datei, die auch an den Bildschirm angehängt wird.

Daher ermöglicht Ihnen die E/A-Umleitung, die Eingabequelle eines Befehls sowie den Ort, an den seine Ausgabe und Fehlermeldungen gesendet werden, zu ändern. Und dies wird durch die Umleitungsoperatoren “< ” und “> ” ermöglicht.

So leiten Sie die Standardausgabe unter Linux in eine Datei um

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

top -bn 5 >top.log

Wo die Flaggen:

  1. -b – ermöglicht die Ausführung von top im Batch-Modus, sodass Sie die 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 Befehl cat wie folgt anzeigen:

cat top.log

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

Um beispielsweise die Ausgabe des obigen Befehls top in die Datei top.log, insbesondere innerhalb eines Skripts (oder in der Befehlszeile), anzuhängen, geben Sie die folgende Zeile ein:

top -bn 5 >>top.log

Hinweis: Unter Verwendung der Dateideskriptornummer ist der obige Ausgabeumleitungsbefehl derselbe wie:

top -bn 5 1>top.log

So leiten Sie den Standardfehler unter Linux in eine Datei um

Um den Standardfehler eines Befehls umzuleiten, müssen Sie explizit die Dateideskriptornummer 2 angeben, damit die Shell versteht, was Sie tun möchten.

Beispielsweise führt der folgende ls-Befehl zu einem Fehler, 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 

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

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

So leiten Sie die Standardausgabe/den Fehler in eine Datei um

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

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

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

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

2. Die zweite und direkte Methode ist:

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

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

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

So leiten Sie die Standardeingabe in eine Datei um

Die meisten, wenn nicht alle Befehle erhalten ihre Eingabe über die Standardeingabe, und standardmäßig ist die Standardeingabe an die Tastatur angeschlossen.

Um Standardeingaben aus einer anderen Datei als der Tastatur umzuleiten, verwenden Sie den Operator “< ” wie folgt:

cat <domains.list 

So leiten Sie die Standardeingabe/-ausgabe in eine Datei um

Mit dem folgenden Sortierbefehl können Sie gleichzeitig eine Standardeingabe- und Standardausgabeumleitung durchführen:

sort <domains.list >sort.output

So verwenden Sie die E/A-Umleitung mithilfe von Pipes

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

Der folgende Befehl listet beispielsweise die fünf zuletzt geänderten Dateien auf.

ls -lt | head -n 5 

Hier die Optionen:

  1. -l – aktiviert das lange Listenformat
  2. -t – Sortierung nach Änderungszeit, wobei die neuesten Dateien zuerst angezeigt werden
  3. -n – gibt die Anzahl der anzuzeigenden Kopfzeilen an

Wichtige Befehle zum Bau von Pipelines

Hier werden wir kurz zwei wichtige Befehle zum Erstellen von Befehlspipelines besprechen:

xargs, das zum Erstellen und Ausführen von Befehlszeilen aus der Standardeingabe verwendet wird. Unten sehen Sie ein Beispiel für eine Pipeline, die xargs verwendet. Dieser Befehl wird verwendet, um eine Datei in mehrere Verzeichnisse unter Linux zu kopieren:

echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

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. -v – zeigt den Fortschritt des Kopierbefehls an.

Weitere Nutzungsoptionen und Informationen finden Sie auf der Manpage zu xargs:

man xargs 

Ein tee-Befehl liest von der Standardeingabe und schreibt in die Standardausgabe und Dateien. Wie tee funktioniert, können wir wie folgt demonstrieren:

echo "Testing how tee command works" | tee file1 

Datei- oder Textfilter werden häufig mit Pipes für effektive Linux-Dateioperationen verwendet, um Informationen auf leistungsstarke Weise zu verarbeiten, z. B. um die Ausgabe von Befehlen umzustrukturieren (dies kann für die Generierung nützlicher Linux-Berichte von entscheidender Bedeutung sein), Text in Dateien zu ändern und verschiedene andere Linux-Systemverwaltungen durchzuführen Aufgaben.

Um mehr über Linux-Filter und Pipes zu erfahren, lesen Sie diesen Artikel „Find Top 10 IP Addresses Accessing Apache Server“, der ein nützliches Beispiel für die Verwendung von Filtern und Pipes zeigt.

In diesem Artikel haben wir die Grundlagen der E/A-Umleitung unter Linux erklärt. Denken Sie daran, Ihre Gedanken über den Feedback-Bereich unten mitzuteilen.