【轉】 Linux下軟鏈接與硬鏈接的區別

轉自西郵Linux小組大佬楊博東http://blog.csdn.net/yangbodong22011/article/details/50916311

由於下面會說到inode,所以如果沒有了解過,請務必搞懂inode的真正含義,厚顏無恥的推薦我的一篇博客: Linux磁盤與文件系統管理

如果我們在系統中新建一個文件,我們看到的文件名實際上只是表面現象,本質上會分配一個inode給我們用,inode記錄的信息有:文件的block位置,文件的UID,文件的GID,文件的讀寫執行權限等等,下面我們新建立一個名爲file的文件。
這裏寫圖片描述

實際上file在我們系統中存在的樣子更加形象的可以用下面的圖片來表示:

這裏寫圖片描述

file只是個名字,我們可以用mv命令更改這個名字,它只是讓我們用戶好記,並且從我們的角度爲它分配某些含義而已(比如我們習慣將密碼文件命名爲passwd)。

這裏寫圖片描述

我們看到changefile和file是一模一樣的,沒有任何差別,所以也就是說文件名並不能反映一個文件的屬性。接下來我們就要說重點,軟鏈接和硬鏈接了。

硬鏈接

硬鏈接實際上是一個文件inode的別名,我們可以爲一個inode起很多個名字,同時讓file和changefile存在也是可以的,就是建立硬鏈接,因爲文件名不會對文件本身產生影響。

ln 命令可以用來建立鏈接,不加參數表示建立硬鏈接
-s:建立軟鏈接

下面我們給changefile建立硬鏈接file,將我們的file找回來。

這裏寫圖片描述

通過ls -i命令查看inode我們發現它們是一樣的,那麼目前的情況會是怎樣呢?如下:

這裏寫圖片描述

只不過就是此inode有兩個名字了而已,我們通過任意一個文件名查看或者修改文件的內容,都會直接查看或者修改blocks塊中1,2,3的內容,並且file和changefile之間是不會互相影響的,我們刪除任何一個對對方沒有任何影響,大不了就是inode少一個名稱而已。

軟鏈接

與硬鏈接不同,軟鏈接相當於快捷方式,當我們雙擊一個圖標打開一個軟件時,本質上是在執行一個.exe文件一樣,通過這個圖標只能找到這個.exe文件,執行的過程是.exe完成的,如果.exe找不到,那麼這個快捷方式將會失效。因此在Linux中的軟鏈接實際上是另一個文件,這個文件與原文件是不同的,唯一的特殊之處就是它的內容記錄的是原文件的inode,我們通過inode再來找原文件的位置。

這裏寫圖片描述

明顯,softlink和changefile就是不同的文件。它的詳細情況就像下面這樣:

這裏寫圖片描述

我們通過softlink會找到inode1的位置,然後通過它定位文件的block,因此,如果一旦inode1被刪除了,那麼softlink就會無法找到文件,也就是這個軟鏈接會失效。我們刪除changefile試試看:

[kiosk@yangbodong ~]$ echo hello > file   //給file中寫入hello
[kiosk@yangbodong ~]$ cat file changefile softlink //三個文件中都有hello
hello
hello
hello
[kiosk@yangbodong ~]$ rm -fr file  //刪除了file
[kiosk@yangbodong ~]$ cat softlink //由於目前changefile還存在,inode1存在,因此softlink是有效的
hello
[kiosk@yangbodong ~]$ rm -fr changefile //刪除了changefile
[kiosk@yangbodong ~]$ cat softlink  //目前softlink再也找不到原來的inode的位置,因此失效了。
cat: softlink: No such file or directory

軟鏈接和硬鏈接的比較

軟鏈接                                         
優點  可以對目錄創建                        
缺點  消耗inode 不能對目錄創建
硬鏈接
優點  安全,節省空間
缺點  不能對目錄創建,不能跨越文件系統
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章