Linux中關於inode的知識總結

2022-09-26 15:24:12 字數 2298 閱讀 5351

背景

最近在複習linux命令,到df的時候發現了乙個之前忽略的東西。也就是 -i 這個選項,列出檔案系統分割槽的inode資訊。這個inode,是個什麼東西?

inode是用來做什麼的

inode是用來儲存檔案元資訊的區域。中文譯名叫做「索引節點」。

關於inode的背景知識

我們先複習下檔案儲存的一些內容。我們知道,檔案儲存在硬碟上,硬碟的最小儲存單元呢,又被稱為扇區,扇區的大小是512位元組。

作業系統在硬碟上讀取資訊時,是按照一次性讀取多個扇區的方式來的,而這多個扇區也叫塊。通常,塊的大小是4kb,大概有8個扇區的大小。需要注意的是,讀取的塊是連續的空間。

這個時候我們能知道,檔案是儲存在「塊」中的,就像我們寫c語言程式的時候,我們知道,當我們宣告乙個陣列的時候,不僅僅會儲存放在陣列裡面的值,還會儲存對應的陣列資訊,比如陣列的首位址、檔案型別和陣列長度等等,同樣的,需要找乙個地方儲存檔案的元資訊,類似於檔案的建立相關的資訊、檔案的長度等等。而這個地方,我們稱做inode。

inode中儲存的內容

inode包含著所儲存檔案的元資訊,包含著這些內容:

inode號碼

第一次看到上面的儲存內容後,我想大家多少會有相同的疑問,既然inode是儲存檔案相關資訊的,為什麼不儲存檔名呢。理由就是,檔名並不是unix/linux作業系統識別不同檔案的標準。

作業系統是通過inode號碼來識別不同檔案的。

在unix/linux系統中,使用者層名是通過檔名來開啟檔案的,系統層面主要是通過了三個步驟來開啟檔案:

inode的特殊作用

unix/linux系統中inode號碼和檔名分離,這導致了系統中一些特別的現象:

因為inode號碼的存在,系統可以在軟體不關閉的情況下進行更新。系統通過inode號碼,識別執行中的檔案,更新過程中,檔案以相同的檔名,新的inode存在,而不會影響到目前執行中的檔案。而原先舊版的inode會在軟體下一次開啟時被**,檔名會自動指向新的inode號碼。

inode空間占用問題

既然同樣是儲存在硬碟裡的資料,inode必然也是會占用硬碟空間的,當格式化硬碟的時候,作業系統會自動將硬碟分成兩個區域:

資料區主要存放檔案資料,inode table區域則是存放inode資訊。

特別的是,inode所占用的區域大小,在磁碟格式化時作業系統就已經給定。這樣做導致的後果就是,資料區的空間明明還沒有使用完,但是卻無法繼續訪問資料了,這時因為inode table區域已經用滿了,所以無法再往磁碟裡儲存新的檔案。

目錄檔案

我們知道,在unix/linux中,任何資源都是以檔案的形式存在的。目錄也是。我們開啟目錄,實際上就是開啟目錄檔案。目錄檔案的結構就是乙個列表。

目錄項 = 所包含檔案檔名 + 對應inode號碼。

硬鏈結和軟鏈結

關於具體什麼是硬鏈結什麼是軟鏈結,我就不在這篇博文裡贅述了,僅從inode角度去考慮。

從inode號碼的角度考慮,unix/linux系統中,是允許多個檔名指向同乙個inode號碼的。這個時候,如果刪除掉其中乙個檔名,不影響另乙個檔名的訪問,同時,如果通過乙個檔名開啟檔案並作出修改,其他檔名開啟時可以共享到該修改。那麼就稱這種為「硬鏈結」。在linux中,我們可以通過ln命令來建立硬鏈結。

上面總結到,在inode中,有乙個儲存項叫做「鏈結數」,記錄只想該inode的檔名總數。如果通過硬鏈結方式建立乙個檔名指向某檔案,那該檔案對應的inode資料域中鏈結數部分就會 + 1,反之 - 1 。當這個值為0時,系統就會預設沒有檔名指向該inode,此時,就會**該inode號碼,並且**對應的塊區域。

而對應的軟鏈結,假設有檔案a和檔案b,b是a的軟鏈結。這個時候,a和b的inode號碼是不同的,因為它們是不同的檔案,但是!b的內容是a的路徑,讀取b的時候,系統會自動訪問a,所以無論開啟哪個檔案,訪問的都是檔案a。這個時候,檔案b就被稱為檔案a的「軟鏈結」或者「符號鏈結」。

在unix/linux系統中,我們可以通過ln -s 命令來建立軟鏈結。

yxweoxthi

總結和小補充

通過上面的敘述,我們知道inode就像c語言中的指標域,指標域記錄著多種資訊,並把我們導向正確的檔案位置,讀取需要的資訊。(當然也不是完全像。)

unix/linux系統中建立目錄時,會自動生成兩個目錄項:

可以通過 ls -al 命令觀察到這兩個目錄。「.目錄「的inode號碼是當前目錄的inode號碼,等同於當前目錄的硬鏈結,而「..「目錄的inode號碼是當前目錄父目錄的inode號碼,等同於父目錄的硬鏈結。目錄硬鏈結總數 = 2 + 子目錄總數(包括隱藏檔案)。

本文標題: linux中關於inode的知識總結

本文位址: /os/linux/193948.html

linux中inode的理解

一 inode是什麼?理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個 塊 block 這種由多個扇區組...

linux中的inode索引問題

linux中的inode索引的相關問題 檔案系統是資料在硬碟上的一種排列組織方式,linux每個分割槽都可以格式化為不同的檔案系統,所以可以說每個分割槽都是乙個檔案系統,都有自己的目錄層次結構。而在目錄之下,linux已經將所有的資源處理成為檔案,不論是目錄還是命令,之後linux會將這些分屬不同分...

LINUX 關於inode的一些理解

一 inode是什麼?理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個 塊 block 這種由多個扇區組...