Programmer's Note

コード読み書きの備忘録。

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 XLInuxの今のファイルシステムはちと複雑になったのかな。 (よく知らないが)

以上。