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

Was ist mit der Verbindung von Stdout und Stdin gemeint?

Ich lese ein Buch, da steht:

Jedem Prozess stehen mindestens drei Kommunikationskanäle zur Verfügung:„Standardeingabe“ (STDIN), „Standardausgabe“ (STDOUT) und „Standardfehler“ (STDERR).

Die meisten Befehle akzeptieren ihre Eingabe von STDIN und schreiben ihre Ausgabe nach STDOUT.
Sie schreiben Fehlermeldungen nach STDERR. Mit dieser Konvention können Sie
Befehle wie Bausteine ​​aneinanderreihen, um zusammengesetzte Pipelines zu erstellen.

Die Shell interpretiert die Symbole < , > , und >> als Anweisungen zum Umleiten der Eingabe oder Ausgabe eines Befehls zu oder von einer Datei.

Um die STDOUT eines Befehls mit der STDIN eines anderen zu verbinden, verwenden Sie |
Symbol, allgemein als Pipe bekannt.

ps -ef | grep httpd

Im Grunde genommen bedeutet dies also, dass die Standardeingabe ein Befehl ist, der es dem Benutzer ermöglicht, in eine Datei zu schreiben, während die Standardausgabe ein Befehl ist, bei dem die Bash-Shell die Ausgabe in die Shell schreibt, und der Standardfehler ist genau wie die Ausgabe, aber es ist nur wird aufgerufen, wenn ein Fehler im Dateisystem vorliegt. Dann kommen wir zum Teil der Verbindung von STDOUT und STDIN und ich bin verloren.

Akzeptierte Antwort:

Standardeingabe und Standardausgabe sind keine Befehle.

Stellen Sie sich Befehle als Maschinen in einer Fabrik mit Fließband vor. Die meisten Maschinen sind so konstruiert, dass sie ein Förderband zum Zuführen von Daten und ein Förderband zum Zuführen von Daten haben; sie sind die Standardeingabe bzw. die Standardausgabe. Der Standardfehler ist eine Öffnung an der Seite der Maschine, wo sie Ausschuss auswerfen kann.

+-------+     +------------------+       +------------------+     +------+
| input |     |    machine A     |       |    machine B     |     |output|
| reser ­­­|=====|<stdin     stdout>|=======|<stdin     stdout>|=====|bucket|
| ‑voir |  →  |      stderr      |   →   |      stderr      |  →  |      |
+-------+     +------------------+       +------------------+     +------+
                      ||                          ||

Das obige Diagramm zeigt ein Förderband, das durch zwei Maschinen läuft. Die Daten kommen aus dem Input-Reservoir links, werden Maschine A zugeführt, dann wird der Output weiter zu Maschine B befördert (für die er Input ist) und der Output von Maschine B wird in den Output-Bucket rechts abgelegt.

In Unix-Begriffen wird dies als Pipeline bezeichnet. Die Metapher ist die der Installation:Ein Rohr verbindet Maschine A mit Maschine B. Die Shell-Syntax für die obige Pipeline ist

<input-file.txt commandA | commandB >output-file.txt

Der < Das Umleitungssymbol weist die Shell an, commandA zu verbinden ’s Standardeingabe in die Datei input-file.txt bevor Sie commandA starten . (Sie können die Umleitung vor oder nach dem Befehlsnamen setzen.) Der > Das Umleitungssymbol weist die Shell an, commandB zu verbinden ’s Standardausgabe in output-file.txt . Die Pipe („| “) Symbol in der Mitte weist die Shell an, commandA zu verbinden ’s Standardausgabe an commandB ’s Standardeingabe, bevor Sie sie starten.

Verwandte:Verbinden von 2 GNDs mit relativer Spannungsdifferenz?

Befehle können mehr als eine Eingabe und mehr als eine Ausgabe haben, aber das ist Material für einen anderen Tag.


Linux
  1. Konfigurieren Sie die Shell, um Stderr und Stdout in verschiedenen Farben zu drucken?

  2. Ausgabe nach Stdout und gleichzeitig Grep in eine Datei?

  3. Möglichkeit, die Ausgabe eines Programms umzuleiten und trotzdem nach Stdout zu gehen?

  4. Iptables und transparente Proxys?

  5. Nur Stderr auf dem Bildschirm anzeigen, aber sowohl Stdout als auch Stderr in Datei schreiben?

Was ist ein Chroot-Gefängnis und wie wird es verwendet?

Was ist „/dev/null 2&1“ unter Linux

Verwirrt über stdin, stdout und stderr?

Was ist der Unterschied beim Umleiten einer Ausgabe mit >, &>, >&und 2&>?

Ist es möglich, dass der Linux-Dateideskriptor 0 1 2 nicht für stdin, stdout und stderr gilt?

Was ist der Unterschied zwischen OUTPUT- und FORWARD-Ketten in iptables?