索引節點一覽(inode)
/ inode -> EYE-node /
想像一座圖書館,每本書的目錄卡記下了關於它的一切——誰擁有它、上次何時被動過、它有多大、它的書頁實際擺在書架的哪個位置——一切,唯獨不含書名。書名活在另外貼在書架上的標籤裡。索引節點就是那張目錄卡:檔案的真實記錄,保有它的全部細節,卻不含它的名字。
具體來說,索引節點(index node)是檔案系統為每個檔案保存的磁碟上結構。它儲存檔案的元資料:它的型別(普通檔案、目錄、符號連結、裝置)、它以位元組計的大小、它的權限位元與擁有者/群組、各個時間戳(上次修改、上次存取、上次狀態變更)、一個連結計數(有多少個目錄項目指向它),以及指向磁碟上實際資料區塊的指標,檔案的位元組就住在那些區塊裡。每個索引節點都有一個編號,在其檔案系統內唯一。關鍵的轉折是:索引節點並不包含檔名。名字住在目錄裡,目錄把名字對映到索引節點號碼。所以一個目錄項目就只是(名字,索引節點號碼),而索引節點則是關於這個檔案的其餘真相。
為何重要:這個「名字對索引節點」的分離,是理解整個檔案系統的關鍵。它解釋了為何一個檔案能有好幾個名字(多個目錄項目指向同一個索引節點——硬連結),為何一個檔案要等到連結計數降到零才真正被刪除,以及為何在同一檔案系統內搬移檔案,只是重寫一個目錄項目、而不碰索引節點或資料。當你執行某個指令、看到像大小、擁有者、修改時間這些欄位時,那些都直接來自索引節點。
$ stat -c '%i %s %U %y' notes.txt # 索引節點號、大小、擁有者、修改時間 1318042 482 ana 2026-06-23 10:14:02 # 名字「notes.txt」並不在這裡面
stat 顯示的一切都活在索引節點裡;檔名則活在指向它的那個目錄裡。
索引節點保有元資料與指向資料的指標,但不含檔名——正是這個單一事實,解釋了硬連結、快速更名與連結計數。刪除一個名字(unlink)只有在沒有任何名字、也沒有任何開啟的描述符仍參考其索引節點時,才真正釋放檔案。