例項講解Linux系統中硬鏈結與軟鏈結的建立

2021-09-08 18:43:57 字數 3240 閱讀 2277

首先要弄清楚,在linux系統中,核心為每乙個新建立的檔案分配乙個inode(索引結點),每個檔案都有乙個惟一的inode號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實現檔案的快速訪問。

硬鏈結

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

注意:

在建立鏈結前,file1 顯示的鏈結數目為1

建立鏈結後(1)file1和file1hard的鏈結數目都變為2;(2) file1和file1hard在inode號是一樣的;(3)file1和file1hard顯示的檔案大小也是一樣。

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

還可以在不同目錄,但同一檔案系統中建立檔案的硬鏈結。設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 existingfile newfile,如果newfile已經存在,則無論原來newfile是什麼檔案,只用當前使用者對它有寫許可權,newfile就成為exisitngfile的硬鏈結檔案。

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

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

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

軟鏈結(符號鏈結)

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

$ 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號,表明他們是兩個不同的檔案。

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

鏈結數目是不一樣的,軟鏈結的鏈結數目不會增加;檔案大小是不一樣的,硬鏈結檔案顯示的大小是跟原檔案是一樣的。

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

免費提供最新linux技術教程書籍,為開源技術愛好者努力做得更多更好:

linux系統鏈結 硬鏈結

在linux系統中,鏈結可分為兩種 一種為硬鏈結 hard link 另一種為軟鏈結或符號鏈結 symbolic link or soft link ln這個命令就是建立鏈結檔案的。在預設不帶引數的情況下,執行ln命令建立的鏈結是硬鏈結。如果帶 s建立鏈結則為軟鏈結。硬鏈結是指通過索引節點 inod...

Linux作業系統的硬鏈結與軟鏈結講解

2006 11 21 10 34 13 linux 聯盟收集 首先要弄清楚,在 linux 系統中,核心為每乙個新建立的檔案分配乙個 inode 索引結點 每個檔案都有乙個惟一的 inode 號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實現檔案的快速訪問。鏈結是一種在共享...

linux系統 軟鏈結 硬鏈結

區別 硬鏈結原檔案 鏈結檔案公用乙個inode號,說明他們是同乙個檔案,而軟鏈結原檔案 鏈結檔案擁有不同的inode號,表明他們是兩個不同的檔案 在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈結沒有寫 出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係 鏈結數目是不一樣的,軟鏈結的鏈結數目不會增加 ...