以下は、新規ユーザーを支援するために少し簡略化されています。
まず、最初に、標準入力と標準出力の概念を理解する必要があります。
Linuxおよび他のUNIXライクなオペレーティングシステムでは、各プロセスに標準入力(stdin
)と標準出力(stdout
)があります。通常の状況はstdin
、キーボードでstdout
あり、画面または端末ウィンドウです。
したがって、実行するとls
、出力がにスローされstdout
ます。他に何もしなければ、画面またはターミナルウィンドウに移動し、表示されます。
現在、一部のLinuxコマンドはユーザーと対話し、それを使用stdin
してテキストエディターをそれらの1つにしています。から読み取りstdin
、キーストロークを受け入れ、処理を行い、次にに書き込みますstdout
。
ただし、非対話型または「フィルター」コマンドもあります。これらのコマンドは、対話型では機能しませんが、大量のデータが必要です。これらのコマンドstdin
は、持っているものすべてを取り、それに何かをしてから、stdout
と呼ばれる別のコマンドを見てみましょうdu
-ディスク使用量の略です。 du /usr
たとえば、stdout
そのディレクトリ内のすべてのファイルとそのサイズのリストを(他のLinuxコマンドと同様に)出力します。
# du /usr
2312 /usr/games
124 /usr/lib/tc
692 /usr/lib/rygel-1.0
400 /usr/lib/apt/methods
40 /usr/lib/apt/solvers
444 /usr/lib/apt
6772 /usr/lib/gnash
すぐにわかるように、それはソートされていません。おそらくサイズの順にソートしたいでしょう。
sort
は、さまざまなものを取り出してstdin
ソートする「フィルター」コマンドの1つです。
したがって、これを行う場合:
# du /usr | sort -nr
これが得られますが、少し改善されています。
4213348 /usr
2070308 /usr/lib
1747764 /usr/share
583668 /usr/lib/vmware
501700 /usr/share/locale
366476 /usr/lib/x86_64-linux-gnu
318660 /usr/lib/libreoffice
295388 /usr/lib/vmware/modules
290376 /usr/lib/vmware/modules/binary
279056 /usr/lib/libreoffice/program
216980 /usr/share/icons
これで、「パイプ」stdout
が1つのコマンドをstdin
別のコマンドに接続していることがわかります。通常、このような状況で、コマンドの出力をフィルタリング、ソート、または操作する場合に使用します。複数のフィルタータイプのコマンドを使用して出力を処理する場合は、カスケード接続できます。
自分で入力sort
した場合でも、から読み込もうとしますstdin
。以来stdin
、あなたがコントロール-Dを押すまで、あなたが入力し、プロセス物事するために、キーボードに接続され、それがお待ちしております。実際に対話的に使用するためのものではないため、プロンプトは表示されません。
プログラムstdin
が対話型かどうかを判断することは可能です。そのため、プログラムを単独で、またはパイプの最後で発行した場合、プログラムによって異なる動作をする可能性があります。
また、のようvi
に対話的にのみ動作するプログラムをパイピングすると、あなたが悪い時間を過ごすことになります。
パイプは、データがどこにも保存されずにコマンド間でシャッフルされるという点でリダイレクトとは異なります。したがって、上記の例では、du
の出力はどこにも保存されません。パイプを使用する理由は、何らかの方法でコマンドの出力を処理するためであるため、パイプでこれを望まないほとんどの時間-しかし、tee
あなたはあなたのケーキを食べてそれを食べることができるコマンドがあります受け取ったものstdin
を両方stdout
と、選択したファイルにコピーします。またbash
、私が知らないアンパサンドと角かっこを含むいくつかの不可解な構文からこれを行うこともできます。
|
ことは、名前を使用しないことです。l-handコマンドからの出力は、パイプのr-hand側のコマンドの入力に直接渡されます。