cmd0 | cmd1 | cmd2
ターミナルで何度も。
あるコマンドの出力を次のコマンドへの入力としてリダイレクトするために使用されるのは、パイプリダイレクトであることもご存知でしょう。
しかし、あなたはその下に何が起こっているのか知っていますか?パイプリダイレクトは実際にどのように機能しますか?
今日はUnixパイプの謎を解き明かして、次にこれらの派手な縦棒でデートするときに、何が起こっているのかを正確に知ることができるので、心配しないでください。
注:パイプの概念(Linuxの他の多くのものと同様)はUnixに由来するため、私は場所でUnixという用語を使用しました。
Linuxのパイプ:一般的な考え方
「Unixパイプとは」に関してどこにでも見られるものは次のとおりです。
- UnixパイプはIPC(プロセス間通信)メカニズムであり、あるプログラムの出力を別のプログラムの入力に転送します。
さて、これは誰もが与える一般的な説明です。もっと深く入りたいです。抽象化を取り除いて、より技術的な方法で前の行を言い換えましょう:
- Unixパイプは、
stdout
を使用するIPC(プロセス間通信)メカニズムです。 プログラムのをstdin
に転送します バッファを介した別のプログラムの。
ずっといい。抽象化を取り除くことで、よりクリーンで正確になりました。次の図を見て、パイプがどのように機能するかを理解できます。

pipeコマンドの最も簡単な例の1つは、特定の文字列を検索するために、コマンド出力をgrepコマンドに渡すことです。
たとえば、次のようにtxtを含む名前のファイルを検索できます。

注意:パイプはstdoutをstdinにリダイレクトしますが、コマンド引数としてはリダイレクトしません
理解しておくべき非常に重要なことの1つは、パイプがstdout
を転送することです。 stdin
へのコマンドの 別のものの、しかしコマンド引数としてではありません。例を挙げて説明します。
cat
を使用する場合 引数なしのコマンドの場合、デフォルトでstdin
からの読み取りになります 。次に例を示します:
$ cat
Subscribe to Linux Handbook for more articles like this
^D
Subscribe to Linux Handbook for more articles like this
ここではcat
を使用しました ファイルを渡さずに、デフォルトでstdin
に設定されました 。次に、行を書き、Ctrl + dを使用して、書き終わったことを知らせます(Ctrl + dはEOFまたはファイルの終わりを意味します)。書き終えたら、猫はstdin
から読み取ります 、そしてその行をstdout
に書き込みました 。
ここで、次のコマンドについて考えてみます。
echo hey | cat
2番目のコマンドはcat hey
と同等ではありません 。ここでは、stdout
、"hey"はバッファに取り込まれ、stdin
に転送されます cat
の 。コマンドライン引数がなかったため、catはデフォルトでstdin
になりました 読み取り用で、すでにstdinに何かがあったので、catコマンドがそれを取得し、stdout
に出力しました。 。
実際、私はheyという名前のファイルを作成し、その中にいくつかのコンテンツを入れました。下の画像で違いがはっきりとわかります:

Linuxのパイプの種類
Linuxには2種類のパイプがあります:
- 無名パイプ、匿名パイプとも呼ばれます
- 名前付きパイプli>
全文を読む
記事の残りの部分は、LHBメンバーのみが利用できます。今すぐ無料でサインアップして、この記事の残りの部分と、すべてのメンバー限定の投稿にアクセスできます。また、隔週で開催されるLinuxニュースレターを購読することもできます。
購読すでにアカウントをお持ちですか?サインイン