Auf Linux-Systemen gibt es einige Möglichkeiten, die Befehlszeilenausgabe in Dateien zu speichern. Jeder arbeitet anders und speichert verschiedene Dinge.

Diese Befehle sind in allen Linux-Distributionen nützlich und können sogar auf Macs und BSD verwendet werden. Das einzige, worüber Sie nachdenken müssen, ist welcher Befehl am besten ist, um den Job zu erledigen.

Unix und Pipes

Bevor Sie in die Befehle eintauchen, sollten Sie ein wenig Geschichte wissen. Nichts davon ist spezifisch für Linux. Es kommt tatsächlich von dem alten Unix-Betriebssystem, das von Bell Labs entwickelt wurde. Linux, Mac und BSD sind Unix-ähnliche Betriebssysteme, die ihren Familienstammbaum auf Unix zurückverfolgen können.

Eine der wichtigsten Ideen hinter Unix bestand darin, alles aus kleinen Programmen zu machen, die man aneinanderreihen kann, um größere und komplexere Dinge zu tun. Deshalb können Sie Linux-Befehle kombinieren, damit sie zusammenarbeiten.

Es gibt eine Reihe von Möglichkeiten, Linux (und Unix) -Befehle zusammen zu ziehen und sie zusammenarbeiten zu lassen. Der am häufigsten anzutreffende ist der | Charakter. Der einzelne Pip, wie er genannt wird, übergibt die Ausgabe eines Befehls an einen anderen.

Sie werden auch auf den Operator |& stoßen. Er übergibt sowohl Ausgabe als auch Fehler an den nächsten Befehl.

Jede Methode in diesem Handbuch ist im Wesentlichen nur eine Möglichkeit für Unix-Befehle, Informationen weiterzugeben. Anstatt Daten zwischen Befehlen zu leiten, leiten sie Daten an die Ausgabe weiter. In diesem Fall ist diese Ausgabe eine Datei.

Konfiguration

Bevor Sie weitermachen, müssen Sie einige Dinge einrichten, um das Testen zu vereinfachen. Erstellen Sie als Root-Benutzer ein paar Ordner im Home-Verzeichnis Ihres normalen Benutzers. Ändern Sie ihre Berechtigungen, um sie unlesbar zu machen.

 sudo mkdir Fail1 sudo mkdir Fail2 sudo chmod 000 Fehler1 sudo chmod 000 Fail2 

Sie verwenden den Befehl du um zu testen, und es werden Fehler auftreten, wenn es auf diese Dateien trifft.

Ausgabe ohne Fehler umleiten

Die gebräuchlichste und einfachste Möglichkeit, die Ausgabe vom Terminal in eine Datei umzuleiten, besteht darin, die Operatoren > und >> . Sie leiten nur die Ausgabe an eine angegebene Textdatei weiter. Sie leiten keine Fehler um. Diese erscheinen immer noch im Terminal.

Der Operator > leitet die Ausgabe an eine Datei um und überschreibt den Inhalt dieser Datei.

 du -h ./*> ordnergröße.txt 

Im Gegensatz dazu funktioniert der Operator >> die gleiche Weise, hängt die Ausgabe jedoch an das Ende der Datei an.

 du -h ./* >> ordnergröße.txt 

Nur Fehler speichern

Diese nächsten zwei Operatoren sind das genaue Gegenteil der ersten. Sie speichern nur Fehler, während sie die Ausgabe im Terminal anzeigen.

Mit dem Operator 2> werden die Fehler von einem Befehl in eine Protokolldatei übertragen und überschrieben. Der reguläre Ausgang wird weiterhin im Terminal angezeigt.

 du -h ./* 2> Fehler.log 

Um dieselben Ergebnisse ohne Überschreiben zu erzielen, verwenden Sie 2>> .

 du -h ./* 2 >> errors.log 

Alles speichern, nichts zeigen

Wenn Sie daran interessiert sind, alles zu protokollieren, haben Sie die nächste Gruppe von Operatoren abgedeckt. Sie leiten alle Ausgaben an Dateien um, ohne etwas im Terminal anzuzeigen.

Der Operator &> leitet Ausgaben und Fehler in eine Datei um und überschreibt sie.

 du -h .** &> disk_use.log 

Wie die anderen, wenn Sie nicht überschreiben wollen, gibt es einen begleitenden Operator dafür.

 du -h ./* & >> disk_use.log 

Alles anzeigen, Ausgabe speichern

Sie können auch alles im Terminal anzeigen und nur die Ausgabe protokollieren. Sie können dies erreichen, indem Sie Ihren Befehl an den Befehl tee .

tee wirkt wie ein T-Splitter im Sanitärbereich. Es leitet den Fluss in zwei Richtungen. Seit dem | Der Operator übergibt nur die Ausgabe. Die resultierende Datei enthält nur Ausgaben und keine Fehler.

 du -h ./* | Abschlag.txt 

Standardmäßig überschreibt tee . Um die vorhandene Datei beizubehalten, fügen Sie das Flag -a .

 du -h ./* | Abschlag -a output.txt 

Zeige und speichere alles

Schließlich können Sie mit dem Operator |& an den Befehl tee umleiten, um alles anzuzeigen und auch zu protokollieren.

 du -h ./* | & tee-ausgabe.txt 

Um ein Überschreiben zu vermeiden, fügen Sie dem tee das Flag -a .

 du -h ./* | & tee -a ausgabe.txt 

Einpacken

Natürlich gibt es eine Menge Optionen, wenn es darum geht, die Ausgabe von Linux-Terminalbefehlen in eine Datei umzuleiten und zu speichern. Einige von ihnen sind nützlicher als andere, aber sie können alle in einer Vielzahl von Skripten verwendet werden, um den Informationsfluss auf möglichst Unix-Weise zu steuern.