Linux中硬鏈結與軟鏈結的區別與聯絡

2021-08-01 10:47:37 字數 2752 閱讀 7774

鏈結為 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號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實...