LinuCレベル1 101試験の例題と解説
1.03.3ストリーム、パイプ、リダイレクトの使用
LinuCレベル1 101試験の出題範囲から「1.03.3 ストリーム、パイプ、リダイレクトの使用」についての例題を解いてみます。
ここでは、xargsコマンドについて確認しておきましょう。
例題
xargsコマンドを利用して、以下の作業を行う。
- dirディレクトリ配下にあるファイルだけをすべて削除(ディレクトリは削除しない)
- 削除した実行コマンドも表示
- dirディレクトリ配下の情報
$ ls -R dir
dir:
d1 d2 d3
dir/d1:
file1.txt
dir/d2:
file2.txt
dir/d3:
file3.txt
適切なコマンドを一つ選択してください。
- find dir -type f | xargs rm -f
- find dir -type f | xargs -c 'rm -f $0'
- find dir -type f | xargs -t rm -f
- find dir -type f | xargs -P rm -f
※この例題は実際の試験問題とは異なります。
解答と解説
正解は、「3.find dir -type f | xargs -t rm -f」です。
xargsコマンドは、あるコマンドの標準出力を標準入力から受け取り、次のコマンドに渡してくれます。
xargsコマンドの書式は以下の通りです。
xargs [オプション] コマンド [コマンドの引数]
xargsコマンドの主なオプションは以下の通りです。
オプション | 概要 | |
-a [ファイル名] | : | 標準出力の代わりにファイルから読み込む |
-0 | : | 入力項目をNULLで区切って実行する |
-d [区切り文字] | : | 入力項目の区切り文字を指定する |
-E [終端文字] | : | 入力項目の終端文字を指定する |
-t | : | コマンドの実行内容を表示する |
-n [引数の数] | : | コマンドに渡す引数の数を指定する |
-p | : | コマンドの実行確認を行う |
-P [実行プロセス数] | : | 複数プロセスを同時に立ち上げて実行する |
選択肢の解説は以下です。
1.find dir -type f | xargs rm -f
不正解です。
xargsコマンドをオプションなしで実行した場合、コマンドの実行結果が出力されません。
実行例は、以下になります。
$ find dir -type f | xargs rm -f
$ ls -R dir
dir:
d1 d2 d3
dir/d1:
dir/d2:
dir/d3:
2.find dir -type f | xargs -c 'rm -f $0'
不正解です。
xargsコマンドに-cオプションは、存在しません。
3.find dir -type f | xargs -t rm -f
正解です。
xargsコマンドの-tオプションは、コマンドの実行内容を表示するオプションです。
実行例は、以下になります。
$ find dir -type f | xargs -t rm -f
rm -f dir/d3/file3.txt dir/d1/file1.txt dir/d2/file2.txt
xargsコマンドの実行内容は、標準エラー出力に表示されます。
リダイレクト等を活用することで別ファイルに出力も行えます。
4.find dir -type f | xargs -P rm -f
不正解です。
xargsコマンドの-Pオプションは、プロセスを同時に立ち上げて実行するオプションです。選択肢では、実行プロセス数を指定していないため書式エラーになります。
パイプやxargsコマンドを活用することで、複数実行していたコマンドを一つにまとめることが可能です。
状況に応じて、ワンライナーで実行し効率的に作業を行いましょう。
例題作成者
株式会社デージーネット OSS研究室 上野 貴博