Linux的兩種鏈結

2021-08-31 18:32:53 字數 1979 閱讀 1003

linux 鏈結分兩種,一種被稱為硬鏈結(hard link),另一種被稱為符號鏈結(symbolic link),也就是軟鏈結。預設情況下,ln 命令產生硬鏈結,ln -s命令產生軟鏈結。

【硬連線】硬連線指通過索引節點來進行連線。在 linux 的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節點號(inode index)。在 linux 中,多個檔名指向同一索引節點是存在的。一般這種連線就是硬連線。硬連線的作用是允許乙個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以防止「誤刪」的功能。其原因如上所述,因為對應該目錄的索引節點有乙個以上的連線。只刪除乙個連線並不影響索引節點本身和其它的連線,只有當最後乙個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案真正刪除的條件是與之相關的所有硬連線檔案均被刪除。

硬連線有 2 個限制:

不能夠建立硬鏈結。這是因為硬鏈結是通過結點指向原始檔案的,而檔案的結點在不       同的檔案系統中可能會不同。

【軟連線】軟鏈結又叫符號鏈結,它實際上是乙個特殊的檔案,有點類似於 windows 的快捷方式。這個檔案包含了另乙個檔案的路徑名。可以是任意檔案或目錄,可以鏈結不同檔案系統的檔案。

鏈結檔案甚至可以鏈結不存在的檔案,這就產生一般稱之為"斷鏈"的問題(或曰「現象",鏈結

檔案甚至可以迴圈鏈結自己。類似於程式語言中的遞迴。

實驗部分:

一起通過實驗加深理解

[root@foundation101 mnt]# touch file1        #建立乙個測試檔案 file1

[root@foundation101 mnt]# ln file1 file2 #建立file1的乙個硬鏈結檔案file2

[root@foundation101 mnt]# ln -s file1 file2 #建立file1的乙個軟鏈結檔案file3

[root@foundation101 mnt]# ls -li # -i 引數顯示檔案的 inode 節點資訊

total 0

404508247 -rw-r--r--. 2 root root 0 jan 22 23:24 file1

404508247 -rw-r--r--. 2 root root 0 jan 22 23:24 file2

404508260 lrwxrwxrwx. 1 root root 5 jan 22 23:24 file3 -> file1

從上面的結果中可以看出,硬鏈結檔案file2與原檔案file1的 inode 節點相同,均為404508247 ,然而軟鏈結檔案的 inode 節點不同。

[root@foundation101 mnt]# echo nihao > file1

[root@foundation101 mnt]# cat file1

nihao

[root@foundation101 mnt]# cat file2

nihao

[root@foundation101 mnt]# cat file3

nihao

[root@foundation101 mnt]# rm -rf file1

[root@foundation101 mnt]# cat file2

nihao

[root@foundation101 mnt]# cat file3

cat: file3: no such file or directory

通過上面的測試可以看出:當刪除原始檔案法file1後,硬鏈結file2不受影響,但是軟鏈結file3檔案無效

總結:1).刪除軟鏈結file3,對 file1,file2無影響;

2).刪除硬鏈結 file2,對 file1,file3 也無影響;

3).刪除原檔案 file1,對硬鏈結 file2 沒有影響,導致軟鏈結 file3失效;

4).同時刪除原檔案file1,硬鏈結file2,整個檔案會真正的被刪除。

C DLL匯出的兩種方式和鏈結的兩種方式

第一種 匯出方式 extern c declspec dllexport int plus int x,int y extern c declspec dllexport int sub int x,int y extern c declspec dllexport int mul int x,in...

動態鏈結庫的兩種方式

呼叫乙個dll中的函式有兩種方法 1 載入時動態鏈結 load time dynamic linking 模組非常明確自己要呼叫哪些匯出函式,使得它們就像本地函式一樣。要達到如此,需要鏈結時鏈結那些匯出函式所在dll的導入庫,導入庫向系統提供了載入dll時所需的資訊 庫的符號鏈結之類 及dll函式定...

動態鏈結庫的兩種方式

呼叫乙個dll中的函式有兩種方法 1 載入時動態鏈結 load time dynamic linking 模組非常明確自己要呼叫哪些匯出函式,使得它們就像本地函式一樣。要達到如此,需要鏈結時鏈結那些匯出函式所在dll的導入庫,導入庫向系統提供了載入dll時所需的資訊 庫的符號鏈結之類 及dll函式定...