硬鏈接和符號鏈接的區別


首先說說目錄的本質和節點的概念和目錄是通過什么來查找到他的子文件:

在linux系統下一切皆文件,目錄它也是一個文件,只不過在它里面存儲的是

一張表的文件。而節點就類似我們c語言中學過的數組的下標,我們可以把每個文件都看成是

數組中的元素,而知道了節點號,就可以找到實質的文件內容了。

一個文件由數據與元信息組成,元信息存儲的是文件名、創建者、創建日期等等。存儲元信息的區域叫做inode。每一個inode都有唯一不同的編號用來識別不同的編號,linux、unix使用inode來識別文件,不使用文件名。所以系統查找文件是通過inode節點

 

有了上面的認識,我們在討論硬鏈接和符號鏈接的區別

1.原理上:

硬鏈接(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的快捷方式,是不同的文件,它們的元數據是不同的。

2.使用限制上:

硬鏈接:

a:不能對目錄創建硬鏈接,原因有幾種,最重要的是:文件系統不能存在鏈接環(目錄創建時的”..”除外,這個系統可以識別出來),存在環的后果會導致例如文件遍歷等操作的混亂(du,pwd等命令的運作原理就是基於文件硬鏈接,順便一提,ls -l結果的第二列也是文件的硬鏈接數,即inode節點的鏈接數)

b:不能對不同的文件系統創建硬鏈接,即兩個文件名要在相同的文件系統下。

c:不能對不存在的文件創建硬鏈接,由原理即可知原因。

軟鏈接:

a.可以對目錄創建軟鏈接,遍歷操作會忽略目錄的軟鏈接。

b:可以跨文件系統

c:可以對不存在的文件創建軟鏈接,因為放的只是一個字符串,至於這個字符串是不是對於一個實際的文件,就是另外一回事了

 

 

硬鏈接與軟鏈接的作用和優缺點

硬鏈接作用:

硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。只刪除一個連接並不影響節點本身和其它的連接,只有當最后一個連接被刪除后,文件的數據塊及目錄的連接才會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。

還有如果把鏈接名創建為一個以.開頭的隱藏文件,還能很好的隱藏自己的隱私。

軟鏈接作用:

軟鏈接又稱之為符號連接(Symbolic Link)。軟鏈接文件類似於Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息

優缺點:

軟鏈接克服了硬鏈接的不足,沒有任何文件系統的限制,任何用戶可以創建指向目錄的符號鏈接。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網絡對文件進行鏈接。

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

 

本文轉自:https://www.jianshu.com/p/9163276dca55


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM