【図解】Linuxのディレクトリ・inode・ブロックデバイスの関係を理解する
はじめに
Linuxのファイルシステムを理解するうえで避けて通れないのが inode の仕組みです。
本記事では、ディレクトリ・inode・ブロックデバイスの関係を1枚の図で整理します。
全体像
上の図がすべてを表しています。ポイントは3つです。
- ディレクトリはただの「対応表」 — ファイル名とinode番号のマッピングを持つだけ
- inodeがファイルの「本体情報」を管理 — 種別・サイズ・データブロックへのポインタなどのメタデータ
- 実データはブロックデバイス上に存在 — inodeのポインタが指す先にバイト列が格納されている
ディレクトリのパーミッションが意味するもの
ディレクトリに対する rwx は、通常ファイルとは意味が異なります。
| パーミッション | 意味 |
|---|---|
| r |
ls でファイル一覧を見られる |
| w | 配下ファイルの名前変更・作成・削除(※ x も必要) |
| x | 配下ファイルのinodeへアクセスできる(cd, ls -l, パスの通過) |
w だけあっても x がなければ作成・削除はできない、というのがよくあるハマりポイントです。
. と .. の正体
図中のディレクトリテーブルにある . と .. もただのエントリです。
-
.(inode 15) → 自分自身のディレクトリを指す -
..(inode 106) → 親ディレクトリを指す
ハードリンク数が「ディレクトリだと最低2」になるのは、親からのエントリ+自分の . エントリがあるためです。
まとめ
- ファイル名はディレクトリが管理し、inodeは名前を知らない
- 1つのinodeに複数のファイル名を紐づけたものがハードリンク
-
ls -iでinode番号、statでinode情報を確認できる
図を頭に入れておくと、パーミッションやリンクの挙動で迷ったときに立ち返れます。
