硬鏈接和軟連接
Linux鏈接概念
Linux鏈接分兩種,一種被稱為硬鏈接(Hard Link),另一種被稱為符號(hào)鏈接(Symbolic Link)。默認(rèn)情況下,ln命令產(chǎn)生硬鏈接。
【軟連接】【ln -s 源文件名 軟連接文件名】
另外一種連接稱之為符號(hào)連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似于Windows的快捷方式。它實(shí)際上是一個(gè)特殊的文件。在符號(hào)連接中,文件實(shí)際上是一個(gè)文本文件,其中包含的有另一文件的位置信息。創(chuàng)建一 個(gè)軟連接就是給指定的文件創(chuàng)建了一個(gè)快捷方式,里面只記錄一個(gè)源文件的路徑,使用的時(shí)候其實(shí)就是間接的使用源文件,不考慮具體的實(shí)現(xiàn),從使用的層面上就這么簡單。如果源文件刪除了,這個(gè)軟連接也就沒有什么用了,因?yàn)樗涗浀穆窂较旅嬉呀?jīng)沒有文件或文件夾了,效果就和windows下面的exe都沒有了,你雙擊快捷方式的效果一樣,正因?yàn)檐涍B接只是記錄一個(gè)路徑,所以他可以跨文件系統(tǒng)使用。
【硬連接】【ln -d 源文件名 硬連接文件名】
硬連接指通過索引節(jié)點(diǎn)來進(jìn)行連接。在Linux的文件系統(tǒng)中,保存在磁盤分區(qū)中的文件不管是什么類型都給它分配一個(gè)編號(hào),稱為索引節(jié)點(diǎn)號(hào)(Inode Index)。在Linux中,多個(gè)文件名指向同一索引節(jié)點(diǎn)是存在的。一般這種連接就是硬連接。硬連接的作用是允許一個(gè)文件擁有多個(gè)有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。其原因如上所述,因?yàn)閷?duì)應(yīng)該目錄的索引節(jié)點(diǎn)有一個(gè)以上的連接。只刪除一個(gè)連接并不影響索引節(jié)點(diǎn)本身和其它的連接,只有當(dāng)最后一個(gè)連接被刪除后,文件的數(shù)據(jù)塊及目錄的連接才會(huì)被釋放。也就是說,文件真正刪除的條件是與之相關(guān)的所有硬連接文件均被刪除。在Linux里面訪問的每個(gè)文件都有一個(gè)inode結(jié)點(diǎn)的東西,在這個(gè)東西里面有一個(gè)連接計(jì)數(shù),軟連接的時(shí)候不涉及這個(gè)東西,如果對(duì)一個(gè)文件創(chuàng)建一個(gè)硬連接,則這個(gè)文件對(duì)應(yīng)的inode的連接計(jì)數(shù)就加1,這個(gè)時(shí)候其實(shí)這個(gè)inode對(duì)應(yīng)的文件有兩個(gè)名稱可以進(jìn)行訪問,這兩個(gè)名稱現(xiàn)在是一樣的,你可以使用任意一個(gè)繼續(xù)創(chuàng)建硬連接,所以創(chuàng)建的硬連接和源文件是一樣的,共享同一個(gè)inode,如果刪除了一個(gè)則連接計(jì)數(shù)就減1,刪不刪除文件是根據(jù) 連接的計(jì)數(shù)值來確定的,如果為0了,就刪了,否則,刪除只是連接計(jì)數(shù)減1。硬連接不能跨文件系統(tǒng)創(chuàng)建,并且只能對(duì)文件創(chuàng)建,不能對(duì)目錄創(chuàng)建硬連接。
實(shí)驗(yàn)
測試inode結(jié)點(diǎn)
root@ubuntu:/home/wangji/test# touch f1 #創(chuàng)建一個(gè)測試文件f1
root@ubuntu:/home/wangji/test# ln f1 f2 #創(chuàng)建f1的一個(gè)硬連接文件f2
root@ubuntu:/home/wangji/test# ln -s f1 f3 #創(chuàng)建f1的一個(gè)符號(hào)連接文件f3
root@ubuntu:/home/wangji/test# ls -li #-i參數(shù)顯示文件的inode節(jié)點(diǎn)信息
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
從上面的結(jié)果中可以看出,硬連接文件f2與原文件f1的inode節(jié)點(diǎn)相同,均為3673414,然而符號(hào)連接文件的inode節(jié)點(diǎn)不同。因?yàn)榉线B接是一種特殊的文件
測試刪除影響
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
通過上面的測試可以看出:當(dāng)刪除原始文件f1后,硬連接f2不受影響,但是符號(hào)連接f1文件無效
總結(jié)
依此您可以做一些相關(guān)的測試,可以得到以下全部結(jié)論:
1).刪除符號(hào)連接f3,對(duì)f1,f2無影響;
2).刪除硬連接f2,對(duì)f1,f3也無影響;
3).刪除原文件f1,對(duì)硬連接f2沒有影響,導(dǎo)致符號(hào)連接f3失效;
4).同時(shí)刪除原文件f1,硬連接f2,整個(gè)文件會(huì)真正的被刪除。
本文摘自 :https://blog.51cto.com/u