ファイルディスクリプタとシェルリダイレクトの基礎¶
ファイルディスクリプタ(FD)とは¶
UNIX 系 OS では、プロセスが扱う入出力は番号付きの識別子で管理される。これをファイルディスクリプタ(File Descriptor / FD)と呼ぶ。
| FD番号 | 名前 | 内容 |
|---|---|---|
| 0 | stdin | 標準入力 |
| 1 | stdout | 標準出力 |
| 2 | stderr | 標準エラー出力 |
通常、stdout と stderr はともにターミナル(画面)へ表示される。
基本的なリダイレクト¶
リダイレクトとは、入出力の行き先を別の場所へ付け替えること。
# 標準出力をファイルに書き込む(上書き)
command > output.log
# 標準出力をファイルに追記
command >> output.log
# 標準入力をファイルから読み込む
command < input.txt
FDリダイレクト:2>&1¶
2>: FD 2(stderr)の出力先を変更する&1: ファイルではなく FD 1(stdout)を指定する
つまり、stderr を stdout と同じ行き先に向ける指定。
典型的な使用例¶
- stdout →
all.log - stderr → stdout →
all.log
すべての出力を1ファイルに集約できる。
順序の重要性¶
FD リダイレクトは左から順に評価される。この場合:
1. 2>&1: stderr が「その時点の stdout(ターミナル)」に向く
2. > all.log: stdout だけが all.log に変わる
結果として stderr はターミナルに出てしまう。
正しい書き方:
省略記法(bash / zsh)¶
出力の破棄¶
まとめ¶
- ファイルディスクリプタは stdin(0) / stdout(1) / stderr(2) の3つが基本
2>&1は stderr を stdout の行き先に向ける- FD リダイレクトは左から順に評価される(順序が重要)
&> fileは> file 2>&1の省略記法