linux軟鏈接與硬鏈接的區別

Linux 文件系統最重要的特點之一是它的文件鏈接。鏈接是對文件的引用,這樣可以讓文件在文件系統中多處被看到。不過,在 Linux 中,鏈接可以如同原始文件一樣來對待。鏈接可以與普通的文件一樣被執行、編輯和訪問。對系統中的其他應用程序而言,鏈接就是它所對應的原始文件。當您通過鏈接對文件進行編輯時,您編輯的實際上是原始文件。鏈接不是副本,linux有兩種類型的鏈接:硬鏈接和符號鏈接(軟鏈接)。

硬鏈接(hard link)只能引用同一文件系統中的文件。它引用的是文件在文件系統中的物理索引(也稱爲 inode)。當您移動或刪除原始文件時,硬鏈接不會被破壞,因爲它所引用的是文件的物理數據而不是文件在文件結構中的位置。硬鏈接的文件不需要用戶有訪問原始文件的權限,也不會顯示原始文件的位置,這樣有助於文件的安全。如果您刪除的文件有相應的硬鏈接,那麼這個文件依然會保留,直到所有對它的引用都被刪除。

另外一種鏈接稱之爲符號鏈接(Symbolic Link),也叫軟鏈接。軟鏈接文件有類似於Windows的快捷方式。它實際上是一個特殊的文件。在軟鏈接中,文件實際上是一個文本文件,其中包含有另一文件的位置信息,如果刪了這個軟鏈接文件,那就等於不需要這個鏈接,和原來存在的實體原文件沒有任何關係,但刪除原來的文件,則相應的軟連接也不可用。

創建硬鏈接:ln filename 【linkname】

創建軟鏈接:ln -s filename 【linkname】

[root@liang opt]# touch aa     #創建文件aa
[root@liang opt]# ln aa bb     #創建aa的硬鏈接bb
[root@liang opt]# ln -s aa cc    #創建aa的軟鏈接cc
[root@liang opt]# ll -i        #查看結果及inode值
總用量 0
2490370 -rw-r--r--. 2 root root 0 7月  30 04:36 aa
2490370 -rw-r--r--. 2 root root 0 7月  30 04:36 bb
2490371 lrwxrwxrwx. 1 root root 2 7月  30 04:36 cc -> aa
[root@liang opt]# ln ../opt/aa /boot/dd     #跨文件系統創建aa的硬鏈接dd,有報錯信息
ln: 創建硬鏈接"/boot/dd" => "../opt/aa": 無效的跨設備連接
[root@liang opt]# ln -s ../opt/aa /boot/ee    #跨文件系統創建aa的軟鏈接ee,無報錯信息
[root@liang opt]# ll -i /boot/      #查看結果及inode值
  39 lrwxrwxrwx. 1 root root        9 7月  30 04:37 ee -> ../opt/aa
[root@liang opt]# ln ff gg      #爲不存在的ff創建硬鏈接gg,有報錯信息
ln: 正在訪問"ff": 沒有那個文件或目錄
[root@liang opt]# ln -s ff hh     #爲不存在的ff創建軟鏈接hh,無報錯信息
[root@liang opt]# ll -i      #查看結果及inode值
總用量 0
2490370 -rw-r--r--. 2 root root 0 7月  30 04:36 aa
2490370 -rw-r--r--. 2 root root 0 7月  30 04:36 bb
2490371 lrwxrwxrwx. 1 root root 2 7月  30 04:36 cc -> aa
2490373 lrwxrwxrwx. 1 root root 2 7月  30 04:37 hh -> ff
[root@liang opt]# echo aaaaaaaaaa > aa    #在aa文件中寫入內容
[root@liang opt]# cat aa       #查看源文件aa的內容
aaaaaaaaaa
[root@liang opt]# cat bb       #查看硬鏈接bb的內容
aaaaaaaaaa
[root@liang opt]# cat cc       #查看軟鏈接cc的內容
aaaaaaaaaa
[root@liang opt]# rm -f aa     #刪除源文件aa
[root@liang opt]# cat bb       #刪除源文件aa後查看硬鏈接bb的內容
aaaaaaaaaa
[root@liang opt]# cat cc       #刪除源文件cc後查看軟鏈接cc的內容
cat: cc: 沒有那個文件或目錄
[root@liang opt]# ll -i        #刪除源文件後查看鏈接結果及inode值
總用量 4
2490370 -rw-r--r--. 1 root root 11 7月  30 04:45 bb
2490371 lrwxrwxrwx. 1 root root  2 7月  30 04:36 cc -> aa
2490373 lrwxrwxrwx. 1 root root  2 7月  30 04:37 gg -> ff



從以上操作過程中可以看到硬鏈接文件與源文件的inode值一樣,即硬鏈接文件與源文件同屬一個數據塊,軟鏈接文件與源文件的inode值不一樣,即軟鏈接文件是單獨存在的一個文本文件。當源文件被刪除時,硬鏈接文件不受影響,而軟鏈接文件則無效。

硬鏈接特性:

  • 文件有相同的 inode 及 data block;

  • 只能對已存在的文件進行創建;

  • 不能交叉文件系統進行硬鏈接的創建;

  • 不能對目錄進行創建,只可對文件創建;

  • 刪除一個硬鏈接文件並不影響其他有相同 inode 號的文件;

軟鏈接特性:

  • 軟鏈接有自己的文件屬性及權限等;

  • 可對不存在的文件或目錄創建軟鏈接;

  • 軟鏈接可交叉文件系統;

  • 軟鏈接可對文件或目錄創建;

  • 創建軟鏈接時,鏈接計數 i_nlink 不會增加;

  • 刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱爲死鏈接(即 dangling link,若被指向路徑文件被重新創建,死鏈接可恢復爲正常的軟鏈接);

如下圖所示軟鏈接、硬鏈接及源文件的關係:

wKioL1ebQM6yyNlOAACNxbcF-lA413.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章