GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Arbeiten mit Eingabeausgabe und Fehlerumleitung in Linux

Jeder Prozess in Linux wird mit drei offenen Dateien bereitgestellt (normalerweise Dateideskriptor genannt). Diese Dateien sind die standardmäßigen Eingabe-, Ausgabe- und Fehlerdateien. Standardmäßig:

  • Standardeingabe ist die Tastatur, die als Datei abstrahiert wurde, um das Schreiben von Shell-Skripten zu erleichtern.
  • Standardausgabe ist das Shell-Fenster oder das Terminal, von dem aus das Skript ausgeführt wird, abstrahiert als Datei, um das Schreiben von Skripten und Programmen wieder einfacher zu machen
  • Standardfehler ist dasselbe wie die Standardausgabe:das Shell-Fenster oder Terminal, von dem aus das Skript ausgeführt wird.

Ein Dateideskriptor ist einfach eine Zahl, die sich auf eine geöffnete Datei bezieht. Standardmäßig ist der Dateideskriptor 0 (Null) bezieht sich auf die Standardeingabe &wird oft als stdin abgekürzt . Dateideskriptor 1 bezieht sich auf die Standardausgabe (stdout ) und Dateideskriptor 2 bezieht sich auf Standardfehler (stderr ). Diese Nummern sind wichtig, wenn Sie auf eine bestimmte Datei zugreifen müssen, insbesondere wenn Sie diese Dateien an andere Speicherorte umleiten möchten. Die Nummern der Dateideskriptoren steigen von Null an.

Standardausgabe umleiten

Syntax zum Umleiten der Ausgabe eines Befehls in eine Datei.

# Befehlsoptionen_und_Argumente> Ausgabedatei

Beispiel:

[email protected]:~$ cat /proc/cpuinfo> command.txt

Wir können die Daten sehen, die mit dem Befehl more :

auf dem Bildschirm erschienen wären
[email protected]:~$ more command.txt Prozessor     :0vendor_id     :GenuineIntelcpu family     :6model         :37 model name     :Intel(R) Core(TM) i3 CPU       M 370  @ 2.40GHzstepping     :5microcode   :0 :6144 KBphysische ID   :0Geschwister     :2Kern-ID       :0CPU-Kerne     :2apicid         :0initial apicid    :0fpu         :yesfpu_exception     :yescpuid level     :5wp       > 

Der Operator> weist die Shell an, die Ausgabe des Befehls in die angegebene Datei umzuleiten. Wenn die Datei existiert, löscht der den alten Inhalt der Datei und ersetzt ihn durch die Ausgabe des Befehls.

Eine Befehlseingabe umleiten

Syntax, um die Eingabe eines Befehls umzuleiten, damit er aus einer Datei kommt.

# Befehlsoptionen_und_Argumente

Verwenden Sie den <-Operator, um die Eingabe für einen Befehl umzuleiten, das Beispiel ist unten gezeigt:

[email protected]:~$ wc -l <​​command.txt52

In diesem Beispiel ist die Eingabe für die Datei „wc ‘ Der Befehl stammt aus der Datei mit dem Namen command.txt. Die Shell sendet den Inhalt der Datei command.txt als Standardeingabe für den Befehl wc.

Hinweis: Wir können auch beide Umleitungen mit folgender Syntax kombinieren:

# command_options_and_agruments Ausgabedatei.

Standardfehler umleiten

Zusätzlich zur Umleitung der Standardeingabe und -ausgabe für ein Skript oder einen Befehl können wir auch Standardfehler umleiten. Obwohl Standardfehler standardmäßig an die gleiche Stelle gehen wie die Standardausgabe – das Shell-Fenster oder Terminal. Es gibt gute Gründe, warum stdout und stderr getrennt behandelt werden. Der Hauptgrund ist, dass wir die Ausgabe eines Befehls oder von Befehlen in eine Datei umleiten können, Sie aber nicht wissen können, ob ein Fehler aufgetreten ist. Das Trennen von stderr von stdout ermöglicht es, dass die Fehlermeldung auf Ihrem Bildschirm erscheint, während die Ausgabe immer noch in eine Datei geht.

Syntax zum Umleiten von stderr von einem Befehl in eine Datei.

# command_options_and_agruments 2> Ausgabedatei.

Die 2 in 2> bezieht sich auf den Dateideskriptor 2, die Deskriptornummer für stderr.

Beispiel:

[email protected]:~$ lsash /usr/bin 2> commands-error.txt[email protected]:~$ cat commands-error.txtKein Befehl „lsash“ gefunden, meinst du:Befehl „sash“ von Paket 'sash' (Universum)lsash:Befehl nicht gefunden

Umleitung sowohl der Standardausgabe als auch des Standardfehlers

