linux連結分為兩種,一種稱為硬連結(hard link),另一個被稱為符號連結(symbolic link)。預設情況下,ln指令產生硬連結。硬連結和軟連結的區別從根本上從inode節點開始。以下是在linux系統中建立硬連結和軟連結的例子,看看linux中兩種連結的差異。
首先要弄清楚,在Linux系統中,核心為每一個新建立的檔案分配一個Inode(索引結點),每個檔案都有一個惟一的inode號。文件屬性保存在索引結點裡,在存取文件時,索引結點被複製到內存在,從而實現文件的快速存取。
連結是一種在共享檔案和存取它的使用者的若干目錄項目之間建立聯繫的一種方法。 Linux包含兩種連結:硬連結(Hard Link)和軟連結(Soft Link),軟連結又稱為符號連結(Symbolic link)。
硬連結
硬連結說白了是一個指針,指向檔案索引節點,系統並沒有為它重新分配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的文件索引節點在當前目錄上建立一個新指針。
連結數同時減一,只有將所有指向檔案內容的指標,也即連結數減為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 existingfile newfile,如果newfile已經存在,則無論原來newfile是什麼文件,只用當前用戶對它有寫權限,newfile就成為exisitngfile的硬連結檔。
儘管硬連結節省空間,也是Linux系統整合檔案系統的傳統方式,但是存在一下不足之處:
(1)不可以在不同檔案系統的檔案間建立連結
(2)只有超級使用者可以為目錄建立硬連結。雖然很多樹上都說root使用者可以創建,但筆者在學習過程中發現即使是root使用者也不能創建,我的系統是Redhat,核心2.4、2.6都試過,在其他系統中不知道是不是可以。
軟連結(符號連結)
軟連結克服了硬連結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號連結。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網路連結檔案。
建立軟鏈接,只要在ln後面加上選項 –s,例子如下:
$ 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系統中硬連結與軟連結的創建的詳細內容。更多資訊請關注PHP中文網其他相關文章!