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.
Befehle können mehr als eine Eingabe und mehr als eine Ausgabe haben, aber das ist Material für einen anderen Tag.