巧記硬鏈接與軟鏈接

0、一句話總結(jié)

硬鏈接是“硬”的,因為它直接指向了inode。
軟鏈接是“軟”的,因為它是通過其他文件才指向了inode(就像是雙節(jié)棍或多節(jié)棍,比較靈活,所以是軟的)。

1、什么是軟鏈接和硬鏈接?

軟硬鏈接均可以理解成“無需copy文件,創(chuàng)建一個文件的別名”。示意圖如下:


hard_soft_link_demo.png

硬鏈接一旦創(chuàng)建后就無法區(qū)分哪個是“源文件”,也就是說指向同一個inode的所有硬鏈接都是等價的。對應(yīng)到上圖中,“硬鏈接A1”和“硬鏈接A2”是等價的,沒有主次之分。

2、怎樣創(chuàng)建軟硬鏈接?

使用ln命令創(chuàng)建:

ln [-s] old_path new_path

不帶-s表示創(chuàng)建硬鏈接,帶上-s表示創(chuàng)建軟鏈接。這里的s其實是symbolic(符號)的意思,不過記成soft也沒啥影響。
有時可能容易混淆old_pathnew_path的順序,可以通過下面這句話幫助記憶:

軟硬鏈接不能“無中生有”,所以要先指定現(xiàn)有文件,再指定需要新建的鏈接。

3、硬鏈接與軟鏈接有什么區(qū)別?

鏈接類型 能否對目錄創(chuàng)建該鏈接 能否跨文件系統(tǒng)創(chuàng)建該鏈接
硬鏈接 不能 不能 不能
軟鏈接

注:Linux的文檔明確說明不能跨掛載點創(chuàng)建硬鏈接(new_pathold_path必須在同一個掛載點上),即比“不能跨文件系統(tǒng)創(chuàng)建”的限制更加嚴格。
在Mac上實際測試,可以跨掛載點創(chuàng)建硬鏈接(兩個掛載點文件系統(tǒng)相同)。

4、軟硬鏈接有什么用途?

快捷方式

因為硬鏈接有上述兩條限制,所以一般用軟鏈接實現(xiàn)快捷方式。

控制動態(tài)庫的實際版本

例如系統(tǒng)的libc.so.6通常只是一個軟鏈接,鏈接到實際使用的libc.so.6的具體版本(一般位于同目錄下)。這樣不僅能方便地看出當前使用的libc.so.6的實際版本,還大大簡化了libc.so.6的升級工作。

防止文件被錯誤刪除

只有當指向一個文件的所有硬鏈接都被刪除后,系統(tǒng)才會真正刪除文件。所以通過創(chuàng)建硬鏈接可以避免文件被錯誤刪除(不能防止文件被修改?。?。

5、系統(tǒng)調(diào)用原型

硬鏈接是link,軟鏈接是symlink(即符號鏈接)。

6、軟硬鏈接文件權(quán)限和歸屬問題

硬鏈接
具有相同inode的所有硬鏈接始終具有相同的權(quán)限和歸屬,即改變其中一個硬鏈接的權(quán)限和歸屬,其他硬鏈接的權(quán)限和歸屬也會變化。
軟鏈接
文檔說“軟鏈接的權(quán)限是無關(guān)緊要的”,在Linux系統(tǒng)上實際測試,chmod命令操作的是軟鏈接對應(yīng)的目標文件(chmod的文檔也有說明),軟鏈接始終具有讀、寫、執(zhí)行的所有權(quán)限。
因為軟鏈接始終具有讀、寫、執(zhí)行的所有權(quán)限,所以基本不需要關(guān)心其歸屬問題。
總結(jié):軟鏈接的權(quán)限和歸屬問題基本可以忽略,只需要關(guān)心其目標文件的權(quán)限和歸屬即可。

7、多層軟鏈接會怎樣?

沒有影響,還是能正常工作。測試命令如下:

echo "abc" > test.txt
ln -s test.txt test_1
ln -s test_1 test_2
ln -s test_2 test_3
cat test_3

輸出為"abc"

8、軟鏈接的目標文件刪除后再重新創(chuàng)建會怎樣?

會鏈接到新創(chuàng)建的文件。

9、循環(huán)軟鏈接會怎樣?

能夠創(chuàng)建循環(huán)軟鏈接(即系統(tǒng)沒有檢測),但是讀取文件時會報錯。測試命令如下:

touch abc1
ln -s abc1 abc2
rm abc1
-s abc2 abc1
cat abc1

輸出是

cat: abc1: Too many levels of symbolic links

10、參考

https://mp.weixin.qq.com/s/Cu55Sck9FSXLHE0oEVuKQg

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容