LinuCレベル1 101試験の例題と解説
1.03.3ストリーム、パイプ、リダイレクトの使用
LinuCレベル1 101試験の試験範囲から、「1.03.3 ストリーム、パイプ、リダイレクトの使用」についての例題を解いてみます。
今回はteeコマンドについて確認しておきましょう。
例題
以下のコマンドの説明として、誤っているものを1つ選択してください。
- 「grep message test.txt | tee -a kaki.txt」を実行すると、kaki.txtにtest.txtのファイルから「message」を検索し、その結果を標準出力とkaki.txtに追記できる。
- 「find . -name "*.txt" | tee rm」を実行すると、カレントディレクトリ配下のtxt拡張子のファイルをすべて削除できる。
- 「find /home/ -name texttext | tee result.txt」を実行すると、result.txtにfindコマンドの実行結果を記述できる。
- 「tee -i」は、ctrl+cで終了出来ない。
※この例題は実際の試験問題とは異なります。
解答と解説
正解は、「2.「find . -name "*.txt" | tee rm」を実行すると、カレントディレクトリ配下のtxt拡張子のファイルをすべて削除できる。」です。
「tee」は、標準入力から受け取った内容を、標準出力とファイルに書き出すコマンドです。データをパイプに送るとき、同時にそのコピーを保存しておきたいときに使います。
teeコマンドの書式は以下の通りです。
tee オプション ファイル名
オプションは以下の通りです。
-a | :ファイルを上書きではなく追記する |
-i | :割り込み信号を無視する |
実行例として、「echo test | tee file1」を実行すると、標準入力から入力した文字が標準出力に出力されるとともに、引数として渡した対象のファイルにも記述されます。
$ echo test | tee file1
test
$ cat file1
test
選択肢の解説は以下です。
1.「grep message test.txt | tee -a kaki.txt」を実行すると、kaki.txtにtest.txtのファイルから「message」を検索し、その結果を標準出力とkaki.txtに追記できる。
不正解です。
「-a」はファイルを上書きではなく、追記するオプションです。 よって、kaki.txtにgrepの検索結果が追記されます。
2.「find . -name "*.txt" | tee rm」を実行すると、カレントディレクトリ配下のtxt拡張子のファイルをすべて削除できる。
正解です。
「tee」は標準入力から受け取った内容を標準出力とファイルに書き出すコマンドなので、teeの引数にrmコマンドを渡しても、rmコマンドを実行出来ません。
3.「find /home/ -name texttext | tee result.txt」を実行すると、result.txtにfindコマンドの実行結果を記述できる。
不正解です。
「find /home/ -name texttext」の実行結果を「|(パイプ)」で「result.txt」に渡しています。実際に実行すると以下のようになります。
$ find /home/ -name texttext | tee result.txt
/home/test/texttext
$ cat result.txt
/home/test/texttext
上記のようにfindコマンドの実行結果をresult.txtに記述します。
4.「tee -i」は、ctrl+cで終了出来ない。
不正解です。
「-i」は割り込み信号を無視するオプションです。よって、ctrl+cで終了しようとしても、終了出来ません。
teeコマンドは入力内容を画面とファイルに出力するときに使います。
teeコマンドの使い方を理解しておきましょう。
例題作成者
株式会社デージーネット ソリューション開発部 石崎 優真