Verwenden Sie 2>&1 Syntax zum Umleiten von Standardfehlern an dieselbe Stelle wie die Standardausgabe .

Beispiel:1

[email protected]:~$ ls /usr/bin> command.txt 2>&1

Der obige Befehl besteht aus drei Teilen.

  • ls /usr/bin ist der ausgeführte Befehl
  • > command.txt leitet die Ausgabe des ls-Befehls um
  • 2>&1 sendet die Ausgabe des Dateideskriptors 2, stderr , an dieselbe Stelle wie der Dateideskriptor 1, stdout.

Beispiel:2

[email protected]:~$ ls /usr2222/bin> command.txt 2>&1[email protected]:~$ more command.txtls:kann nicht auf /usr2222/bin zugreifen:Datei oder Verzeichnis nicht vorhanden

Beachten Sie, dass das obige Beispiel davon ausgeht, dass Ihr System keine Verzeichnisnamen „/usr2222/bin“

hat

Sowohl stderr als auch stdout gleichzeitig umleiten

[email protected]:~$ ls /usr2222/bin &> command.txt[email protected]:~$ more command.txtls:kann nicht auf /usr2222/bin zugreifen:Datei oder Verzeichnis nicht vorhanden

Im obigen Befehl ist ls der Befehl , /usr2222/bin ist das Argument für die 'ls ‘ Befehl und ‘&> command.txt ‘ sowohl stdout als auch stderr in eine Datei namens command.txt umleiten.

An Dateien anhängen

Verwenden Sie den Operator „>>“, um die Ausgabe eines Befehls umzuleiten, aber an die Datei anzuhängen, falls vorhanden. Die Syntax ist unten angegeben:

# Befehl>> file_to_append.

Beispiel:

[E-Mail-geschützt]:~$ Betriebszeit>> sysload.txt[E-Mail-geschützt]:~$ Betriebszeit>> sysload.txt[E-Mail-geschützt]:~$ Betriebszeit>> sysload.txt[E-Mail-geschützt]:~$ mehr sysload.txt11:49:17 bis 1:22, 3 Benutzer, Lastdurchschnitt:0,28, 0,12, 0,11111:49:28 bis 1:22, 3 Benutzer, Lastdurchschnitt:0,40, 0,15, 0,1211:49:36 bis 1:23, 3 Benutzer, Lastdurchschnitt:0,33, 0,14, 0,12

Dateien abschneiden :

Wir können eine abgekürzte Syntax zum Abschneiden von Dateien verwenden, indem wir den Befehl vor dem Operator> weglassen. Die Syntax ist unten angegeben:

#> Dateiname

Wir können auch ein alternatives Format mit einem Doppelpunkt verwenden:

# :> Dateiname

Diese beiden befehlslosen Befehle erstellen die Datei, wenn sie nicht existiert, und kürzen die Datei auf null Bytes, wenn die Datei existiert.

[email protected]:~$ ls /usr/bin> command.txt[email protected]:~$ ls -l command.txt-rw-rw-r-- 1 linuxtechi linuxtechi 19713 2. Dezember 12:18 Befehl .txt[email protected]:~$> command.txt[email protected]:~$ ls -l command.txt-rw-rw-r-- 1 linuxtechi linuxtechi 0 Dez 2 12:18 command.txt

Ausgabe schnell ins Nirgendwo senden

Es gibt einige Szenarien, in denen Sie die Ausgabe eines Befehls nicht nur umleiten, sondern auch verwerfen möchten. Sie können dies tun, indem Sie die Ausgabe eines Befehls in die Nulldatei „/dev/null“ umleiten. Die Nulldatei verbraucht die gesamte an sie gesendete Ausgabe, als ob /dev/null ein Stern eines schwarzen Lochs wäre.

[email protected]:~$ ls /usr/bin> /dev/null

Hinweis:Die Datei /dev/null wird oft als Bit-Bucket bezeichnet.

Empfohlene Lektüre :So verwenden Sie ein verschlüsseltes Passwort in einem Linux-Bash-Shell-Skript


Linux
  1. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Lesen und schreiben Sie Daten von überall mit Umleitung im Linux-Terminal

  3. So speichern Sie die Befehlsausgabe in einer Datei unter Linux

  4. Pipes und Redirection in Linux - erklärt!

  5. Wie interpretiere und behebe ich einen Eingabe-/Ausgabefehler in Linux?

Erklärt:Eingabe-, Ausgabe- und Fehlerumleitung in Linux

Shell-Scripting Teil 4 – Eingabe, Ausgabe und Umleitung

Verwendung des Linux-mv-Befehls mit Beispielen

Grundlagen der Linux-Befehlszeile – Arbeiten mit Dateien und Verzeichnissen

Linux-Mount-Befehl mit Beispielen

gawk Linux-Befehl mit Beispielen