リダイレクション

UNIX コマンドによるプロセスのほとんどが標準出力(端末画面)に書き出されます、そしてその入力のほとんどは標準入力(キーボード)から受け取ります。 標準エラー出力というものもあり、プロセスはエラーメッセージを端末画面に書き出します。

私たちはファイルの内容を画面に書き出すために cat コマンドが使えることを知っています。

ファイルを指定せずに cat コマンドを実行してみます。

% cat

いくつか文字を入力してリターンキーを押してみましょう。最後に[コントロール]キーを押しながら [d] を押して入力を終えてください。(今後は[コントロール] + [d] を[^D] と表現します。)

何が起こりましたか?

cat コマンドにファイルを指定しなければ、標準入力(キーボード)から入力を読み取って、そしてファイルの終了(^D)を受け取ると、標準出力(端末画面)にコピーします。

UNIX ではコマンドの入力と出力をリダイレクトする(変える)ことができます。

標準出力のリダイレクト

記号 > を使ってコマンドの出力をリダイレクトします。果物の名称が書かれた list1 というファイルを作ってみます。次のように入力してください。

% cat > list1

果物の名前を入力してひとつずつ改行を入れ(リターンキーを押し)ます。

pear
banana
apple
^D

cat コマンドは標準入力(キーボード)を読み取りそして通常は端末画面に出力されるものを list1 ファイルに書き出します。

ファイルの内容を表示してみます。

% cat list1

練習 3a

上記の方法を使って list2 というファイルを作ってみましょう。ファイルの内容は次のフルーツの名前を書いてください orange, plum, mango, grapefruit 。ファイルが出来上がったら内容を表示して確認しましょう。

ファイルへの追記

記号 >> を使うと標準出力をファイルに追記できます。 list1 にもっと多くの内容を追加します。

% cat >> list1

次のようにフルーツの名前を書きます。

peach
grape
orange
^D

ファイルの内容を表示します。

% cat list1

現在ふたつのファイルがあって、 list1 には6個のフルーツ、 list2 には4個のフルーツが書かれているはずです。

これから cat コマンドを使って list1list2 の内容を連結して biglist というファイルを作ります。

% cat list1 list2 > biglist

上記のコマンドは list1list2 の内容を読み取ってから、ファイル biglist にテキストを書き出しているのです。

新しいファイルの内容を表示します。

% cat biglist

標準入力のリダイレクト

記号 < を使えばコマンドの入力をリダイレクトすることができます。

sort コマンドはアルファベットまたは数字の順に一覧を並べ替えます。次のように入力してください。

% sort

動物の名前を入力してみます。ひとつずつリターンキーを押してください。

dog
cat
bird
ape
^D

次のように出力されるでしょう。

ape
bird
cat
dog

< を使えばキーボードに代わってファイルから入力することができます。フルーツの一覧を並べ替えます。

% sort < biglist

並べ替えられた結果が端末画面に表示されます。

並べ替えられた結果をファイルに出力してみます。

% sort < biglist > slist

slist の内容を cat コマンドで確認してみましょう。

パイプライン

このシステムに誰がいるか見てみましょう。次のように入力します。

% who

名前の分類されたリストを得る1つの方法は、次のようなコマンドを実行することです。

% who > names.txt
% sort < names.txt

この方法は少し遅いやり方です。コマンドを終えれば names.txt という一時ファイルを削除することを忘れないようにしなければなりません。 そこで、 who コマンドの出力を sort コマンドの入力とする方法があります。パイプ(パイプラインとも言う)を使えばそれが実現できます。パイプの使用には垂直バー [|] を用います。

次のコマンドを入力してください。

% who | sort

先ほどと同じ結果が得られたはずです。しかも一時ファイルを使わず短時間で実行結果が得られるのです。

何人のユーザーがログインしているか見てみましょう。

% who | wc -l

練習 3b

パイプを使って list1list2 の中から 'p' という文字を含んでいる行を探して、その結果を並べ替えて表示してみましょう。

答え pipe-answer.txt

まとめ

コマンド 解説
command > file 標準出力を file にリダイレクトする
command >> file 標準出力を file に追記する
command < file 標準入力を file に変える
command1 | command2 command1 の出力を command2 に入力としてパイプで送る
cat file1 file2 > file0 file1 と file2 を連結して file0 に送る
sort データを並べる
who ログイン中のユーザーの一覧を表示する


この文書は UNIX Tutorial for Beginners から派生した文書です。 Creative Commons License の下で利用できます。

Creative Commons License


最終更新日: 2011年02月24日(木)


Back to top