私は本を読んでいます、それは言います:
すべてのプロセスには、「標準
入力」(STDIN)、「標準出力」(STDOUT)、および「標準エラー」(STDERR)の少なくとも3つの通信チャネルがあります。ほとんどのコマンドは、STDINからの入力を受け入れ、出力をSTDOUTに書き込みます。
エラーメッセージをSTDERRに書き込みます。この規則により、
コマンドをビルディングブロックのようにつなぎ合わせて、複合パイプラインを作成できます。シェルはシンボルを解釈します
<
、>コード> 、および
>>
コマンドの入力または出力をファイルとの間で再ルーティングするための指示として。あるコマンドのSTDOUTを別のコマンドのSTDINに接続するには、
|
を使用します。
シンボル、一般にパイプとして知られています。ps -ef | grep httpd
つまり、基本的にこれが言っているのは、標準入力はユーザーがファイルに書き込むことを可能にするコマンドであり、標準出力はbashシェルがシェルに出力を書き込むコマンドであり、標準エラーは出力と同じですが、それはファイルシステムにエラーが発生したときに呼び出されます。次に、STDOUTとSTDINを接続する部分に進み、迷子になります。
承認された回答:
標準入力と標準出力はコマンドではありません。
組立ラインを備えた工場の機械としてコマンドを想像してみてください。ほとんどのマシンは、データを送り込むための1つのコンベヤーベルトと、データを送り出すための1つのコンベヤーベルトを持つように設計されています。それらはそれぞれ標準入力と標準出力です。標準エラーは、リジェクトを排出できるマシンの側面の開口部です。
+-------+ +------------------+ +------------------+ +------+
| input | | machine A | | machine B | |output|
| reser |=====|<stdin stdout>|=======|<stdin stdout>|=====|bucket|
| ‑voir | → | stderr | → | stderr | → | |
+-------+ +------------------+ +------------------+ +------+
|| ||
上の図は、2台の機械を通過するコンベヤーベルトを示しています。データは左側の入力リザーバーから取得され、マシンAに送られ、出力はさらにマシンB(入力先)に送られ、マシンBの出力は右側の出力バケットに格納されます。
UNIXの用語では、これはパイプラインと呼ばれます。メタファーは配管のメタファーです。パイプはマシンAをマシンBに接続します。上記のパイプラインのシェル構文は次のとおりです。
<input-file.txt commandA | commandB >output-file.txt
<コード> リダイレクトシンボルは、シェルに
commandA
を接続するように指示します のファイルへの標準入力input-file.txt
commandA
を起動する前 。 (コマンド名の前後にリダイレクトを配置できます。)>
リダイレクトシンボルは、シェルに commandB
を接続するように指示します のoutput-file.txt
への標準出力 。パイプ(“ |
中央の「)記号は、シェルに commandA
を接続するように指示します のcommandB
への標準出力 を起動する前のの標準入力。
コマンドには複数の入力と複数の出力を含めることができますが、それは別の日の重要な要素です。