inodeとは?
ファイルのメタデータとデータ位置を管理するためのデータ構造です.
ファイルの実体に1対1で対応する,OSにとっての"ファイル名"と言えるかもしれませんね.
Linuxでは,
ファイル名
↓
inode番号
↓
inode構造体
↓
data
という構造になっています.
つまり,ファイル名そのものがファイルを表しているのではなく,inode値を介して実体にたどり着くようになっています.
inode構造体
ファイル名以外のファイルのメタデータが入っています.
【例】ext4
inode構造体
- ファイル種別
- パーミッション
- 所有者 UID, GID
- サイズ
- 作成・更新時刻
- ハードリンク数
- データブロックへのポインタ
ファイル名はディレクトリエントリにinodeとともに保存されています.
directory entry
+----------+--------+
| filename | inode |
+----------+--------+
| foo.txt | 123 |
| bar.txt | 456 |
+----------+--------+
余談ですが,inodeを採用していないFATでは,ディレクトリエントリに大体の情報が置かれています.
directory entry
+------------+
| filename |
| size |
| time |
| start=5 |
+------------+
なぜinodeが必要なのか
inode構造とUnixのファイルモデルにより
- ハードリンク
- 開いたまま削除
- パーミッション管理
- タイムスタンプ管理
などを実現できます.複数のファイル名が同じファイル実体を指すこともできます.
まとめ
inodeとは「ファイルを管理するためのデータ構造」です.
もう,流石に覚えました.
……多分。