4.14. リダイレクションとパイプの概念

 Linuxの基本的な考え方の一つにパイプとリダイレクションという二つの機能があります。これらを知ることで、処理を簡素化することも可能です。まずはLinux のデータがどのように処理されているのか見てみましょう。

4.14.1. データの流れ

 Linuxでは、アプリケーション間のデータの渡し方がいくつかあります。代表的なものだと、

  • ストリーム(Stream)
  • ソケット(Socket)、一般的にTCP やUDP

といったものが該当します。このうちソケットに関しては、インターネット上で使われることがほとんど(内部利用もあります)なので、ここではもうひとつのストリームについて解説しておきましょう。これを知っておくことで、続く、リダイレクションやパイプの意味も理解しやすくなります。

ストリームとは単純化すると、データが流れる川というイメージをもつことができます。プログラムが起動すると、自動的にストリームが準備されますが、この時に3つのストリームが確保されます。この時にストリームには番号(ファイルディスクリプタ)が与えられますが、番号ではわかりにくいので名前が用意されています。

  • stdin (スタンダードイン)
    0番に割り当てられたストリームであり、日本語では標準入力と呼ばれています。一般的に外部からの入力を受けつけるためのストリームであり、初期状態では端末を経由してキーボードに割り当てられることがほとんどです。
  • stdout (スタンダードアウト)
    1番に割り当てられたストリームであり、日本語では標準出力と呼ばれています。初期状態では端末を経由して画面に出力されます。
  • stderr (スタンダードエラー)
    2番に割り当てられたストリームであり、日本語では標準エラー出力と呼ばれています。こちらも端末を経由して画面に出力されますが、そのためstdoutと区別しにくくなっています。

リダイレクションやパイプはこれらのストリームを操作するための技術であり、うまく応用することで、単純なコマンドだけでは表現できない様々な機能が使えるようになります。

データの流れ

参考URL
http://jibun.atmarkit.co.jp/lskill01/rensai/fulinux/04/01.html