Linux的硬鏈結和軟連線(符號鏈結)的區別

2021-09-24 09:19:08 字數 2278 閱讀 6878

1.什麼是目錄?

linux 檔案系統是樹狀結構的。根目錄下存在一系列子目錄。目錄裡邊有檔案或者子目錄。 但問題在於:

目錄是什麼?

檔案又是什麼?

檔案是:資料 + 屬性(比如名字、建立時間、所有者之類)

目錄是:乙個列表,列表中的每一項是:inode –> filename

linux 檔案系統把硬碟分為三個部分:超級塊、inode 列表、資料區inode 指示:該檔案的資料存放在資料區的哪些塊內。因為這個「對映」關係不能變更,因此,inode 相當於代表著檔案本身。(值得注意的是,檔名與檔案本身不是直接對映起來的,中間隔著 inode)

首先要弄清楚,在linux系統中,核心為每乙個新建立的檔案分配乙個inode(索引結點),每個檔案都有乙個惟一的inode號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到記憶體,從而實現檔案的快速訪問。

鏈結是一種在共享檔案和訪問它的使用者的若干目錄項之間建立聯絡的一種方法。

硬鏈結說白了是乙個指標,指向檔案索引節點,系統並不為它重新分配inode。可以用:ln命令來建立硬鏈結。

當我們建立了乙個檔案的硬鏈結時,硬鏈結會使用和檔案相同的inode號,此時我們發現,原來的檔案的inode連線數由最初的1變為了2,實際上硬鏈結和檔案使用了相同的inode,只不過是inode連線數增加了,刪除檔案不會影響硬鏈結,硬鏈結的inode數會從2變為1,如下所示:

只有將所有指向檔案內容的指標,也即鏈結數減為0時,核心才會把檔案內容從磁碟上刪除。另外,硬鏈結,只能應用於檔案,而不能應用於目錄,而且不能跨檔案系統(即分割槽)。

符號鏈結是對乙個檔案的間接指標。硬鏈結直接指向檔案的i節點。

軟鏈結克服了硬鏈結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號鏈結。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網路對檔案進行鏈結。建立軟鏈結,只要在ln後面加上選項 –s。

在建立檔案的軟鏈結時,軟鏈結會使用乙個新的inode,所以軟鏈結的inode號和檔案的inode號不同,軟鏈結的inode裡存放著指向檔案的路徑,刪除檔案,軟鏈結也無法使用了,因為檔案的路徑不存在了;當我們再次建立這個檔案時(檔名與之前的相同),軟鏈結又會重新指向這個檔案(inode號與之前的不同了),而硬鏈結不會受其影響,如下所示:

當然軟鏈結也有硬鏈結沒有的缺點,因為鏈結檔案包含有原檔案的路徑資訊,所以當原檔案從乙個目錄下移到其他目錄中,再訪問鏈結檔案,系統就找不到了,而硬鏈結就沒有這個缺陷,你想怎麼移就怎麼移;還有它要系統分配額外的空間用於建立新的索引節點和儲存原檔案的路徑。

掛載點

只能在同種儲存**上的檔案之間建立硬鏈結(hard link),不能在不同掛載點下的檔案間建立硬鏈結,對於後一種情況,可以使用軟鏈結;(區分不同掛載點與同一掛載點不同目錄)

目錄

軟連線就相當於 win 中的快捷方式即如果軟鏈結乙個目錄只是乙個目錄的快捷方式到指定位置,作業系統找這個快捷方式會直接找到真實目錄下的檔案。但是硬鏈結的話,相當於映象的方式,建立乙個目錄的硬鏈結之後,作業系統需要把這個目錄下所有的檔案都要做一次硬鏈結(複製乙份過去),這樣作業系統在訪問這個鏈結的時候要不斷去遍歷,大大增加複雜度,而且很容易進入死迴圈。

硬鏈結不能對目錄建立受限於檔案系統的設計。linux 檔案系統中的目錄均隱藏了兩個特殊的目錄,當前目錄和父目錄。其實是兩個硬鏈結,若系統執行對目錄建立硬鏈結,則會產生目錄環。

小結

總結一下,可以看出,硬鏈結原檔案&鏈結檔案公用乙個inode號,說明他們是同乙個檔案,而軟鏈結原檔案&鏈結檔案擁有不同的inode號,表明他們是兩個不同的檔案;在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈結沒有寫出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係,就像檔案被複製了乙份一樣;鏈結數目是不一樣的,軟鏈結的鏈結數目不會增加,硬鏈結會相應的加一;檔案大小是不一樣的,硬鏈結檔案顯示的大小是跟原檔案是一樣的,而這裡軟鏈結顯示的大小與原檔案就不同了。

關於硬鏈結和軟連線(符號鏈結)的區別

和linux系統下提供ln指令來進行檔案鏈結。檔案鏈結主要分為硬鏈結和軟鏈結。硬鏈結 由於linux下的檔案是通過索引節點 inode 來識別檔案,硬連線不會建產新的inode,硬連線不管有多少個,都指向的是同乙個inode節點,只是新建乙個hard link會把結點連線數增加,只要結點的連線數不是...

關於硬鏈結和軟連線(符號鏈結)的區別

分類 linux 2009 05 11 16 32 6996人閱讀收藏 舉報linux系統下提供ln指令來進行檔案鏈結。檔案鏈結主要分為硬鏈結和軟鏈結。可以用 ln命令來建立硬鏈結。語法 php collapse expand source view plain copy 用法 第一種 為 exis...

linux軟連線和硬鏈結

一 鏈結檔案 鏈結有兩種方式,軟鏈結和硬鏈結。1 軟鏈結檔案 軟鏈結又叫符號鏈結,這個檔案包含了另乙個檔案的路徑名。可以是任意檔案或目錄,可以鏈結不同檔案系統的檔案。鏈結檔案甚至可以鏈結不存在的檔案,這就產生一般稱之為 斷鏈 的問題 或曰 現象 鏈結檔案甚至可以迴圈鏈結自己。類似於程式語言中的遞迴。...