実務で頻出する「標準入出力・ファイルディスクリプタ」関連の用語を、一言定義+最小実例でサッと確認。
入出力の流れを理解し、リダイレクトやパイプを自在に扱えるようにします。
このページで達成できること
- stdin / stdout / stderr の役割を整理
- リダイレクトとパイプの使い分けを理解
- FD を明示して制御する方法を学習
- 実務での落とし穴(順序や継承の違い)を把握
すぐ引けるミニ索引
| 用語 | 一言で | 代表コマンド/例 |
|---|---|---|
| 標準入力(stdin, FD0) | プロセスが読むデータ源 | cat < file |
| 標準出力(stdout, FD1) | 通常の出力先 | echo hello > out.txt |
| 標準エラー出力(stderr, FD2) | エラーを通知する出力 | ls nofile 2> err.txt |
| リダイレクト | 入出力をファイルや他FDへ切替 | >, 2>&1 |
| パイプ(pipe) | 出力を次コマンドの入力に接続 | `grep error log |
| tee | 出力を複製して保存と表示 | `cmd |
| /dev/null | 出力の捨て場所 | cmd > /dev/null |
| lsof | FDの利用状況を確認 | lsof -p <PID> |
用語解説(繰り返しブロック)
標準入力(stdin, FD0)
とは:プログラムが読むデフォルトの入力。通常はキーボードから。
最小実例
cat < input.txt
関連:リダイレクト / パイプ
落とし穴:非対話環境では stdin が空になる → 入力必須処理はハングすることがある。
標準出力(stdout, FD1)
とは:プログラムの通常の出力。通常は画面に表示。
最小実例
echo hello > out.txt
関連:FD1 / リダイレクト
落とし穴:標準出力と標準エラーを混同するとログ解析が困難になる。
標準エラー出力(stderr, FD2)
とは:エラーや警告を通知するための出力。通常は画面に表示。
最小実例
ls nofile 2> err.txt
関連:FD2 / リダイレクト
落とし穴:stdout と stderr をまとめるか分けるかを意識しないと、ログが混ざる。
リダイレクト(redirect)
とは:入出力をファイルや他FDに流し替える仕組み。
最小実例
cmd > out.txt 2> err.txt
cmd > all.txt 2>&1
関連:FD / stdout / stderr
落とし穴:2>&1 >file の順序では stderr がターミナルに残る → 順序は重要。
パイプ(pipe)
とは:あるコマンドの標準出力を次のコマンドの標準入力につなぐ仕組み。
最小実例
grep "500" access.log | wc -l
関連:stdin / stdout / フィルタコマンド
落とし穴:メモリを食うコマンド(sortなど)をパイプに挟むとリソース負担が大きい。
tee
とは:標準出力を複製し、画面表示とファイル保存を同時に行うコマンド。
最小実例
echo hello | tee hello.txt
関連:パイプ / stdout
落とし穴:デフォルトで上書き。追記は tee -a。
/dev/null
とは:何を書き込んでも捨てられる特殊ファイル。
最小実例
cmd > /dev/null 2>&1
関連:リダイレクト / stdout / stderr
落とし穴:デバッグ時に捨てすぎて、原因調査ができなくなることがある。
lsof
とは:プロセスが開いているファイルディスクリプタを一覧するツール。
最小実例
lsof -p $$
関連:FD / プロセス / デバッグ
落とし穴:本番環境で乱用すると情報量が多く、出力が膨大になる。
運用の現場Tips
- エラーと通常出力を分ける:ログ解析や監視で混乱を防ぐ
- 順序の理解:リダイレクトと FD の評価順で結果が変わる
- テストに /dev/null:不要な出力を抑制して挙動を確認
- lsof でトラブルシュート:FDリークやファイル保持の原因調査に有効

