GNU/Linux >> Linux の 問題 >  >> Linux

StdoutとStdinを接続することの意味は何ですか?

私は本を​​読んでいます、それは言います:

すべてのプロセスには、「標準
入力」(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への標準出力 を起動する前のの標準入力。

関連:相対的な電圧差で2つのGNDを接続しますか?

コマンドには複数の入力と複数の出力を含めることができますが、それは別の日の重要な要素です。


Linux
  1. リダイレクトとパイプ出力?

  2. Iptablesと透過プロキシ?

  3. XTerm または Konsole で stdout と stderr の出力を異なる色にすることはできますか?

  1. Linuxで出力をファイルとStdoutにリダイレクトする方法

  2. StderrとStdoutを異なる色で印刷するようにシェルを構成しますか?

  3. 出力が stdout か stderr かを判別する

  1. Stdoutに出力し、同時にGrepをファイルに出力しますか?

  2. プログラムの出力をリダイレクトし、それでもStdoutに送信する方法はありますか?

  3. 画面にStderrのみを表示しますが、StdoutとStderrの両方をファイルに書き込みますか?