103.4基礎
access.logからstatus=500を含む行を抽出する。
抽出結果を一時ファイルへ保存せず、その行数を表示する。
適切なコマンド列はどれか。
× 不正解
パイプは左コマンドの標準出力を右コマンドの標準入力へ接続する。フィルタを段階的に組み合わせられる。
詳細解説
誤り
grep 'status=500' access.log > wc -lwcというファイルへ出力し、-lはgrepの引数になる。
wcをファイル名として扱う。
誤り
grep 'status=500' access.log < wc -lwcという入力ファイルを開こうとする誤った方向である。
入力方向が逆で構文も要件に合わない。
正しい
grep 'status=500' access.log | wc -lgrepの標準出力をwc -lの標準入力へ接続する。
正解。抽出結果だけをwcへ渡す。
誤り
wc -l access.log | grep 'status=500'先に全行数へ集計し、元のログ行をgrepできない。
抽出前にログ全体を単一の数値へ変える。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'status=200
status=500
status=500
' | grep 'status=500' | wc -l期待される結果
2(前の空白幅は環境により異なる)理解のポイント
- |は出力から入力へ接続
- grepが抽出
- wc -lが結果行数を集計
確認時の注意
- 確認環境: Bash 5.2 / GNU grep・coreutils
基礎のおさらい
中間ファイル不要
パイプはプロセス間でストリームを渡すため、一時ファイルを作らず段階処理できる。
終了状態
Bashの既定ではパイプライン全体の終了状態は最後のコマンドに基づく。pipefailで動作を変更できる。
問題IDKP-103-071
確認環境Bash 5.2 / GNU grep・coreutils
最終技術確認2026-08-12
誤り・権利侵害を報告