天天看點

Linux 連結概念 硬連接配接 軟連接配接

這裡寫目錄标題

    • 拓展:Linux 連結概念
      • 硬連接配接
      • 軟連接配接
      • 測試:
    • 參考目錄

拓展:Linux 連結概念

Linux 連結分兩種,一種被稱為硬連結(Hard Link),另一種被稱為符号連結(Symbolic Link)。

$ ln 源檔案名稱 硬連結檔案名稱
           
ln -s 源檔案名稱 軟連結檔案名稱
           

硬連接配接

         硬連接配接指通過索引節點來進行連接配接。在 Linux 的檔案系統中,儲存在磁盤分區中的檔案不管是什麼類型都給它配置設定一個編号,稱為索引節點号(Inode Index)。在 Linux 中,多個檔案名指向同一索引節點是存在的。比如:A 是 B 的硬連結(A 和 B 都是檔案名),則 A 的目錄項中的 inode 節點号與 B 的目錄項中的 inode 節點号相同,即一個 inode 節點對應兩個不同的檔案名,兩個檔案名指向同一個檔案,A 和 B 對檔案系統來說是完全平等的。删除其中任何一個都不會影響另外一個的通路。

         硬連接配接的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連接配接到重要檔案,以防止“誤删”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連接配接。隻删除一個連接配接并不影響索引節點本身和其它的連接配接,隻有當最後一個連接配接被删除後,檔案的資料塊及目錄的連接配接才會被釋放。也就是說,檔案真正删除的條件是與之相關的所有硬連接配接檔案均被删除。

軟連接配接

         另外一種連接配接稱之為符号連接配接(Symbolic Link),也叫軟連接配接。軟連結檔案有類似于 Windows 的快捷方式。它實際上是一個特殊的檔案。在符号連接配接中,檔案實際上是一個文本檔案,其中包含的有另一檔案的位置資訊。比如:A 是 B 的軟連結(A 和 B 都是檔案名),A 的目錄項中的 inode 節點号與 B 的目錄項中的 inode 節點号不相同,A 和 B 指向的是兩個不同的 inode,繼而指向兩塊不同的資料塊。但是 A 的資料塊中存放的隻是 B 的路徑名(可以根據這個找到 B 的目錄項)。A 和 B 之間是“主從”關系,如果 B 被删除了,A 仍然存在(因為兩個是不同的檔案),但指向的是一個無效的連結。

測試:

[[email protected] koma]# touch f1    # 建立一個測試檔案f1
[[email protected] koma]# ll
總用量 0
-rw-r--r--. 1 root root 0 9月   2 12:40 f1
[[email protected] koma]# ln f1 f2    # 建立f1的一個硬連接配接檔案f2
[[email protected] koma]# ll
總用量 0
-rw-r--r--. 2 root root 0 9月   2 12:40 f1
-rw-r--r--. 2 root root 0 9月   2 12:40 f2
[[email protected] koma]# ln -s f1 f3   # 建立f1的一個符号連接配接檔案f3
[[email protected] koma]# ll
總用量 0
-rw-r--r--. 2 root root 0 9月   2 12:40 f1
-rw-r--r--. 2 root root 0 9月   2 12:40 f2
lrwxrwxrwx. 1 root root 2 9月   2 12:40 f3 -> f1
[[email protected] koma]# ls -li    # -i參數顯示檔案的inode節點資訊
總用量 0
26424032 -rw-r--r--. 2 root root 0 9月   2 12:40 f1
26424032 -rw-r--r--. 2 root root 0 9月   2 12:40 f2
26424033 lrwxrwxrwx. 1 root root 2 9月   2 12:40 f3 -> f1
[[email protected] koma]# 
           

從上面的結果中可以看出,硬連接配接檔案 f2 與原檔案 f1 的 inode 節點相同,均為 26424032,然而符号連接配接檔案的 inode 節點不同。

# echo 字元串輸出 >> f1 輸出到 f1檔案
[[email protected] koma]# echo 'i am f1 file'>>f1
[[email protected] koma]# cat f1
i am f1 file
[[email protected] koma]# cat f2
i am f1 file
[[email protected] koma]# cat f3
i am f1 file
[[email protected] koma]# rm -f f1
[[email protected] koma]# cat f2
i am f1 file
[[email protected] koma]# cat f3
cat: f3: 沒有那個檔案或目錄
[[email protected] koma]# 
           

通過上面的測試可以看出:當删除原始檔案 f1 後,硬連接配接 f2 不受影響,但是符号連接配接 f3 檔案無效;

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

         删除符号連接配接f3,對f1,f2無影響;

         删除硬連接配接f2,對f1,f3也無影響;

         删除原檔案f1,對硬連接配接f2沒有影響,導緻符号連接配接f3失效;

         同時删除原檔案f1,硬連接配接f2,整個檔案會真正的被删除。

參考目錄

(微信公衆号)

https://mp.weixin.qq.com/s/4dZ3mbu287pC6mdGOczGAA

(B站)

https://space.bilibili.com/95256449?from=search&seid=5459868435586677112

繼續閱讀