Einer der wichtigsten und interessante Themen unter Linux-Administration ist die E/A-Umleitung. Diese Funktion der Befehlszeile ermöglicht es Ihnen, die Eingabe und/oder Ausgabe von Befehlen aus und/oder in Dateien umzuleiten oder mehrere Befehle mithilfe von Pipes zu einem sogenannten „Befehlspipeline”.
Alle Befehle, die wir ausführen, erzeugen grundsätzlich zwei Arten von Ausgaben:
In Linux und anderen Unix-ähnlichen Systemen gibt es drei unten genannte Standarddateien, die auch von der Shell anhand von Dateideskriptornummern identifiziert werden:
Daher können Sie mit der E/A-Umleitung die Eingabequelle eines Befehls ändern sowie den Ort, an den seine Ausgabe- und Fehlermeldungen gesendet werden. Und dies wird ermöglicht durch die “ und
“>”
Umleitungsoperatoren.
Sie können die Standardausgabe wie im folgenden Beispiel umleiten, hier möchten wir die Ausgabe der oberstes Kommando zur späteren Kontrolle:
$ top - Mrd. 5 >top.log.
Wo die Flaggen:
-B
– ermöglicht oben im Batch-Modus auszuführen, sodass Sie die Ausgabe in eine Datei oder einen anderen Befehl umleiten können.-n
– gibt die Anzahl der Iterationen an, bevor der Befehl beendet wird.Sie können den Inhalt von top.log
Datei mit Katzenbefehl wie folgt:
$ Katze top.log.
Um die Ausgabe eines Befehls anzuhängen, verwenden Sie die “>>”
Operator.
Um zum Beispiel die Ausgabe von anzuhängen oberstes Kommando oben im top.log Datei insbesondere innerhalb eines Skripts (oder auf der Kommandozeile), geben Sie die folgende Zeile ein:
$ top - Mrd. 5 >>top.log.
Notiz: Unter Verwendung der Dateideskriptornummer ist der obige Ausgabeumleitungsbefehl derselbe wie:
$ top - Mrd. 5 1>top.log.
Um den Standardfehler eines Befehls umzuleiten, müssen Sie die Dateideskriptornummer explizit angeben, 2
damit die Shell versteht, was Sie tun möchten.
Zum Beispiel die ls Befehl unten wird einen Fehler erzeugen, wenn es 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.
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 zuerst die Ausgabe des sendet ls Befehl zur Datei ls-error.log (mit >ls-error.log
) und schreibt dann alle Fehlermeldungen in den Dateideskriptor 2 (Standardausgabe), die in die Datei umgeleitet wurde ls-error.log (mit 2>&1
). Dies bedeutet, dass der Standardfehler auch als Standardausgabe an dieselbe Datei gesendet wird.
2. Die zweite und direkte Methode ist:
$ ls -l /root/ &>ls-error.log.
Sie können auch Standardausgabe und Standardfehler wie folgt an eine einzelne Datei anhängen:
$ ls -l /root/ &>>ls-error.log.
Die meisten, wenn nicht alle Befehle erhalten ihre Eingabe über die Standardeingabe, und standardmäßig ist die Standardeingabe an die Tastatur angeschlossen.
Um die Standardeingabe von einer anderen Datei als der Tastatur umzuleiten, verwenden Sie die “ Betreiber wie folgt:
$ KatzeSo leiten Sie die Standardeingabe/-ausgabe in eine Datei um
Sie können gleichzeitig eine Standardeingabe und eine Standardausgabeumleitung durchführen, indem Sie verwenden Sortierbefehl wie nachstehend:
$ sortierensort.ausgabe. 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, um nützliche Befehlszeilen für komplexe Operationen zu erstellen.
Der folgende Befehl wird beispielsweise listet die fünf am häufigsten geänderten Dateien auf.
$ ls -lt | Kopf -n 5Hier die Optionen:
-l
– ermöglicht langes Listing-Format-T
– nach Änderungszeit sortieren mit den neuesten Dateien werden zuerst angezeigt-n
– gibt die Anzahl der anzuzeigenden Kopfzeilen anWichtige Befehle zum Bau von Pipelines
Hier werden wir kurz zwei wichtige Befehle zum Erstellen von Befehlspipelines besprechen:
xargs die verwendet wird, um Befehlszeilen aus der Standardeingabe zu erstellen und auszuführen. Unten ist ein Beispiel für eine Pipeline, die verwendet xargs, dieser Befehl wird verwendet, um eine Datei in mehrere Verzeichnisse unter Linux kopieren:
$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh.Und die Optionen:
-n 1
– weist xargs an, höchstens ein Argument pro Befehlszeile zu verwenden und an die zu senden cp-Befehlcp
– kopiert die Datei-v
– zeigt den Fortschritt des Kopierbefehls an.Für weitere Nutzungsoptionen und Informationen lesen Sie die xargs man-Seite:
$ man xargsEIN tee Der Befehl liest von der Standardeingabe und schreibt in die Standardausgabe und Dateien. Wir können zeigen, wie tee funktioniert wie folgt:
$ echo "Testen, wie der Befehl tee funktioniert" | T-Datei1Datei- oder Textfilter werden häufig mit Rohren für effektive Linux-Dateioperationen, um Informationen auf leistungsfähige Weise zu verarbeiten, z. B. um die Ausgabe von Befehlen umzustrukturieren (dies kann für Generierung nützlicher Linux-Berichte), Ändern von Text in Dateien und einigen anderen Aufgaben der Linux-Systemverwaltung.
Um mehr über Linux-Filter und -Pipes zu erfahren, lesen Sie diesen Artikel Finden Sie die Top 10 IP-Adressen, die auf Apache Server zugreifen, zeigt ein nützliches Beispiel für die Verwendung von Filtern und Pipes.
In diesem Artikel haben wir die Grundlagen der E/A-Umleitung unter Linux erläutert. Denken Sie daran, Ihre Gedanken über den Feedback-Bereich unten mitzuteilen.