硬鏈結和軟連線的區別

2021-06-25 20:54:16 字數 4662 閱讀 2793

linux硬鏈結和軟鏈結的區別 

簡而言之,軟鏈結相當於windows中的快捷方式,硬鏈結相當於乙個災備系統,資料存放在兩處,與複製不同

的是兩處之間存在同步機制,一處資料的改變會實時同步到另一處,另外,一處資料如果被刪除了,不會影響

到另一處的資料.下面是詳細的介紹:

硬連線指向的是節點(inode),是已存在檔案的另乙個名字,修改其中乙個,與其連線的檔案同時被修

改;對硬鏈結檔案進行讀寫和刪除操作時候,效果和軟鏈結相同。但如果我們刪除硬鏈結檔案的原始檔,

硬鏈結檔案仍然存在,而且保留了原有的內容。這時,系統就「忘記」了它曾經是硬鏈結檔案,而把他當

成乙個普通檔案。

硬鏈結檔案有兩個限制:

1、不允許給目錄建立硬鏈結;

2、只有在同一檔案系統中的檔案之間才能建立鏈結。

軟連線指向的是路徑(path),軟鏈結又叫符號鏈結,這個檔案包含了另乙個檔案的路徑名。可以是

任意檔案或目錄,還可以鏈結不同檔案系統的檔案,和win下的快捷方式差不多。 軟鏈結檔案甚至可以鏈

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

似於程式語言中的遞迴。

命令格式:

ln -s source_path target_path 

//軟鏈結檔案

ln -d existfile newfile 

//硬鏈結檔案,如果不加任何引數,預設情況下就是硬鏈結.

示例:$ ln httpd.conf httpd1.conf

第一條為硬鏈結,第二條為軟鏈結

$ ls -li 

//檢視乙個檔案或目錄的inode,要通過ls 命令的的 -i引數,inode值相同的檔案,他們的關

系是互為硬鏈結的關係

總用量 80

1077669 

-rw-r--r-- 

2sam 

adm 

34890 10月 31 00:57 httpd1.conf

1077668 

lrwxrwxrwx 

1sam 

adm 

10 10月 31 00:58 httpd2.conf ->;

34890 10月 31 00:57 httpd.conf

可以看到,使用ls -li,軟連線只產生了10位元組的快捷而已,硬連線卻實實在在的的拷貝。最前面的

一樣的變化.

現在使用命令:

現在刪除鏈結的原始檔,來比較不同之處

**:$ ls -l

總用量 44

-rw-r--r-- 

1sam 

adm 

34890 10月 31 00:57 httpd1.conf

lrwxrwxrwx 

1sam 

adm 

10 10月 31 00:58 httpd2.conf ->; httpd.conf

發現,httpd2.conf實際已經不存在了,是斷鏈,而httpd1.conf變也了普通檔案.

一、硬鏈結

硬鏈結說白了是乙個指標,指向檔案索引節點,系統並不為它重新分配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:38file1

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

$ ln file2 file2hard

$ ls –il

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

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

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

注意在建立鏈結前,file1顯示的鏈結數目為1,建立鏈結後(1)file1和file1hard的鏈結數目都變為2;(2)

file1和file1hard在inode號是一樣的(3)file1和file1hard顯示的檔案大小也是一樣。可見進行了ln命

令的操作結果:file1和file1hard是同乙個檔案的兩個名字,它們具有同樣的索引節點號和檔案屬性,建

立檔案file1的硬鏈結,就是為file1的檔案索引節點在當前目錄上建立乙個新指標。如下圖,你可以刪除

其中任何乙個,如rm file2 ,每次只會刪除乙個指標,

鏈結數同時減一,只有將所有指向檔案內容的指標,也即鏈結數減為0時,核心才會把檔案內容從磁碟上刪

除。還可以在不同目錄,但同一檔案系統中建立檔案的硬鏈結。設file1、file2在目錄/home/longcheng/dir1

中,下面的命令,在/home/longcheng中建立file2的硬鏈結。

ln file2 /home/longcheng/file2hard

下面的程式,是將dir1目錄中所有檔案,在目錄dir2中建立硬鏈結

$mkdir dir2

$ln /home/longcheng/dir1/* /home/longcheng/dir2

如果使用了 ln –f existingfilenewfile,如果newfile已經存在,則無論原來newfile是什麼檔案,只

用當前使用者對它有寫許可權,newfile就成為exisitngfile的硬鏈結檔案。

不同檔案系統的檔案間建立鏈結(2)只有超級使用者才可以為目錄建立硬鏈結。雖然很多樹上說root使用者

可以建立,但是筆者在學習過程中發現即使是root使用者也不能建立,我的系統是redhat,核心 2.4、2.6

都試過,在其他系統中不知道是不是可以。

二、軟鏈結(符號鏈結)

軟鏈結克服了硬鏈結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號鏈結。因而現

在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網路對檔案進行鏈結。

建立軟鏈結,只要在ln後面加上選項 –s,下面舉個例子

$ ls -il

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

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

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

$ln –s file1 file1soft

$ls -il

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

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

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

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

從上面鏈結後的結果可以看出來軟鏈結與硬鏈結,區別不僅僅是在概念上,在實現上也是不同的。

擁有不同的inode號,表明他們是兩個不同的檔案;在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈

接沒有寫出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係;鏈結數目是不一樣的,軟鏈結的鏈結

數目不會增加;檔案大小是不一樣的,硬鏈結檔案顯示的大小是跟原檔案是一樣的,這用強調,因為是等

同的嘛,而這裡軟鏈結顯示的大小與原檔案就不同了,file1大小是48b,而file1soft是5b,這裡面的5實

際上就是「file1」的大小。

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

接檔案找到真正要訪問的檔案。

在不同系統之間建立軟鏈結、對目錄建立鏈結,這裡就不舉例了,讀者可以自己去嘗試,我也是在不斷實

踐中學習的。

當然軟鏈結也有硬鏈結沒有的缺點,因為鏈結檔案包含有原檔案的路徑資訊,所以當原檔案從乙個目錄下

移到其他目錄中,再訪問鏈結檔案,系統就找不到了,而硬鏈結就沒有這個缺陷,你想怎麼移就怎麼移;

還有它要系統分配額外的空間用於建立新的索引節點和儲存原檔案的路徑。

軟連線和硬鏈結的區別

首先我們先來了解一下linux中檔案的組成 stat命令檢視i 節點資訊 在linux中檢視乙個檔案的內容是如何找到資料的呢?每個檔案都會有自己對應的inode號,檢視檔案時他會根據自己的inode號找到找到自己相應的blocks也就是資料 接下來就重點講一下硬鏈結和軟連線的使用和區別 硬鏈結 就是...

硬鏈結和軟連線的區別

要說明這個問題,先說明下liunx下檔案和目錄的本質。事實上,在liunx上,目錄也是檔案的一種,它是儲存了一張表的檔案。例如有乙個叫程式的資料夾,裡面有兩個檔案1和2.在那張目錄表內。它的內容是這樣的 名稱 節點 1 338 2 228 那麼什麼是節點呢?c語言我們都學過,我們簡單地把節點號理解成...

硬鏈結和軟連線的區別

硬鏈結和軟連線的主要區別在於 硬鏈結和原始檔具有相同的inode節點號和block,硬鏈結和原始檔是同一份檔案。軟連線和原始檔的inode節點號不同,進而指向的block也不同,軟連線block中存放了原始檔的路徑名 原始檔和硬鏈結檔案擁有相同的inode和block 修改任意乙個檔案,另乙個都改變...