16. パイプとリダイレクト

目次へ 前の項目へ次の項目へ

先程のターミナルのところでシェルという言葉が出てきました。シェルとは shellのことで、貝殻などの殻のことです。これは、コンピュータの中身を包み込 んでユーザから見たときの外側のおおいの意味もありますし、逆にユーザの動作環 境を包み込んでまとめる殻の意味もあります。すなわち、機械語しかわからないコ ンピュータに人間が理解しやすい言葉や命令を伝えるための仲立ちです。 MacintoshですとFinderがそれにぴったりの役目を果たしていますし、Windowsです と見た目はちょっと違いますが、Explorerがそのような役目を果たしています。

UNIXではコマンドによる操作が多いのですが、その操作を扱いやすくしてくれるの がここで紹介するパイプやリダイレクト、履歴、補完などのシェルの機能です。以 下に順次説明していきます。

  1. 補完

    ここまでのコマンド操作で、キーボードが苦手な人ならばすでにかなり嫌気が差し たかと思います。短縮されているとは言え、コマンドで何文字か入力しなければな らないし、ファイル名なども間違えるとエラーがでて怒られます。そのような面倒 な入力を少しは楽にしてくれるのが補完機能です。

    たとえば、シェルの設定ファイルの一つである.bash_profileというファイル の中身を見るとします。コマンドはたとえば、次のようになります。

    $ cat .bash_profile

    間違えずにキー入力するのは大変です。そこで、

    $ cat .ba

    まで打ったらTABキーを押してみてください。TABキーとはキーボードの左端のまん 中より少し上にある左右の矢印キーが刻印されているキーです。すると、勝手に、

    $ cat .bash

    に文字が補われました。このようにキー入力を補ってくれる動作を補完といいます。 次に、もう少し入力を続けましょう。アンダースコアとpまで入力します。

    $ cat .bash_p

    この状態で再びTABキーを押します。すると、ファイル名が全部補完されました。 この動作は、ある程度文字が確定して他に候補が無ければ名前の全部が補 われますが、別の候補があるとそこでいったん止まってしまうようになっ ています。もう一度、先程の入力に戻って、

    $ cat .ba

    で補完しなおしてみましょう。TABキーを押したら先程と同様に補完されました。 では、もう一度TABキーを押すとどうなるでしょうか。ビープ音という警告音がな るだけで何も起こりません。さらに、もう一回TABキーを押しましょう。すると、 警告音とともに、画面には候補の一覧が表示されます。これが、補完が先に進めな い理由のファイル一覧です。どうやら、候補が4つあるので絞りきれないようです。 そこで、先程のようにアンダースコアとpを入力すると一つに決まるので全部補完 されたわけです。このように、補完を使うとキー入力を少なくできるので馴れた人 ほど補完をよく使用します。ファイルのコピーなどの場合にも実際にコピー元のファ イルやコピー先のディレクトリが存在しているかどうか確認する意味でもなるべく 補完を使用する方がよいでしょう。

  2. 履歴

    履歴とは自分が行った操作の歴史のことです。ターミナルでコマンドプロンプトの $マークが表示されている状態から上むきの矢印キーを押してみましょう。 すると、直前に自分が行った操作が表示されます。上むき矢印キーを押す ごとに一つ前の動作が表示されます。逆に、下向き矢印キーだと新しい動 作に向かって進んでいくことになります。

    同じ操作を何度もするときなどには、この履歴の機能が役に立ちますし、長いコマンド を入力して間違えたりしたときなど、いったん前のコマンドを表示してから間違っ たところだけを直すことにより入力が楽になります。たとえば、

    $ ping ecs.riko.shimane-uac.jp

    とすると、

    ping: ecs.riko.shimane-uac.jpは不明なホストです

    というエラーがでます。そこで、矢印キーで再び表示させて、左向き矢印でカーソ ルを少し戻してuとaの間にピリオドを入力して、

    $ ping ecs.riko.shimane-u.ac.jp

    とすると、無事にネットワーク上でそのホストが生きているかが分かるpingという コマンドの結果が表示されます。このコマンドはいつまでも表示しつづけ るので、適当なところでコントロールキーとCのキーを同時に押して止めて ください。このようなキー操作を

    Ctrl + C もしくは C - c

    のように表記することがあります。

  3. パイプ

    パイプとは一つの処理の結果を次の処理の入力に渡すことを言います。まるで、パ イプで処理どうしをつなげるようなイメージがあるので、パイプという名前になっ ています。具体的には、

    $ ls -al | grep bash

    のようにコマンドの後に|の縦棒の記号(キーボードでは、¥マークのキーをシフ トして入力します。) をつけて次のコマンドを入力します。ここ に挙げたgrep というのは、ファイルの中から特定の単語を含む行だけを 検索して表示するコマンドです。上の意味は、カレントディレクトリのす べてのファイルをロング形式で表示するけれども、その中のbashという文 字列を含むものだけ表示しなさい、ということになります。結果はいかが だったでしょうか。パイプ処理しないただの ls -al の結果と見 比べてみると違いがよくわかります。

    また、表示結果が長くなってしまった場合に、あとから less のような ページャを使うこともよく行われます。Xウィンドウシステム関連の設定ファ イルである .Xdefaults を表示してみましょう。当然補完機能も 活用しましょう。

    $ cat .Xdefaults

    長すぎて、画面に収まりきれません。そこで、履歴機能を使ってもう一度画面にコ マンドを表示したら次のようにパイプ処理を付け加えましょう。

    $ cat .Xdefaults | less

    すると、cat の表示結果がページャの less に渡されて一ペー ジごとの表示に変わりました。それなら、最初から less を使えば良い では無いか、という意見もあると思いますが、次のような使い方もできるのであな がち知っておいて無駄ではありません。

    $ cat -n .Xdefaults | less

    less には行番号表示機能が無いので、行番号が知りたいときには役に立 ちます。

  4. リダイレクト

    リダイレクトとは迂回の意味です。これは、コマンドの結果を画面に表示しないで 別に向けることを意味します。たとえば、自分のホームディレクトリのファイルの 一覧リストを作成したいときに、いちいちファイル名をキーボードから入力するの は大変です。そういうときには、

    $ ls -al > list.txt

    のように、>を使ってコマンドの出力をファイルの中身へ迂回させます。実際に やってみましょう。そして、終わったら、

    $ cat list.txt

    として、中を確認しましょう。これでリストが保存できました。さらに、 >>と二つ重ねると、ファイルの末尾に追加するということもできます。使用 例は、

    $ cat list.txt >> test2

    のようになります。すると、先程作ったtest2というファイルの中身に今のリスト が追加されます。確認してみましょう。


ページの先頭へ目次へ 前の項目へ次の項目へ