文件硬鏈接和軟鏈

linux系統下提供ln指令來進行文件鏈接。文件鏈接主要分爲硬鏈接和軟鏈接。

   硬鏈接:由於linux下的文件是通過索引節點(Inode)來識別文件,硬鏈接可以認爲是一個指針,指向文件索引節點的指針,系統並不爲它重新分配inode。每添加一個一個硬鏈接,文件的鏈接數就加1。

    可以用:ln命令來建立硬鏈接。語法:

 

[php] view plain copy
  1. ln [options] existingfile newfile  
  2. ln[options] existingfile-list directory   

  用法: 第一種:爲”existingfile”創建硬鏈接,文件名爲”newfile”。第二種:在”directory”目錄中,爲 ”existingfile-list”中包含的所有文件創建一個同名的硬鏈接。常用可選[options] –f 無論”newfile”存在與否,都創建鏈接。-n 如果”newfile”已存在,就不創建鏈接。

  例子:

 

[php] view plain copy
  1. $ ls –il  
  2. 13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1  
  3. 13059 -rwx - - - - - - 1 longcheng longcheng 57 8月 5 16:40 file2  
  4. $ ln file2 file2hard  
  5. $ ls –il  
  6. 13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1  
  7. 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2  
  8. 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的文件索引節點在當前目錄上建立一個新指針。如下圖,你可以刪除其中任何一個,如rm file2 ,每次只會刪除一個指針,鏈接數同時減一,只有將所有指向文件內容的指針,也即鏈接數減爲0時,內核纔會把文件內容從磁盤上刪除。

 不足:

儘管硬鏈接節省空間,也是Linux系統整合文件系統的傳統方式,但是存在一下不足之處:(1)不可以在不同文件系統的文件間建立鏈接(2)只有超級用戶纔可以爲目錄創建硬鏈接。

 

 

軟鏈接(符號鏈接):

軟鏈接克服了硬鏈接的不足,沒有任何文件系統的限制,任何用戶可以創建指向目錄的符號鏈接。因而現在更爲廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網絡對文件進行鏈接。

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

   例子:

  

 

[php] view plain copy
  1. $ ls -il  
  2. 13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1  
  3. 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2  
  4. 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard  
  5. $ln –s file1 file1soft  
  6. $ls -il  
  7. 13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1  
  8. 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2  
  9. 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard  
  10. 13061 lrwxrwxrwx 1 longcheng longcheng 5 8月 5 16:58 file1soft->file1   

 

軟鏈接與硬鏈接,區別不僅僅是在概念上,在實現上也是不同的。區別:硬鏈接原文件&鏈接文件公用一個inode號,說明他們是同一個文件,而軟鏈接原文件&鏈接文件擁有不同的inode號,表明他們是兩個不同的文件;在文件屬性上軟鏈接明確寫出了是鏈接文件,而硬鏈接沒有寫出來,因爲在本質上硬鏈接文件和原文件是完全平等關係;鏈接數目是不一樣的,軟鏈接的鏈接數目不會增加;文件大小是不一樣的,硬鏈接文件顯示的大小是跟原文件是一樣的,這用強調,因爲是等同的嘛,而這裏軟鏈接顯示的大小與原文件就不同了,file1大小是48B,而file1soft是5B,這裏面的5實際上就是“file1”的大小。

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

 

缺點:

因爲鏈接文件包含有原文件的路徑信息,所以當原文件從一個目錄下移到其他目錄中,再訪問鏈接文件,系統就找不到了,而硬鏈接就沒有這個缺陷,你想怎麼移就怎麼移;還有它要系統分配額外的空間用於建立新的索引節點和保存原文件的路徑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章