剖析Linux系統中永久連結與軟連結的區別

來源:互聯網
上載者:User

首先要弄清楚,在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的檔案索引節點在目前的目錄上建立一個新指標。如,你可以刪除
其中任何一個,如rm file2 ,每次只會刪除一個指標,

連結數同時減一,只有將所有指向檔案內容的指標,也即連結數減為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號,表明他們是兩個不同的檔案;在檔案屬性上軟連結明確寫出了是連結檔案,而永久連結沒有寫出
來,因為在本質上永久連結檔案和原檔案是完全平等關係;連結數目是不一樣的,軟連結的連結數目不會增加;檔案大小是不一樣的,永久連結檔案顯示的大小是跟原文
件是一樣的,這用強調,因為是等同的嘛,而這裡軟連結顯示的大小與原檔案就不同了,file1大小是48B,而file1soft是5B,這裡面的5實際
上就是“file1”的大小。

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

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

當然軟連結也有永久連結沒有的缺點,因為連結檔案包含有原檔案的路徑資訊,所以當原檔案從一個目錄下移到其他目錄中,再訪問連結檔案,系統就找不到了,而硬
連結就沒有這個缺陷,你想怎麼移就怎麼移;還有它要系統分配額外的空間用於建立新的索引節點和儲存原檔案的路徑。補充一下:可以通過symlink來查看
連結檔案,可以用 man symlink來學習。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.