リダイレクションとパイプ


図6 標準入力と標準出力と標準エラー出力
[画像のクリックで拡大表示]

表1 リダイレクションで利用する主なメタキャラクタ
ちなみに,「<」は小なり,左アングル,左山カッコ,「>」はケット,大なり,右アングル,右山カッコ,「&」はアンパサンドなどと読みます。

[画像のクリックで拡大表示]

図7 パイプの概念
[画像のクリックで拡大表示]

 Linuxでは,入出力装置に対してもファイルの一種として,言い換えればファイルと同じように,アクセスできることは前回に紹介しました。入出力装置に関係するファイルには,あらかじめ用途が決まっているものがあります。それが以下の3つのファイルです。

かっこ内に記した「stdin」などが,実際のファイル名になります。これらは,/devディレクトリの中にあります。標準入力と標準出力をまとめて「標準入出力」とも呼びます。

●標準入出力

 デフォルトでは,標準入力はキーボード,標準出力および標準エラー出力はディスプレイ(ウインドウ・システム下では使用中の端末エミュレータのウインドウ)に割り当てられています。例えば,シェルを利用している場合,コマンドの入力には標準入力(つまり,キーボード),コマンドの実行結果の出力には標準出力(ディスプレイ),エラー・メッセージの出力には標準エラー出力(こちらもディスプレイ)が使われます(図6[表示])。

●リダイレクション

 前述したように標準入出力などにはデフォルトの割り当てがありますが,これをユーザーが自由に変更できます。これを「リダイレクション」(入出力の切り換え)と言います。

 リダイレクション機能を利用するときには,メタキャラクタで指定します。bashとtcshで一部機能やメタキャラクタが異なります。基本的なメタキャラクタは表1の通りです。tcshでは,標準エラー出力単独の切り換えはできないことに注意しましょう。

 また,表1[表示]を見ると分かるように,標準出力の切り換えには,「追加出力」というものもあります。普通の標準出力の切り換え,つまりメタキャラクタの「>」を使って出力先を切り換えた場合,既に出力先に指定したのと同じ名前のファイルがあったときには,このファイルを削除して,同名の新規ファイルを作成します。そのため,既存のファイルに,新たな内容を追加したい場合には使えません。こうしたときに利用するのが,メタキャラクタの「>>」です。「>>」を使えば,既存のファイルに新しい内容を追加できます。

 具体例を示します。カレント・ディレクトリ/home/junに,テキスト・ファイルfile1があると仮定します。ファイルfile1の内容を出力するには,catコマンドを利用できます。

ここでは,標準入力はキーボード,標準出力はディスプレイです。次に,標準入力をファイルに切り換えてみましょう。それには次のように実行します。

ここでは,catコマンドの引数としてファイル名が指定されていないことに着目しましょう。catコマンドでは引数にファイル名がないと標準入力が使われます。つまり「< file1」でファイルに切り換えた標準入力をcatしているわけです。

 次に,cpコマンドを使って,ファイルfile1の内容をファイルfile5に複写してみます。

catコマンドのリダイレクション機能を利用してコピーすることもできます。

 ただし,ファイルfile5が既に存在した場合には,file1と同じ内容に代わってしまいます。既存のファイルfile5にファイルfile1の内容を追加出力するには,「>>」を利用して次のように実行します。

と入力します。このときにファイルfile5が存在しなかった場合には,新規にfile5が作成され,ファイルfile1の内容が出力されます。

●パイプ

 リダイレクションに類似した機能にパイプ(あるいはパイプライン)があります。パイプ機能とは,あるコマンドの標準出力と別のコマンドの標準入力を連結することです(図7[表示])。パイプのメタキャラクタは「|*7」です。パイプ機能は2つのコマンドの連結に限定されるわけではなく,3つ以上のコマンドを連結することもできます。

 パイプ機能を使えるコマンドを,Linuxでは一般に,フィルタ*8と呼びます。この説明だけでは分かりにくいので具体例を示すことにしましょう。

 試しに,lsコマンドとsortコマンドを結合します。sortはGNU Projectが配布するフィルタ,つまりパイプ機能が使えるコマンドです。テキスト・ファイルの内容を行単位で辞書順などに並べ替えます。lsコマンドは,デフォルトでファイル名を辞書順に並べ替えて出力するので,辞書の逆順に出力してみます。具体的には,sortコマンドに-rオプションを指定して実行します。

「再入門 体で覚えるLinuxの基本」の目次ページはこちらから