當前位置:首頁 > IT技術 > 系統(tǒng)服務 > 正文

linux 硬鏈接和軟連接
2022-02-14 14:18:10


硬鏈接和軟連接

Linux鏈接概念

Linux鏈接分兩種,一種被稱為硬鏈接(Hard Link),另一種被稱為符號鏈接(Symbolic Link)。默認情況下,ln命令產生硬鏈接。

【軟連接】【ln -s 源文件名 軟連接文件名】

另外一種連接稱之為符號連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似于Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。創(chuàng)建一 個軟連接就是給指定的文件創(chuàng)建了一個快捷方式,里面只記錄一個源文件的路徑,使用的時候其實就是間接的使用源文件,不考慮具體的實現(xiàn),從使用的層面上就這么簡單。如果源文件刪除了,這個軟連接也就沒有什么用了,因為他記錄的路徑下面已經沒有文件或文件夾了,效果就和windows下面的exe都沒有了,你雙擊快捷方式的效果一樣,正因為軟連接只是記錄一個路徑,所以他可以跨文件系統(tǒng)使用。

【硬連接】【ln -d 源文件名 硬連接文件名】

硬連接指通過索引節(jié)點來進行連接。在Linux的文件系統(tǒng)中,保存在磁盤分區(qū)中的文件不管是什么類型都給它分配一個編號,稱為索引節(jié)點號(Inode Index)。在Linux中,多個文件名指向同一索引節(jié)點是存在的。一般這種連接就是硬連接。硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節(jié)點有一個以上的連接。只刪除一個連接并不影響索引節(jié)點本身和其它的連接,只有當最后一個連接被刪除后,文件的數(shù)據塊及目錄的連接才會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。在Linux里面訪問的每個文件都有一個inode結點的東西,在這個東西里面有一個連接計數(shù),軟連接的時候不涉及這個東西,如果對一個文件創(chuàng)建一個硬連接,則這個文件對應的inode的連接計數(shù)就加1,這個時候其實這個inode對應的文件有兩個名稱可以進行訪問,這兩個名稱現(xiàn)在是一樣的,你可以使用任意一個繼續(xù)創(chuàng)建硬連接,所以創(chuàng)建的硬連接和源文件是一樣的,共享同一個inode,如果刪除了一個則連接計數(shù)就減1,刪不刪除文件是根據 連接的計數(shù)值來確定的,如果為0了,就刪了,否則,刪除只是連接計數(shù)減1。硬連接不能跨文件系統(tǒng)創(chuàng)建,并且只能對文件創(chuàng)建,不能對目錄創(chuàng)建硬連接。

實驗

測試inode結點

root@ubuntu:/home/wangji/test# touch f1 #創(chuàng)建一個測試文件f1
root@ubuntu:/home/wangji/test# ln f1 f2 #創(chuàng)建f1的一個硬連接文件f2
root@ubuntu:/home/wangji/test# ln -s f1 f3 #創(chuàng)建f1的一個符號連接文件f3

root@ubuntu:/home/wangji/test# ls -li #-i參數(shù)顯示文件的inode節(jié)點信息
total 0
3673414 -rw-r--r-- 2 root root 0 May 14 18:42 f1
3673414 -rw-r--r-- 2 root root 0 May 14 18:42 f2
3673415 lrwxrwxrwx 1 root root 2 May 14 18:42 f3 -> f1

從上面的結果中可以看出,硬連接文件f2與原文件f1的inode節(jié)點相同,均為3673414,然而符號連接文件的inode節(jié)點不同。因為符合連接是一種特殊的文件

測試刪除影響

root@ubuntu:/home/wangji/test# echo "I'm f1 file" >>f1  #添加文件信息F1
root@ubuntu:/home/wangji/test# cat f1
I'm f1 file
root@ubuntu:/home/wangji/test# cat f2
I'm f1 file
root@ubuntu:/home/wangji/test# cat f3
I'm f1 file
root@ubuntu:/home/wangji/test# rm -f f1
root@ubuntu:/home/wangji/test# cat f2
I'm f1 file
root@ubuntu:/home/wangji/test# cat f3
cat: f3: No such file or directory

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

總結

依此您可以做一些相關的測試,可以得到以下全部結論:

1).刪除符號連接f3,對f1,f2無影響;

2).刪除硬連接f2,對f1,f3也無影響;

3).刪除原文件f1,對硬連接f2沒有影響,導致符號連接f3失效;

4).同時刪除原文件f1,硬連接f2,整個文件會真正的被刪除。



本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務立即開通 >