パイプとリダイレクトを使いこなす前に、まず「標準入力」と「標準出力」を理解しておきましょう。
コマンドは必要に応じて何らかのデータを受け取り、処理をして、結果を出力します。特に何も指定していない場合、入力はキーボード、出力は画面となります。これをそれぞれ「標準入力」「標準出力」と呼びます。
あるコマンドが標準出力に出力した内容を、他のコマンドの標準入力につなげるのがパイプで、「|」という記号で表します。従って、「dmesg | more」は「dmesgコマンドの標準出力を、moreコマンドの標準入力につなげている」、つまり、「dmesg | more」は「dmesgコマンドが標準出力に出力している内容を、moreコマンドに渡している」ということになります。moreコマンドは「標準入力から受け取った内容を1画面ずつ停止しながら表示する」コマンドなので、「dmesg | more」でdmesgの出力内容を1画面ずつ停止しながら表示できる、というわけです。
標準出力を画面ではなく別のモノに向けるのがリダイレクトで、「>」という記号で表します。リダイレクト先は、通常はファイルですが、プリンタなどに送ることも可能です。
ちなみに、標準入力をリダイレクトしたい場合は「<」という記号を使います。例えば、「more < ファイル名」のように指定すると、リダイレクトで指定したファイルの内容が表示されます。ただし、moreコマンドの場合は「more ファイル名」のように引数にファイルを指定することができるためリダイレクトする必要はありません。
※Webで使われている「CGI(Common Gateway Interface)」でも、標準入出力が使われています。WebサーバはOS(シェル)を通じてCGIプログラムを実行し、CGIプログラムが標準出力に出力した内容を受け取り、Webクライアント(Webブラウザなど)に渡す、というのが大まかな仕組みになります。
多くのコマンドは“実行結果”を画面に表示しますが、この実行結果には「コマンドが生成するデータ」と「エラーメッセージ」の2種類があります。
例えば、「more ファイル名」ならばファイルの内容が1画面ずつ出力されますが、これが「コマンドが生成するデータ」です。また、指定したファイルが存在しない、アクセス権限がない、などのメッセージが「エラーメッセージ」です。
エラーメッセージの出力先を「標準エラー出力」と呼びます。通常は、標準出力も標準エラー出力も出力先は画面なので一見すると同じですが、出力としては区別されています。
※結果をどちら(標準出力か標準エラー出力)に出すかは、コマンドによって(コマンドを作成した人のポリシーによって)異なります。
通常のパイプ(|)やリダイレクト(>)は標準出力を対象としており、標準エラー出力への出力を操作したい場合は別の指定方法が必要となります。実際の使用例と使用方法のまとめは、次のページで説明します。
Copyright © ITmedia, Inc. All Rights Reserved.