Linux中硬鏈結和軟鏈結的區別和聯絡

2021-08-23 15:55:17 字數 3186 閱讀 8050

硬鏈結說白了是乙個指標,指向檔案索引節點,系統並不為它重新分配inode。可以用:ln命令來建立硬鏈結。語法:

quote:

ln [options] existingfile newfile

ln[options] existingfile-list directory

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

下面舉一些例子:

quote:

$ 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

注意在建立鏈結前,file1 顯示的鏈結數目為1,建立鏈結後(1)file1和file1hard的鏈結數目都變為2;(2) file1和file1hard在inode號是一樣的(3) file1和file1hard顯示的檔案大小也是一樣。可見進行了ln命令的操作結果:file1和file1hard是同乙個檔案的兩個名字,它們具 有同樣的索引節點號和檔案屬性,建立檔案file1的硬鏈結,就是為file1的檔案索引節點在當前目錄上建立乙個新指標。

鏈結數同時減一,只有將所有指向檔案內容的指標,也即鏈結數減為0時,核心才會把檔案內容從磁碟上刪除。當前目錄邏輯結構:(不好意思圖沒有顯示出來)。

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

quote:

ln file2 /home/longcheng/file2hard

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

quote:

$mkdir dir2

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

如果使用了 ln –f existingfile newfile,如果newfile已經存在,則無論原來newfile是什麼檔案,只用當前使用者對它有寫許可權,newfile就成為exisitngfile的硬鏈結檔案。

儘管硬鏈結節省空間,也是linux系統整合檔案系統的傳統方式,但是存在一下不足之處:

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

(2)只有超級使用者才可以為目錄建立硬鏈結。雖然很多樹上說root使用者可以建立,但是筆者在學習過程中發現即使是root使用者也不能建立,我的系統是redhat,核心2.4、2.6都試過,在其他系統中不知道是不是可以。

二、軟鏈結(符號鏈結)

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

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

quote:

$ 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」的大小。

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

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

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

補充一下:可以通過symlink來檢視鏈結檔案,可以用 man symlink來學習。

linux中軟鏈結和硬鏈結

linux中存在兩種鏈結檔案,軟鏈結和硬鏈結。硬鏈結 使用方式 ln sourcefile destfile 原理 linux檔案系統中每個檔案所對應的實際硬碟位置資訊會儲存在檔案的inode中,目錄結構的實現即是通過inode的組織實現的,具體還涉及到檔案塊的分配等,以後有機會在寫文章回顧大學學的...

Linux中的硬鏈結和軟鏈結

1.linux鏈結概念 linux鏈結分兩種,一種被稱為硬鏈結 hard link 另一種被稱為符號鏈結 symbolic link 預設情況下,ln命令產生硬鏈結。硬連線 硬連線指通過索引節點來進行連線。在linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節...

linux中的硬鏈結和軟鏈結

硬鏈結 指向同乙個索引節點,進而指向同乙個物理檔案。只要有乙個硬鏈結存在,物理檔案就不會被清除。硬鏈結和原檔案是 平等 的,只刪除乙個不能使檔案真正被刪除。軟鏈結 指向乙個新的索引節點,該節點指向的空間存的是檔案的路徑,根據路徑找到物理檔案。如果軟鏈結建立時指定的那個目錄被 刪除 則無法訪問物理檔案...