LinuCレベル1 Version 4.0 101試験の例題と解説

103.4ストリーム、パイプ、リダイレクトの使用

今回は、LinuC 101試験の試験範囲から「103.4 ストリーム、パイプ、リダイレクトの使用」についての例題を解いてみます。
コマンドの結果をディスプレイに出力しながらファイルにも出力することができるteeコマンドについて、使用方法を覚えておきましょう。

Linucレベル1 Version 4.0 101試験 出題範囲


例題

/usr/share/manディレクトリに含まれるファイルの一覧を標準出力とファイル result.txt の両方に出力するためのコマンドラインを選択してください。

  1. find /usr/share/man -type f > result.txt
  2. find /usr/share/man -type f | cat > result.txt
  3. find /usr/share/man -type f | tee result.txt
  4. find /usr/share/man -type f | result.txt

※この例題は実際の試験問題とは異なります。


解答と解説

正解は、「3. find /usr/share/man -type f | tee result.txt」です。

tee は、標準入力から読み込んだ内容を標準出力とファイルに書き込むためのコマンドです。
例えば

ps | tee ps.txt

を実行した場合、標準出力とファイルps.txtにpsコマンドの結果が出力されます。

====================================
$ ps | tee ps.txt
  PID TTY          TIME CMD
12015 pts/3    00:00:00 bash
12967 pts/3    00:00:00 ps
12968 pts/3    00:00:00 tee
====================================

標準出力にpsの結果が出力されました。
ps.txtの内容を確認してみましょう。

====================================
$ cat ps.txt
  PID TTY          TIME CMD
12015 pts/3    00:00:00 bash
12967 pts/3    00:00:00 ps
12968 pts/3    00:00:00 tee
====================================

標準出力に出力された内容がps.txtにも出力されたことがわかります。

teeコマンドは、オプションで -a または --append を指定すると、指定したファイルを上書きせずに追記します。

例題の選択肢を解説します。

  1. find /usr/share/man -type f > result.txt
    誤っています。
    '>' はリダイレクトを行いますので、findコマンドの結果がファイルresult.txtに出力されますが、標準出力には出力されません。
  2. find /usr/share/man -type f | cat > result.txt
    誤っています。
    catコマンドは引数にファイル名を指定しない場合、標準入力から読み込んだ内容を標準出力に書き込みます。
    この例の場合、findコマンドの結果を読み込み、ファイルresult.txtにリダイレクトしています。
    従いまして、findコマンドの結果は標準出力には出力されません。
  3. find /usr/share/man -type f | tee result.txt
    正解です。
    findコマンドの結果が標準出力とファイルresult.txtに出力されます。
  4. find /usr/share/man -type f | result.txt
    誤っています。
    パイプの後には標準入力を受け付けるコマンドを指定する必要があります。
    この例の場合、コマンドではなくファイルresult.txtを指定してますので、コマンドが見つからないというエラーになります。

teeコマンドは、ディスプレイとファイルの両方にコマンド結果を出力したい時に利用することができます。
特にシェルスクリプトの中では便利に利用することができます。
teeコマンドの使用方法を覚えておきましょう。


例題作成者

株式会社デージーネット OSS研究室 大野 公善

ページトップへ