鏈結為 linux 系統解決了檔案的共享使用問題,還帶來了隱藏檔案路徑、增加許可權安全及節省儲存等好處。鏈結分兩種,一種被稱為硬鏈結(hard link),另一種被稱為符號鏈結(symbolic link),也即軟鏈結(soft link)。本文,我們將詳細講解關於這兩種鏈結的區別與聯絡。
要理解「硬鏈結」與「軟鏈結」,首先要從inode講起。
inode是指在許多「類unix檔案系統」中的一種資料結構。每個inode儲存了檔案系統中的乙個檔案系統物件(包括檔案、目錄、裝置檔案、socket、管道,等等)的元資訊資料,但不包括資料內容或者檔名。
檔案系統建立(格式化)時,就把儲存區域分為兩大連續的儲存區域。乙個用來儲存檔案系統物件的元資訊資料,這是由inode組成的表(inode table),每個inode預設是256位元組或者128位元組。另乙個用來儲存「檔案系統物件」的內容資料,劃分為512位元組的扇區(sector),以及由8個扇區組成的4k位元組的塊。塊是讀寫時的基本單位。乙個檔案系統的inode的總數是固定的。這限制了該檔案系統所能儲存的檔案系統物件的總數目。典型的實現下,所有inode占用了檔案系統1%左右的儲存容量。檔案系統中每個「檔案系統物件」對應乙個「inode」資料,並用乙個整數值來辨識。這個整數常被稱為inode號碼(「i-number」或「inode number」)。由於檔案系統的inode表的儲存位置、總條目數量都是固定的,因此可以用inode號碼去索引查詢inode表。inode儲存了檔案系統物件的一些元資訊,知道了1個檔案的inode號碼,就可以在inode元資料中查出檔案內容資料的儲存位址,從而獲取檔案內容資料。
unix/linux系統內部不使用檔名,而使用inode號碼來識別檔案。對於系統來說,檔名只是inode號碼便於識別的別稱或者綽號。表面上,使用者通過檔名,開啟檔案。實際上,系統內部這個過程分成三步:首先,系統找到這個檔名對應的inode號;其次,索引查詢inode表,獲取inode資訊;最後,根據inode資訊,找到檔案資料所在的block,讀出資料。程式通過檔名獲取檔案內容的過程如下:
inode所包含的元資訊資料,具體來說有以下內容:
可以用stat(linux命令列——stat命令詳解)命令,來檢視某個檔案的inode資訊:
總之,除了檔名以外的所有檔案資訊,都存在inode之中。
inode的總數,在格式化時就給定,一般是每1kb或每2kb就設定乙個inode。假定在一塊1gb的硬碟中,每個inode的大小為128位元組,每1kb就設定乙個inode,那麼inode table的大小就會達到128mb,佔整塊硬碟的12.8%。檢視每個硬碟分割槽的inode總數和已經使用的數量,可以使用df -i:
由於每個檔案都必須有乙個inode,因此有可能發生inode已經用光,但是硬碟還未存滿的情況。這時,就無法在硬碟上建立新檔案。
使用ls -i命令,可以看到檔名對應的inode號碼:
這裡值得說明的是,移動或者重新命名檔案,均不會改變檔案所對應的inode號。
關於inode,還有以下幾點說明:
ln oldfile newfile
執行上面這條命令以後,原始檔oldfile與目標檔案newfile的inode號相同,都指向同乙個inode。inode資訊中有一項為」links」,記錄指向該inode的檔名總數,這時就會增加1。反過來,刪除乙個檔名,就會使得inode中的」links」減1。當這個值減到0,表明沒有檔名指向這個inode,系統就會**這個inode號,以及其所對應block區域(只是把inode標記為可用,檔案在block中的內容是沒有被清除的,只有在有新的檔案需要占用block的時候,才會被覆蓋)。也就是說,檔案真正刪除的條件是與之相關的所有硬鏈結檔案均被刪除。也因此,使用者可以建立硬鏈結到重要檔案,以防止「誤刪」的功能。
軟鏈結類似於windows中的快捷方式。與硬鏈結不同,軟鏈結檔案使用者資料塊中存放的內容是另一檔案的路徑名的指向。因此,軟鏈結就是乙個普通檔案,只是資料塊內容有點特殊。軟鏈結有著自己的 inode 號以及使用者資料塊。軟鏈結的建立方式如下:
修改軟連線或者硬鏈結都會導致原始檔改變,可以達到同步的目的;
刪除軟鏈結或者硬鏈結檔案都不會刪掉原始檔案;
刪除原始檔會導致軟連線失效 ,而硬鏈結檔案還是完整的;
在檔案屬性上軟鏈結明確寫出了是鏈結檔案(用「l」表示),而硬鏈結沒有寫出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係。
有時,檔名包含特殊字元,無法正常刪除。這時,直接刪除inode節點,就能起到刪除檔案的作用。
如上圖所示,我們首先獲取檔案的inode號,然後據此獲得檔名,最後再刪除即可。
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
Linux中的硬鏈結與軟鏈結
inode ext檔案系統的每個目錄與檔案都有乙個inode與之對應,inode裡儲存了檔案和目錄實際儲存內容的data block的號碼,簡而言之就是inode是乙個檔案索引 例如我們執行以下shell alexis idiotic youth tests ls li total 0524759 ...
linux硬鏈結與軟鏈結
1.linux鏈結概念 linux鏈結分兩種,一種被稱為硬鏈結 hard link 另一種被稱為符號鏈結 symbolic link 預設情況下,ln命令產生硬鏈結。硬連線 硬連線指通過索引節點來進行連線。在linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節...
Linux 硬鏈結與軟鏈結
原貼 2007 08 05 10 19 49 linux硬鏈結與軟鏈結 2006 12 01 15 03 首先要弄清楚,在linux系統中,核心為每乙個新建立的檔案分配乙個inode 索引結點 每個檔案都有乙個惟一的inode號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實...