硬鏈接與軟鏈接有什么不同(ln)



Linux建立的鏈接有兩種方式

  • 如Windows系統下的快捷方式(.lnk)相似的東東
  • 分為硬鏈接(Hard Link)和軟鏈接(Symbolic Link)也叫符號鏈接
  • 默認情況下,ln命令產生硬鏈接

具體情況呢,如下

硬鏈接
  • 硬鏈接指通過索引節點來進行連接
  • 在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都給它分配一個編號,稱為索引節點號(Inode Index)
  • 在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接
  • 硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,起到防止“誤刪”的功能
  • 其原因如上所述,因為對應該目錄的索引節點有一個以上的連接。只刪除一個連接並不影響索引節點本身和其它的連接,只有當最后一個連接被刪除后,文件的數據塊及目錄的連接才會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。
  • linux系統中的硬連接有兩個限制:不能跨越文件系統和不允許普通用戶對目錄作硬連接。至於第一個限制,很好理解,而第二個就不那么好理解 了。 對任何一個目錄用ls -l 命令都可以看到其連接數至少是2,這也說明了系統中是存在硬連接的,而且命令ln -d 也可以讓超級用戶對目錄作硬連接,這些都說明了系統限制對目錄進行硬連接只是一個硬性規定,並不是邏輯上不允許或技術上的不可行。那么操作系統為什么要進 行限制呢?答案可能有兩個。先來說第一個,如果引入了對目錄的硬連接就有可能在目錄中引入循環,那么在目錄遍歷的時候系統就會陷入無限循環當中。也許您會說,符號連接不也可以引入循 環嗎,那么為什么不限制目錄的符號連接呢?原因就在於在linux系統中,每個文件(目錄也是文件)都對應着一個inode結構,其中inode數據結構 中包含了文件類型(目錄,普通文件,符號連接文件等等)的信息,也就是說操作系統在遍歷目錄時可以判斷出符號連接,既然可以判斷出符號連接當然就可以采取 一些措施來防范進入過大的循環了,系統在連續遇到8個符號連接后就停止遍歷,這就是為什么對目錄符號連接不會進入死循環的原因了。但是對於硬連接,由於操 作系統中采用的數據結構和算法限制,目前是不能防范這種死循環的。在說明第二個原因之前,先來看看文件的dentry結構在系統空間中長什么樣子和它們是怎么存放在系統空間的。dentry結構主要包含了文件名,文 件的inode號,指向父目錄dentry結構的指針和其他一些與本次討論無關的指針,這里關鍵是那個指向父目錄的指針;系統中所有的dentry結構都 是按雜湊值存放在雜湊表中的,這里的雜湊算法很重要,它是取文件名和文件的父目錄dentry結構的地址一起雜湊運算出雜湊值的。現在假設有兩個目錄 /a和/b,其中/b是我們通過ln -d命令建立起來的對/a的硬連接。這個時候內核空間中就會存在一個/a的dentry結構和一個/b的dentry結構,由上面的知識可知,/a和/b 目錄下面的每一個文件或目錄都各自有對應的dentry結構(因為雖然/a目錄下面的文件名沒有改變,但是因為dentry結構有指向父目錄dentry 的指針和計算雜湊值時考慮了父目錄dentry結構的地址,這個時候dentry結構就分身乏術了),而且這種繼承還會影響到所有子目錄下面的文件,這樣 下來就會浪費很多系統空間了,特別是如果被硬連接的目錄中存在大量文件和子目錄的時候就更加明顯了。這也許是第二個原因。
  • inode會鏈接到block塊,而“目錄”本身僅消耗inode,這樣硬鏈接就不能鏈接目錄。這里說的目錄本身消耗inode。意思是說目錄不占用存儲空間,所以硬鏈接就不能鏈接目錄
軟鏈接
  • 另外一種連接稱之為符號連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似於Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。

實驗結果

從上面的結果中可以看出,硬連接文件f2與原文件f1的inode節點相同,均為311314,然而符號連接文件的inode節點不同

通過上面的測試可以看出:當刪除原始文件f1后,硬連接f2不受影響,但是符號連接f3文件無效

總結

依此您可以做一些相關的測試,可以得到以下全部結論:
1).刪除符號連接f3,對f1,f2無影響;
2).刪除硬連接f2,對f1,f3也無影響;
3).刪除原文件f1,對硬連接f2沒有影響,導致符號連接f3失效;
4).同時刪除原文件f1,硬連接f2,整個文件會真正的被刪除。


免責聲明!

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



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