首先說說目錄的本質和節點的概念和目錄是通過什麼來查詢到他的子檔案:
在linux系統下一切皆檔案,目錄它也是乙個檔案,只不過在它裡面儲存的是
一張表的檔案。而節點就類似我們c語言中學過的陣列的下標,我們可以把每個檔案都看成是
陣列中的元素,而知道了節點號,就可以找到實質的檔案內容了。
乙個檔案由資料與元資訊組成,元資訊儲存的是檔名、建立者、建立日期等等。儲存元資訊的區域叫做inode。每乙個inode都有唯一不同的編號用來識別不同的編號,linux、unix使用inode來識別檔案,不使用檔名。所以系統查詢檔案是通過inode節點
有了上面的認識,我們在討論硬鏈結和符號鏈結的區別
硬鏈結(hard link):檔案a是檔案b的硬鏈結,則a的目錄項中的inode節點號與b的目錄項中的inode節點號相同,即乙個inode節點對應兩個不同的檔名,兩個檔名指向同乙個檔案,a和b對檔案系統來說是完全平等的。如果刪除了其中乙個,對另外乙個沒有影響。每增加乙個檔名,inode節點上的鏈結數增加一,每刪除乙個對應的檔名,inode節點上的鏈結數減一,直到為0,inode節點和對應的資料塊被**。注:檔案和檔名是不同的東西,rm a刪除的只是a這個檔名,而a對應的資料塊(檔案)只有在inode節點鏈結數減少為0的時候才會被系統**。
軟鏈結(soft link):a是b的軟鏈結(a和b都是檔名),a的目錄項中的inode節點號與b的目錄項中的inode節點號不相同,a和b指向的是兩個不同的inode,繼而指向兩塊不同的資料塊。但是a的資料塊中存放的只是b的路徑名(可以根據這個找到b的目錄項)。a和b之間是「主從」關係,如果b被刪除了,a仍然存在(因為兩個是不同的檔案),但指向的是乙個無效的鏈結。
甚至我們可以這樣理解:
硬鏈結相當於乙個指標,指向檔案的索引節點,系統不會增加inode節點(也可以理解成乙個檔案在不同的環境下叫的別名,名字有多個,檔案只有乙個)即元資料是一樣的。
而符號鏈結(也叫軟鏈結)相當於乙個軟鏈結檔案類似於windows的快捷方式,是不同的檔案,它們的元資料是不同的。
a:不能對目錄建立硬鏈結,原因有幾種,最重要的是:檔案系統不能存在鏈結環(目錄建立時的」..」除外,這個系統可以識別出來),存在環的後果會導致例如檔案遍歷等操作的混亂(du,pwd等命令的運作原理就是基於檔案硬鏈結,順便一提,ls -l結果的第二列也是檔案的硬鏈結數,即inode節點的鏈結數)
a.可以對目錄建立軟鏈結,遍歷操作會忽略目錄的軟鏈結。
b:可以跨檔案系統
c:可以對不存在的檔案建立軟鏈結,因為放的只是乙個字串,至於這個字串是不是對於乙個實際的檔案,就是另外一回事了
硬連線的作用是允許乙個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以防止「誤刪」的功能。只刪除乙個連線並不影響節點本身和其它的連線,只有當最後乙個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案真正刪除的條件是與之相關的所有硬連線檔案均被刪除。
還有如果把鏈結名建立為乙個以.開頭的隱藏檔案,還能很好的隱藏自己的隱私。
軟鏈結又稱之為符號連線(symbolic link)。軟鏈結檔案類似於windows的快捷方式。它實際上是乙個特殊的檔案。在符號連線中,檔案實際上是乙個文字檔案,其中包含的有另一檔案的位置資訊
優缺點:
軟鏈結克服了硬鏈結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號鏈結。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網路對檔案進行鏈結。
當然軟鏈結也有硬鏈結沒有的缺點,因為鏈結檔案包含有原檔案的路徑資訊,所以當原檔案從乙個目錄下移到其他目錄中,再訪問鏈結檔案,系統就找不到了,而硬鏈結就沒有這個缺陷,你想怎麼移就怎麼移;還有它要系統分配額外的空間用於建立新的索引節點和儲存原檔案的路徑。
硬鏈結和符號鏈結的區別
首先要弄清楚,在linux系統中,核心為每乙個新建立的檔案分配乙個inode 索引結點 每個檔案都有乙個惟一的inode號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實現檔案的快速訪問。一 硬鏈結 硬鏈結說白了是乙個指標,指向檔案索引節點,系統並不為它重新分配inode。可...
硬鏈結和符號鏈結的區別
首先說說目錄的本質和節點的概念和目錄是通過什麼來查詢到他的子檔案 在linux系統下一切皆檔案,目錄它也是乙個檔案,只不過在它裡面儲存的是 一張表的檔案。而節點就類似我們c語言中學過的陣列的下標,我們可以把每個檔案都看成是 陣列中的元素,而知道了節點號,就可以找到實質的檔案內容了。乙個檔案由資料與元...
硬鏈結和符號鏈結的區別
首先說說目錄的本質和節點的概念和目錄是通過什麼來查詢到他的子檔案 在linux系統下一切皆檔案,目錄它也是乙個檔案,只不過在它裡面儲存的是 一張表的檔案。而節點就類似我們c語言中學過的陣列的下標,我們可以把每個檔案都看成是 陣列中的元素,而知道了節點號,就可以找到實質的檔案內容了。乙個檔案由資料與元...