inodeファイルシステムに感動!
「The Unix Programming Environment」 を読んで、感動しちまった。
ファイルシステムを語っている第2章で、 なんとディレクトリ自身に対して od して中身を確認して解説している! 環境はUNIX V7。(本の冒頭では、System V、4.1BSDの環境も試しているとあるから、おそらく同じだろう)
以下の実行例が示されている:
$ od -c . 000000 4 ; . \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 000020 273 ; . . \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 000040 252 ; r e c i p e s \0 \0 \0 \0 \0 \0 ...
odというコマンドは、ファイルをバイナリダンプするコマンドで、 -cオプションは8進表示の代わりに、ASCII文字表示してくれる。 上記はカレントディレクトリの中身をダンプしている。
UNIX V6, 7時代のディレクトリは事実、以下の2つ情報がずらずら並んだファイルに過ぎない。
2バイト | 14バイト |
---|---|
inode番号 | ファイル名 |
inodeというのはファイルの管理情報のテーブルの番号だ。 (中身は以前の記事UNIX V6 ファイルシステム周りの勉強メモ - Programmer's Dialy参照。)
上記のodコマンドの実行結果で、ディレクトリの中身の構造そのままが見て取れる。 つまり以下の情報が入っている(数字は8進)
inode番号 | ファイル名 |
---|---|
15156 | . |
10427 | .. |
15274 | reciepes |
ディレクトリの驚くほどシンプルなデータ構造もさることながら、 ディレクトリのデータ構造そのままダンプ出来てしまうOSの透明性っ。 このシンプルな構造でここまで柔軟に色々できてしまう、という2重の驚き。 初期のUNIXはなんと楽しいOSだったことか!
「The Art of UNIX Programming」には、「UNIXはとにかくハックして楽しいOS」ということを熱弁している箇所があるが、いま強く共感する。
ちなみに、Mac OS X で同じことやってみたら、
$od -c . od: .: Is a directory
つれない返事。Linuxでも同じだった、、、。
Mac OS XとLInuxの今のファイルシステムはちと複雑になったのかな。 (よく知らないが)
以上。