メインコンテンツへ
ソフトウェアコンピュータシステム

次のシェルスクリプトのコマンドライン `cat access.log | grep "ERROR" | wc -l > error_count.txt` について、データの流れとリダイレクトの説明として正しいものはどれか。

ア.access.logの全内容をerror_count.txtにコピーし、grepとwcは並列に実行される
イ.`>` 記号はerror_count.txtからaccess.logへデータを流す(入力リダイレクト)
ウ.パイプ `|` によりコマンドが直列実行され、最終結果がコンソールに表示される
エ.access.logを読んでERRORを含む行だけ抽出し、その行数を数えて結果をerror_count.txtに書き込む正解

解説

シェルのパイプは「工場の生産ライン」。各コマンドが職人として前から受け取り→加工して→次へ渡す。最後の`>`で製品を倉庫(ファイル)に収める!

なぜ エ が正解か

データフロー: ①cat access.log → ファイルを標準出力に出力。②| grep "ERROR" → catの出力を受け取り"ERROR"含む行のみ通過。③| wc -l → grepの出力を受け取り行数を数える。④> error_count.txt → wc -lの結果(数値1つ)をファイルに書き込み(上書き)。パイプ`|`は直列(シーケンシャル)に標準出力→標準入力を繋ぐ。

なぜ ア は間違いか

catの出力全体をerror_count.txtにコピーする動作ではない。パイプを通じてgrepとwcが順番に処理した後、最終的な行数のみが書き込まれる。

なぜ イ は間違いか

`>` はファイルへの出力リダイレクト(書き込み)。入力リダイレクトは `<` を使う。データはコマンド→ファイルの方向に流れる。

なぜ ウ は間違いか

パイプは直列実行だが、最終結果はコンソールには表示されない。`> error_count.txt` により結果がファイルにリダイレクトされ、コンソール出力は抑制される。

出典: AI生成問題(学習用)