1. 程式人生 > 其它 >linux中的連結

linux中的連結

剛學習linux就知道linux中的連結有兩種,符號連結和硬連結。但是兩者之間的區別又是怎樣的呢?有些教材是翻譯的英文,導致一些理解上很費解,其實這種問題很簡單,那就是自己動手測試一下。

1.符號連結

符號連結使用-s選項建立,例如我們有一個檔案sss.txt,建立符號連結的命令是:

ln -s sss.txt ttt.txt

此處的-s是指的symbolic,不過國內也有人喜歡叫做軟連結,導致一些人以為s的意思是soft。

在ubuntu中,符號連結檔案和原始檔顯示如下:

可以看到符號連結的檔案,有一個類似windows系統下快捷方式的小箭頭。

首先,符號連結檔案和原來的檔案,檔案大小、內容不同,而且是兩個完全不同的檔案,這個可以通過inode確認。

可以看到sss.txt檔案大小是67位元組,而ttt.txt檔案大小為7位元組。兩個檔案的inode分別是1836284和1835050,說明確實是兩個不同的檔案。

其次,在訪問時的作用。如果我用文字編輯器開啟sss.txt,輸入一些內容然後儲存,然後用文字編輯器再開啟ttt.txt,可以看到其內容也產生了變化。反過來,我繼續在ttt.txt中輸入一些字元儲存後,再開啟sss.txt,則其中內容也產生變化。

最後我們我們還可以看到,即使內容產生變化,兩個檔案的大小變化情況:

sss.txt檔案大小已經變為89位元組了,而ttt.txt檔案大小仍舊為7位元組,因為它僅僅指向了sss.txt檔案, 符號連結檔案和windows平臺下的快捷方式很像。

2.硬連結

建立硬連結的時候不需要帶選項,我們再給sss.txt建立一個ppp.txt的硬連結,命令如下:

ln sss.txt ppp.txt

從ls顯示的結果來看,ppp.txt和sss.txt之間看起來沒什麼關係。但是如果我們用文字編輯器開啟sss.txt或者ppp.txt,對一個檔案內容的修改,同樣也會在另外一個檔案中得到體現,這一點和之前的符號連結倒是一致的。

此外,ppp.txt和sss.txt兩個檔案大小都是89位元組,我們自然會想到,他們是否是同樣一個檔案呢?看看inode吧:

可以看到,帶有硬連結的檔案共享inode編號 ,說明這兩檔案就是同一個檔案。

3. 區別

測試了這麼多,是時候做一下總結了。

相同點:

1)建立連結的命令都是ln,而且都要求原檔案存在,即你不能為一個不存在的檔案建立連結。

2)對原檔案內容的修改,都會反映到連結檔案上,反過來也一樣,也就是所謂的同步更新。

不同點:

1)符號連結是一個新的檔案,硬連結是同一個檔案

2)只能對處於同一儲存媒體的檔案建立硬連結。要想在不同儲存媒體的檔案之間建立連結,只能使用符號連結

3)軟連結會因為原檔案的刪除、重新命名等導致不可用,而硬連線不會。

例如,我們把sss.txt重新命名為aaa.txt,ppp.txt可以正常訪問和使用,而且更新也會在aaa.txt中得到體現,但是ttt.txt已經不可用了。

但是ppp.txt就不一樣了,你在ppp.txt中的修改都會在aaa.txt中得到反映,而且你把ppp.txt放到其他的路徑(同一儲存媒體)下,其效果也是一樣的。