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函式定...