背景
最近在複習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 這種由多個扇區組...