1.inode簡介
理解inode,要從文件儲存說起。文件儲存在硬盤上,硬盤的最小存儲單位叫做”扇區”(Sector)。每個扇區儲存512字節(相當于0.5KB)。操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個”塊”(block)。這種由多個扇區組成的”塊”,是文件存取的最小單位。”塊”的大小,最常見的是4KB,即連續八個 sector組成一個 block。文件數據都儲存在”塊”中,那么很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做inode,中文譯名為”索引節點” 。
2.inode包含內容
Linux中目錄的數據塊中的每一項中都包含了文件名和其對應的inode。inode記錄了文件的屬性以及該文件實際存儲位置,即數據塊號(block number),每一個block(常見大小4KB),通過inode可以實現文件的查找定位。inode是Linux中的,Unix中是vnode。基本上,inode包含的信息至少有如下這些:
(1)文件的類型
(2)文件訪問權限;
(3)文件的所有者與組;
(4)文件的大小;
(5)鏈接數,即指向該inode的文件名總數;
(6)文件的狀態改變時間(ctime)、最近訪問時間(atime)和最近修改時間(mtime);
(7)文件特殊屬性,SUID、SGID和SBIT;
(8)文件內容的真正指向(pointer)。
可以用stat命令,查看某個文件的inode信息。
3.inode特點
inode的數量與大小在磁盤格式化的時候就已經固定了,inode的特點有:
(1)每一個inode的大小均固定為128B。可以通過命令dumpe2fs來顯示ext2/ext3/ext4文件系統信息。
$ dumpe2fs -h /dev/sda1 | grep "Inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
(2)每個文件都只占用一個inode。因此,文件系統能夠建立的文件數量與inode數量有關。系統讀取檔案時需要先找到inode,并分析inode所記錄的權限與用戶是否符合,若符合才能夠開始實際讀取block的內容。
4.操作系統讀取磁盤文件的流程
操作系統讀取磁盤文件的流程是這樣的:
(1)根據給定的文件的所在目錄,獲取該目錄的數據實體,根據數據實體中的數據項,找到對應文件的inode;
(2)根據文件inode,找到inodeTable;
(3)根據inodeTable中的對應關系,找到對應的block;
(4)讀取文件。
系統讀取磁盤文件流程示意圖如下:

舉例來說,如果想要讀取/etc/passwd文件,讀取流程如下:
(1)獲取根目錄/的inode。透過掛載點的信息找到根目錄的inode號為2;
ll -di /
2 dr-xr-xr-x 19 root root 4096 Feb 14 09:32 /
(2)根據根目錄的inode,找到根目錄的數據實體block,可以理解為一個文件到inode號的映射表,找到目錄etc的inode號;
ll -di /etc
786433 drwxr-xr-x 98 root root 12288 Feb 13 17:18 /etc
(3)根據目錄etc的inode號,讀取目錄etc的數據實體block,并找到文件passwd的inode號;
ll -i /etc/passwd
787795 -rw-r--r-- 1 root root 1552 Jan 4 14:56 /etc/passwd
(4)根據/etc/passwd文件的inode號,即可獲取/etc/passwd文件的數據實體block,完成文件的讀取。
5.inode的諸多優點
(1)對于有些無法刪除的文件可以通過刪除inode節點來刪除;
(2)移動或者重命名文件,只是改變了目錄下的文件名到inode的映射,并不需要實際對硬盤操作;
(3)刪除文件的時候,只需要刪除inode,不需要實際清空那塊硬盤,只需要在下次寫入的時候覆蓋即可(這也是為什么刪除了數據可以進行數據恢復的原因之一);
(4)打開一個文件后,只需要通過inode來識別文件。
以上就是詳解Linux索引節點inode的詳細內容,更多關于Linux索引節點inode的資料請關注腳本之家其它相關文章!