原貼:http://www.51testing.com/?26162/action_viewspace_itemid_17598.html
Linux 硬連結與軟連結
2007-08-05 10:19:49
Linux 硬連結與軟連結 2006-12-01 15:03
首先要弄清楚,在Linux系統中,核心為每一個新建立的檔案配置設定一個Inode(索引結點),每個檔案都有一個惟一的inode号。檔案屬性儲存在索引結點裡,在通路檔案時,索引結點被複制到記憶體在,進而實作檔案的快速通路。 連結是一種在共享檔案和通路它的使用者的若幹目錄項之間建立聯系的一種方法。Linux中包括兩種連結:硬連結(Hard Link)和軟連結(Soft Link),軟連結又稱為符号連結(Symbolic link)。 一、硬連結 硬連結說白了是一個指針,指向檔案索引節點,系統并不為它重新配置設定inode。可以用:ln指令來建立硬連結。文法:
用法: 第一種:為”existingfile”建立硬連結,檔案名為”newfile”。第二種:在”directory”目錄中,為”existingfile-list”中包含的所有檔案建立一個同名的硬連結。常用可選[options] –f 無論”newfile”存在與否,都建立連結。-n 如果”newfile”已存在,就不建立連結。 下面舉一些例子:
注意在建立連結前,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 –f existingfile newfile,如果newfile已經存在,則無論原來newfile是什麼檔案,隻用目前使用者對它有寫權限,newfile就成為exisitngfile的硬連結檔案。 盡管硬連結節省空間,也是Linux系統整合檔案系統的傳統方式,但是存在一下不足之處:(1)不可以在不同檔案系統的檔案間建立連結(2)隻有超級使用者才可以為目錄建立硬連結。雖然很多樹上說root使用者可以建立,但是筆者在學習過程中發現即使是root使用者也不能建立,我的系統是Redhat,核心2.4、2.6都試過,在其他系統中不知道是不是可以。 二、軟連結(符号連結) 軟連結克服了硬連結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符号連結。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網絡對檔案進行連結。 建立軟連結,隻要在ln後面加上選項 –s,下面舉個例子
從上面連結後的結果可以看出來軟連結與硬連結,差別不僅僅是在概念上,在實作上也是不同的。差別:硬連結原檔案&連結檔案公用一個inode号,說明他們是同一個檔案,而軟連結原檔案&連結檔案擁有不同的inode号,表明他們是兩個不同的檔案;在檔案屬性上軟連結明确寫出了是連結檔案,而硬連結沒有寫出來,因為在本質上硬連結檔案和原檔案是完全平等關系;連結數目是不一樣的,軟連結的連結數目不會增加;檔案大小是不一樣的,硬連結檔案顯示的大小是跟原檔案是一樣的,這用強調,因為是等同的嘛,而這裡軟連結顯示的大小與原檔案就不同了,file1大小是48B,而file1soft是5B,這裡面的5實際上就是“file1”的大小。 總之,建立軟連結就是建立了一個新檔案。當通路連結檔案時,系統就會發現他是個連結檔案,它讀取連結檔案找到真正要通路的檔案。 在不同系統之間建立軟連結、對目錄建立連結,這裡就不舉例了,讀者可以自己去嘗試,我也是在不斷實踐中學習的。 當然軟連結也有硬連結沒有的缺點,因為連結檔案包含有原檔案的路徑資訊,是以當原檔案從一個目錄下移到其他目錄中,再通路連結檔案,系統就找不到了~~,而硬連結就沒有這個缺陷,你想怎麼移就怎麼移(呵呵);還有它要系統配置設定額外的空間用于建立新的索引節點和儲存原檔案的路徑。 |