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

2021-06-05 19:36:18 字數 3154 閱讀 8023

**:         

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

硬鏈結

由於linux下的檔案是通過索引節點(inode)來識別檔案,硬連線不會建產新的inode,硬連線不管有多少個,都指向的是同乙個inode節點,只是新建乙個hard link會把結點連線數增加,只要結點的連線數不是0,檔案就一直存在,不管你刪除 的是原始檔還是連線的檔案。只要有乙個存在,檔案就存在(其實也不分什麼原始檔連線檔案的,因為他們指向都是同乙個 inode節點)。當你修改原始檔或者連線檔案任何乙個的時候,其他的檔案都會做同步的修改 。

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

語法:

ln [options] existingfile newfile

ln [options] existingfile-list directory

用法:

第一種:為」existingfile」建立硬鏈結,檔名為」newfile」。

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

例子:

$ ls –il

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

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

$ ln file2 file2hard

$ 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

注意在建立鏈結前,file2顯示的鏈結數目為1,建立鏈結後

(1) file2和file1hard的鏈結數目都為2;

(2) file2和file1hard在inode號是一樣的;

(3) file2和file1hard顯示的檔案大小也是一樣。

可見進行了ln命令的操作結果:file2和file1hard是同乙個檔案的兩個名字,它們具有同樣的索引節點號和檔案屬性,建立檔案file2的硬鏈結,就是為file2的檔案索引節點在當前目錄上建立乙個新指標。

你可以刪除其中任何乙個,如rm file2 ,每次只會刪除乙個指標,鏈結數同時減一,只有將所有指向檔案內容的指標,也即鏈結數減為0時,核心才會把檔案內容從磁碟上刪除。

(1)不可以在不同檔案系統的檔案間建立鏈結;

(2)只有超級使用者才可以為目錄建立硬鏈結。

軟鏈結

軟鏈結不直接使用inode節點號作為檔案指標,而是使用檔案路徑名作為指標。所以刪除連線檔案對原始檔無影響,但是刪除原始檔,連線檔案就會找不到要指向的檔案。軟鏈結有自己的inode,並在磁碟上有一小片空間存放路徑名.

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

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

$ 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

總之,建立軟鏈結就是建立了乙個新檔案,所以要占用一些空間,而硬鏈結雖然和原始檔大小一樣,但實際上並不額外占用空間。當訪問軟鏈結檔案時,系統就會發現他是個軟鏈結檔案,它讀取軟鏈結檔案找到真正要訪問的檔案。

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

軟鏈結與硬鏈結,區別不僅僅是在概念上,在實現上也是不同的。

兩者區別:

l         對於硬鏈結,原檔案和硬鏈結檔案公用乙個inode號,這說明他們是同乙個檔案,而對於軟鏈結,原檔案和軟鏈結檔案擁有不同的inode號,表明他們是兩個不同的檔案;

l         在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈結沒有寫出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係;

l         鏈結數目是不一樣的,軟鏈結的鏈結數目不會增加;

l         檔案大小是不一樣的,硬鏈結檔案顯示的大小是跟原檔案是一樣的,因為是等同的嘛,而這裡軟鏈結顯示的大小與原檔案就不同了,file1大小是48b,而file1soft是5b,這裡面的5實際上就是「file1」的大小。

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

分類 linux 2009 05 11 16 32 6996人閱讀收藏 舉報linux系統下提供ln指令來進行檔案鏈結。檔案鏈結主要分為硬鏈結和軟鏈結。可以用 ln命令來建立硬鏈結。語法 php collapse expand source view plain copy 用法 第一種 為 exis...

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

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

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

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