Instiq
第3章 · GNUとUnixのコマンド·v1.0.0·更新 2026/7/6·読了目安 約12分

変更要約: 初版(主題1.03・副主題1.03.1〜1.03.5に対応)

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

この節の要点

コマンドの入出力を自在につなぎ替える仕組みを学びます。標準入力標準出力標準エラー出力の3本のストリームリダイレクト(<・>・>>・2>&1)、パイプ(|)による連結、出力を引数に変える xargs、画面とファイルへ二股出力する tee を押さえます。

前節で揃えた道具をつなぐ配管がこの節です。すべてのコマンドは 標準入力(0)・標準出力(1)・標準エラー出力(2)という3本のストリームを持ち、これを付け替えるのがリダイレクト、コマンド同士を直結するのがパイプです。

3.3.1リダイレクトの基本

  • >=標準出力をファイルへ(上書き)/>>追記<=ファイルを標準入力に。
  • エラーだけ=2> err.log両方まとめてcommand > all.log 2>&1順序が重要:先に 1 をファイルへ→ 2 を 1 と同じ先へ)。
  • 捨てたい出力は /dev/null へ(2> /dev/null=エラーを非表示)。

3.3.2パイプ・xargs・tee

  • パイプ(|)=左のコマンドの標準出力を右の標準入力へ直結(ps aux | grep nginx)。標準エラーはパイプに乗らない(乗せるなら 2>&1 を先に)。
  • xargs=流れてきたテキストを次のコマンドの引数に変換(find . -name "*.tmp" | xargs rm)。「標準入力を読まないコマンド」に値を渡す橋渡し。
  • tee=ストリームを画面(標準出力)とファイルの両方へ複製(make 2>&1 | tee build.log)。-a で追記。
試験ポイント

「上書き > と追記 >> の区別」「エラーも含めて保存=> file 2>&1」「パイプに乗るのは標準出力だけ」「引数化=xargs・二股=tee」 が最重要です。2>&1 > file(順序が逆=エラーは画面のまま)と > file 2>&1 の違いは 101 試験の名物ひっかけです。

> file 2>&1順序の意味を追いかけてみましょう。リダイレクトは左から右へ順に適用されます。まず > file で「1番(標準出力)→ file」に付け替え、次の 2>&1 は「2番(標準エラー)→ 今の1番と同じ場所=file」という意味になり、両方が file に入ります。逆に 2>&1 > file だと、まず「2番→今の1番=画面」に固定されてから 1番だけが file へ向かうため、エラーは画面に残ります。この「&1 はその時点の1番の複製」という理解が急所です。xargs が必要になる理由も仕組みで掴めます:rm は標準入力からファイル名を読まないので、find … | rm は動きません。find … | xargs rm が正解形で、対して grep のように標準入力を読むコマンドはパイプ直結で足ります。長いビルドの記録には command 2>&1 | tee log が定番=画面で進捗を見ながら完全なログも残せます。

記法意味典型用途
> / >>標準出力を上書き/追記結果の保存/ログ追記
2> / 2>&1エラーのみ/1と同じ先へエラー分離/全部まとめて保存
| と xargs出力→入力/出力→引数grep 系へ/rm・mkdir 系へ
tee画面とファイルへ複製ビルドログの記録
注意

ひっかけ: 「command 2>&1 > file で標準出力とエラーの両方が file に入る」は誤りです。この順序ではエラーは画面に残ります(正しくは > file 2>&1)。また「パイプは標準エラーも次のコマンドへ渡す」も誤り=パイプに乗るのは標準出力だけです。

リダイレクト・パイプ・xargs/tee の役割を3列に整理した図。
2>&1 は「その時点の1番と同じ先」

3.3.3この節のまとめ

  • 0=stdin/1=stdout/2=stderr>上書き・>>追記・両方保存は > file 2>&1(順序が命)・捨て先は /dev/null
  • パイプ=stdout→stdin 直結(stderr は乗らない)。引数に変えるなら xargs・画面とファイル両方なら tee

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. バッチ処理の標準出力と標準エラー出力の両方を result.log に保存したい。正しいコマンドは?

Q2. find で見つけた大量の一時ファイルを rm で削除したい。rm は標準入力からファイル名を読まない。適切なコマンドは?

Q3. 長時間のビルドの出力を、画面で確認しながら build.log にも記録したい。適切なコマンドは?

理解度を確認第3章「GNUとUnixのコマンド」の問題を解く