關於硬鏈結和軟連線(符號鏈結)的區別

2021-06-09 17:35:54 字數 2307 閱讀 8344

分類: linux

2009-05-11 16:32

6996人閱讀收藏 

舉報linux系統下提供ln指令來進行檔案鏈結。檔案鏈結主要分為硬鏈結和軟鏈結。

可以用:ln命令來建立硬鏈結。語法:

[php:collapse]+ expand source

view plain

copy

用法: 第一種:為」existingfile」建立硬鏈結,檔名為」newfile」。第二種:在」directory」目錄中,為 」existingfile-list」中包含的所有檔案建立乙個同名的硬鏈結。常用可選[options] –f 無論」newfile」存在與否,都建立鏈結。-n 如果」newfile」已存在,就不建立鏈結。

例子:[php:collapse]+ expand source

view plain

copy

注意在建立鏈結前,file1 顯示的鏈結數目為1,建立鏈結後(1)file1和file1hard的鏈結數目都變為2;(2) file1和file1hard在inode號是一樣的(3) file1和file1hard顯示的檔案大小也是一樣。可見進行了ln命令的操作結果:file1和file1hard是同乙個檔案的兩個名字,它們具有同樣的索引節點號和檔案屬性,建立檔案file1的硬鏈結,就是為file1的檔案索引節點在當前目錄上建立乙個新指標。如下圖,你可以刪除其中任何乙個,如rm file2 ,每次只會刪除乙個指標,鏈結數同時減一,只有將所有指向檔案內容的指標,也即鏈結數減為0時,核心才會把檔案內容從磁碟上刪除。

不足:儘管硬鏈結節省空間,也是linux系統整合檔案系統的傳統方式,但是存在一下不足之處:(1)不可以在不同檔案系統的檔案間建立鏈結(2)只有超級使用者才可以為目錄建立硬鏈結。

軟鏈結克服了硬鏈結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號鏈結。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網路對檔案進行鏈結。

如果給ln命令加上- s選項,則建立軟鏈結。如果[鏈結名]已經存在但不是目錄,將不做鏈結。[鏈結名]可以是任何乙個檔名(可包含路徑),也可以是乙個目錄,並且允許它與「目標」不在同乙個檔案系統中。如果[鏈結名]是乙個已經存在的目錄,系統將在該目錄下建立乙個或多個與「目標」同名的檔案,此新建的檔案實際上是指向原「目標」的符號鏈結檔案。 

例子:[php]view plain

copy

$ ls -il  

13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1  

13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2  

13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard  

$ln–s file1 file1soft  

$ls-il  

13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1  

13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2  

13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard  

13061 lrwxrwxrwx 1 longcheng longcheng 5 8月 5 16:58 file1soft->file1   

軟鏈結與硬鏈結,區別不僅僅是在概念上,在實現上也是不同的。區別:硬鏈結原檔案&鏈結檔案公用乙個inode號,說明他們是同乙個檔案,而軟鏈結原檔案&鏈結檔案擁有不同的inode號,表明他們是兩個不同的檔案;在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈結沒有寫出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係;鏈結數目是不一樣的,軟鏈結的鏈結數目不會增加;檔案大小是不一樣的,硬鏈結檔案顯示的大小是跟原檔案是一樣的,這用強調,因為是等同的嘛,而這裡軟鏈結顯示的大小與原檔案就不同了,file1大小是48b,而file1soft是5b,這裡面的5實際上就是「file1」的大小。

總之,建立軟鏈結就是建立了乙個新檔案。當訪問鏈結檔案時,系統就會發現他是個鏈結檔案,它讀取鏈結檔案找到真正要訪問的檔案。

缺點:因為鏈結檔案包含有原檔案的路徑資訊,所以當原檔案從乙個目錄下移到其他目錄中,再訪問鏈結檔案,系統就找不到了,而硬鏈結就沒有這個缺陷,你想怎麼移就怎麼移;還有它要系統分配額外的空間用於建立新的索引節點和儲存原檔案的路徑。

關於硬鏈結和軟連線(符號鏈結)的區別

和linux系統下提供ln指令來進行檔案鏈結。檔案鏈結主要分為硬鏈結和軟鏈結。硬鏈結 由於linux下的檔案是通過索引節點 inode 來識別檔案,硬連線不會建產新的inode,硬連線不管有多少個,都指向的是同乙個inode節點,只是新建乙個hard link會把結點連線數增加,只要結點的連線數不是...

Linux的硬鏈結和軟連線(符號鏈結)的區別

1.什麼是目錄?linux 檔案系統是樹狀結構的。根目錄下存在一系列子目錄。目錄裡邊有檔案或者子目錄。但問題在於 目錄是什麼?檔案又是什麼?檔案是 資料 屬性 比如名字 建立時間 所有者之類 目錄是 乙個列表,列表中的每一項是 inode filename linux 檔案系統把硬碟分為三個部分 超...

硬鏈結與軟鏈結(符號鏈結)

我們知道檔案都有檔名與資料,這在 linux 上被分成兩個部分 使用者資料 user data 與元資料 metadata 使用者資料,即檔案資料塊 data block 資料塊是記錄檔案真實內容的地方 元資料則是檔案的附加屬性,如檔名 檔案大小 建立時間 所有者 檔案所在的inode等資訊。在 l...