你真的對 Linux 中的 Inode 瞭解嗎?

NaturalGao發表於2019-12-16

引言

inode 是一個Linux 非常重要的知識點,瞭解它有利於我們對Linux系統的進一步瞭解。

今天無意中看到了阮一峰老師對inode做的一個部落格筆記,我這裡簡單的記錄下學到的東西。

概念

儲存單位:

  1. 扇區 (Sector),存世512位元組(相當於0.5kb)

  2. 塊(block),8個Sector 組成一個 block

檔案儲存分為兩個部分:

  1. 資料儲存

  2. 檔案元資訊

檔案元資訊就是inode

inode內容

inode檔案元資訊包含以下內容:

  1. 檔案的位元組數

  2. 檔案擁有者的User ID

  3. 檔案的Group ID

  4. 檔案的讀、寫、執行許可權

  5. 檔案的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。

  6. 連結數,即有多少檔名指向這個inode

  7. 檔案資料block的位置

檢視inode資訊

stat 1.txt

檢視硬碟的inode總數和已經使用數量

df -i

inode號碼

每個檔案都會有inode號碼,相當於mysql 資料庫裡的表id,用來查詢資料的。每個檔名都會對應一個inode號碼,我們開啟一個檔案的時候實際經歷了以下步驟:

  1. 通過檔名去找對應的inode號碼

  2. 通過inode號碼獲取inode資訊

  3. 通過inode資訊查詢資料所在的block,讀取資料

檢視檔案/目錄的inode號碼

ls -i 1.txt

特殊作用

由於inode號碼與檔名分離,這種機制導致了一些Unix/Linux系統特有的現象。

  1. 有時,檔名包含特殊字元,無法正常刪除。這時,直接刪除inode節點,就能起到刪除檔案的作用。

  2. 移動檔案或重新命名檔案,只是改變檔名,不影響inode號碼。

  3. 開啟一個檔案以後,系統就以inode號碼來識別這個檔案,不再考慮檔名。因此,通常來說,系統無法從inode號碼得知檔名。

第3點使得軟體更新變得簡單,可以在不關閉軟體的情況下進行更新,不需要重啟。因為系統通過inode號碼,識別執行中的檔案,不通過檔名。更新的時候,新版檔案以同樣的檔名,生成一個新的inode,不會影響到執行中的檔案。等到下一次執行這個軟體的時候,檔名就自動指向新版檔案,舊版檔案的inode則被回收。

篇尾

堅持每天學一點,知識是需要日積月累的,加油~ 分享給大家~

參考

個人部落格

原文

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章