【Linux】標準入出力・パイプ(パイプライン)

2019年3月10日

OSに標準で用意されている入出力とコマンドを組み合わせて様々な処理を実行できるパイプ(パイプライン)についてまとめています。

標準入出力

Linuxでは、標準で用意されている3つの入出力装置があります。

  1. 標準入力
  2. 標準出力
  3. 標準エラー出力

標準入力は、プログラムへの入力装置でデフォルトではキーボードが割り当てられています。

標準出力は、プログラムからの出力装置でデフォルトは画面(端末)です。

標準エラー出力は、プログラムのエラーメッセージなどの出力装置でデフォルトは画面(端末)です。

標準入出力を切り替えることにより、プログラムに様々な動作をさせることが出来ます。

ファイル記述子 入出力名 デフォルト
0 標準入力 キーボード
1 標準出力 画面(端末)
2 標準エラー出力 画面(端末)

ファイル記述子にある番号は、それぞれの入出力装置に対応しており、コマンドからでも入出力を利用出来るようになっています。

パイプ(パイプライン)

コマンドやプログラムの標準出力結果を別のコマンドやプログラムの標準入力につなげることが出来る。

パイプ(パイプライン)は、記号「 | 」を使って表します。

形式
コマンド1 | コマンド2
[root@hostname /]# grep to member.txt | wc -l

上記の例では、member.txtファイルから「to」を含む行を検索し、出力結果を画面に表示せずにパイプを通じてwcコマンドに結果を渡しています。

wcコマンドでは、受け取った結果をもとに行数をカウントして結果を出力します。

パイプのイメージ

このように単純な動作のコマンドを組み合わせて複雑な処理を実行することが出来るのですが、実行途中の結果はメモリ上で処理されるので画面で確認することが出来ません。

このパイプの欠点を補うために使用されるのが「tee」コマンドです。

teeコマンド

teeコマンドは、標準入力から読み込んだデータを標準出力とファイルの両方に出力します。

形式
tee [オプション] [ファイル名]
オプション
オプション 説明
-a ファイルに上書きせずに末尾に追加保存する
[root@hostname /]# grep to member.txt | tee m.txt | wc -l

上記の例では、member.txtファイルから「to」を含む行を検索し、その結果をパイプを通してteeコマンドに渡しています。teeコマンドでは、それをm.txtに出力すると同時に、wcコマンドに結果を渡しています。 wcコマンドでは、検索結果に該当する行をカウントして標準出力します。

teeコマンドのイメージ