Linux檔案儲存體之inode、永久連結、軟連結方法,檔案儲存體inode
檔案儲存體
檔案儲存體在硬碟上,扇區(sector)是磁碟中最小的實體儲存體單位,通常情況下每個扇區的大小是512位元組,但為了提高效率,作業系統在讀取硬碟的時候往往是一次讀取多個扇區(多個扇區組成塊),所以塊(block)是檔案存取的最小單位;最常見的塊的大小為4KB;
由於檔案儲存體在塊中,所以我們需要一些特殊的東西(inode)來索引這些塊,同時也包含了檔案的一些元資訊,比如建立者、建立日期、建立時間等,這些特殊的東西稱之為”索引節點”(inode);可以通過命令:stat 檔案名稱 來查看一個檔案的inode資訊;
其中Inode:1036334是該檔案對應的inode的號碼;其它資訊在下文說明;
因為inode也要被儲存也要消耗磁碟空間,所以在磁碟被格式化的時候,作業系統將其分為兩個部分,一部分用於儲存inode,一部分用於儲存真正的資料;由於inode在格式化磁碟的時候就被設定,且數量有限,所以有可能出現inode被用完,磁碟仍有空間卻不能建立檔案的情況;可以通過命令:df -i 查看每個硬碟分區的inode總數和已經使用的數量;
其實作業系統查看一個檔案並不是通過檔案名稱來開啟的,而是通過inode索引到對應的塊來找到目標檔案,那作業系統是如何找到這些inode的呢?每個inode都有一個對應的ID號。我們開啟一個檔案,在系統內部實際上分為三個步驟:(1)系統找到這個檔案名稱對應的inode號碼;(2)通過inode號碼找到對應的inode,擷取inode資訊,判斷許可權等;(3)通過inode索引到對應的塊,讀資料;可以通過命令:ls -i 檔案名稱 來查看一個檔案對應的inode號碼;
永久連結、軟連結、inode、block的關係如下所示(軟、永久連結在下文說明):
永久連結和軟連結
通常檔案名稱和inode號碼是一一對應的,但是Linux系統允許多個檔案名稱指向同一個inode號碼;比如我們建立檔案file1,通過永久連結的方式建立file2,分別查看這兩個檔案的inode號碼,會發現他們是一樣的;那什麼是永久連結?與之對應的軟連結又是什嗎?
永久連結:
可以通過不同的檔案名稱訪問同樣的內容(或是說同一個inode),對檔案內容做修改,會在所有的檔案名稱中體現出來(這更像是php中的引用傳值),但是刪除某一個檔案名稱,並不會對其它的檔案名稱產生影響,檔案內容也不會被刪除,只有當所有的檔案名稱都被刪除時,檔案內容才會被刪除,這種情況就叫做永久連結,即多個檔案名稱索引同一個inode號碼,通過 stat 檔案名稱 可以查看某個檔案對應的inode被多少個檔案名稱連結,舉例如下:
Links:2說明有兩個檔案名稱連結至該inode(1036334),這是因為我建立了檔案file1,同時建立了該檔案的一個永久連結file2(下文有具體的操作);
建立永久連結舉例如下:
建立檔案file1:touch file1
建立永久連結file2:ln file1 file2
查看檔案資訊:ls -li
發現兩個檔案名稱對應的inode號碼均為:1036334,連結到該inode的連結個數為2(-rw-rw-r–許可權後的數字表示指向該inode號碼的連結數)
刪除file1:sudo rm file1
查看檔案資訊:ls -li
檔案仍存在,且inode號碼也未改變,連結到該inode的連結個數變為1;
軟連結:
軟連結(如下文file3)其實更像windows系統下的案頭捷徑,它本身也是一個檔案(有新的inode號碼),只是它儲存的不是檔案內容(file1),而是軟連結指向的檔案名稱的地址(file1的地址),如果刪除file3,對檔案內容不產生影響,刪除file1,會使file3失效;
建立軟連結file3:ln -s file1 file3
查看檔案:ls -li
連結到1036334inode的連結數仍然為2,說明file3並未連結到1036334
刪除file3:sudo rm file3
查看檔案:ls -li
並未對file1產生影響;
刪除file1:sudo rm file1
查看檔案:ls -li
發現file3已變紅失效;