大部分的Linux檔案系統(如ext2、ext3)規定,一個檔案由目錄項、inode和資料塊組成:
目錄項:包括檔名和inode節點號。
Inode:又稱檔案索引節點,包含檔案的基礎資訊以及資料塊的指標。
資料塊:包含檔案的具體內容。
一、目錄塊
Linux系統中,目錄(directory)也是一種檔案。開啟目錄,實際上就是開啟目錄檔案。
目錄檔案的結構非常簡單,就是一系列目錄項(dirent)的列表。每個目錄項,由兩部分組成:所包含檔案的檔名,以及該檔名對應的inode號碼。
ls命令只列出目錄檔案中的所有檔名: ls /etc
ls -i命令列出整個目錄檔案,即檔名和inode號碼: ls -i /etc
如果要檢視檔案的詳細資訊,就必須根據inode號碼,訪問inode節點,讀取資訊。ls -l命令列出檔案的詳細資訊。 ls -l /etc
二、Inode
1、inode是什麼
理解inode,要從檔案儲存說起。
檔案儲存在硬碟上,硬碟的最小儲存單位叫做“扇區”(Sector)。每個扇區儲存512位元組(相當於0.5KB)。
作業系統讀取硬碟的時候,不會一個個扇區的讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個“塊”(block)。這種由多個扇區組成的“塊”,是檔案存取的最小單位。“塊”的大小,最常見的是4KB,即連續八個sector組成一個block。
檔案資料都儲存在“塊”中,那麼很顯然,我們還必須找到一個地方儲存檔案的“元資訊”,比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為"索引節點"。
inode包含檔案的元資訊內容(除了檔名之外所有的檔案資訊)
檔案的位元組數。
檔案型別。
檔案擁有者的User ID。
檔案的Group ID。
檔案的讀、寫、執行許可權。
檔案的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。
連結數,即有多少檔名指向這個inode。
檔案資料block的位置(資料塊指標)。
2、inode的大小
inode也會消耗硬碟空間,所以硬碟格式化的時候,作業系統自動將硬碟分成兩個區域。一個是資料區,存放檔案資料;另一個是inode區(inode table),存放inode所包含的資訊。每個inode節點的大小,一般是128位元組或256位元組。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設定一個inode。假定在一塊1GB的硬碟中,每個inode節點的大小為128位元組,每1KB就設定一個inode,那麼inode table的大小就會達到128MB,佔整塊硬碟的12.8%。
由於每個檔案都必須有一個inode,因此有可能發生inode已經用光,但是硬碟還未存滿的情況。這時,就無法在硬碟上建立新檔案。
3、inode號碼
每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案。這裡值得重複一遍,Linux系統內部不使用檔名,而使用inode號碼來識別檔案。對於系統來說,檔名只是inode號碼便於識別的別稱或者綽號。表面上,使用者透過檔名,開啟檔案。實際上,系統內部這個過程分成三步:首先,系統找到這個檔名對應的inode號碼;其次,透過inode號碼,獲取inode資訊;最後,根據inode資訊,找到檔案資料所在的block,讀出資料。
三、資料塊
資料塊就是在磁碟上儲存資料的地方,使用檔案的時候由操所繫統索引inode來呼叫相應的檔案
補充:建立一個新檔案的操作
儲存屬性核心先找到一個空閒的 i 節點(這裡是131074 )核心把檔案資訊記錄到其中
儲存資料該檔案需要儲存在三個磁碟塊,核心找到了三個空閒塊:300、500、800將核心緩衝區的第一塊資料複製到300,下一塊複製到500,以此類推
記錄分配情況檔案內容按順序 300、500、800存放,核心在 inode 上的磁碟分佈區記錄了上述塊列表。
大部分的Linux檔案系統(如ext2、ext3)規定,一個檔案由目錄項、inode和資料塊組成:
目錄項:包括檔名和inode節點號。
Inode:又稱檔案索引節點,包含檔案的基礎資訊以及資料塊的指標。
資料塊:包含檔案的具體內容。
一、目錄塊
Linux系統中,目錄(directory)也是一種檔案。開啟目錄,實際上就是開啟目錄檔案。
目錄檔案的結構非常簡單,就是一系列目錄項(dirent)的列表。每個目錄項,由兩部分組成:所包含檔案的檔名,以及該檔名對應的inode號碼。
ls命令只列出目錄檔案中的所有檔名: ls /etc
ls -i命令列出整個目錄檔案,即檔名和inode號碼: ls -i /etc
如果要檢視檔案的詳細資訊,就必須根據inode號碼,訪問inode節點,讀取資訊。ls -l命令列出檔案的詳細資訊。 ls -l /etc
二、Inode
1、inode是什麼
理解inode,要從檔案儲存說起。
檔案儲存在硬碟上,硬碟的最小儲存單位叫做“扇區”(Sector)。每個扇區儲存512位元組(相當於0.5KB)。
作業系統讀取硬碟的時候,不會一個個扇區的讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個“塊”(block)。這種由多個扇區組成的“塊”,是檔案存取的最小單位。“塊”的大小,最常見的是4KB,即連續八個sector組成一個block。
檔案資料都儲存在“塊”中,那麼很顯然,我們還必須找到一個地方儲存檔案的“元資訊”,比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為"索引節點"。
inode包含檔案的元資訊內容(除了檔名之外所有的檔案資訊)
檔案的位元組數。
檔案型別。
檔案擁有者的User ID。
檔案的Group ID。
檔案的讀、寫、執行許可權。
檔案的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。
連結數,即有多少檔名指向這個inode。
檔案資料block的位置(資料塊指標)。
2、inode的大小
inode也會消耗硬碟空間,所以硬碟格式化的時候,作業系統自動將硬碟分成兩個區域。一個是資料區,存放檔案資料;另一個是inode區(inode table),存放inode所包含的資訊。
每個inode節點的大小,一般是128位元組或256位元組。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設定一個inode。假定在一塊1GB的硬碟中,每個inode節點的大小為128位元組,每1KB就設定一個inode,那麼inode table的大小就會達到128MB,佔整塊硬碟的12.8%。
由於每個檔案都必須有一個inode,因此有可能發生inode已經用光,但是硬碟還未存滿的情況。這時,就無法在硬碟上建立新檔案。
3、inode號碼
每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案。
這裡值得重複一遍,Linux系統內部不使用檔名,而使用inode號碼來識別檔案。對於系統來說,檔名只是inode號碼便於識別的別稱或者綽號。表面上,使用者透過檔名,開啟檔案。實際上,系統內部這個過程分成三步:首先,系統找到這個檔名對應的inode號碼;其次,透過inode號碼,獲取inode資訊;最後,根據inode資訊,找到檔案資料所在的block,讀出資料。
三、資料塊
資料塊就是在磁碟上儲存資料的地方,使用檔案的時候由操所繫統索引inode來呼叫相應的檔案
補充:建立一個新檔案的操作
儲存屬性
核心先找到一個空閒的 i 節點(這裡是131074 )
核心把檔案資訊記錄到其中
儲存資料
該檔案需要儲存在三個磁碟塊,核心找到了三個空閒塊:300、500、800
將核心緩衝區的第一塊資料複製到300,下一塊複製到500,以此類推
記錄分配情況
檔案內容按順序 300、500、800存放,核心在 inode 上的磁碟分佈區記錄了上述塊列表。