1. 程式人生 > >Linux VFS-硬連線和軟連線區別

Linux VFS-硬連線和軟連線區別

1.inode節點

Linux VFS其中有一個物件是索引節點,它記錄了與具體檔案相關的資訊,儲存在磁碟上,與磁碟上的檔案控制塊相對應。它用索引節點號進行標識,與資料區相對應,兩個不同的資料區的inode節點號一定不相同。

得用ls -il 可以檢視inode節點號,如下所示:

425153 drwxr-xr-x 2 root root    4096 07-15 19:18 ATIDriver
 850308 drwxr-xr-x 8 1000 users   4096 11-16 20:34 fuse-2.8.6
  98118 -rw-r--r-- 1 root root  505334 11-16 20:21 fuse-2.8.6.tar.gz
 555969 drwxr-xr-x 3 root root    4096 11-20 11:22 Intel open storage toolkit
1635201 drwxr-xr-x 6 root root    4096 11-16 20:01 IOrunner
 588673 drwxr-xr-x 4 root root    4096 07-15 18:05 kscope
 11 drwx------ 2 root root   16384 07-14 23:51 lost+found

最左邊一列就是inode節點號。

2. 硬連線與軟連線

硬連線:兩個檔案指向同一個inode節點,即共享同一片資料區。

軟連線:具有直接的inode索引節點,其連結這個檔案包含被連結的檔名。

其實,硬連線讓兩個檔案名錶示同一個檔案,這是通過讓目錄項物件的d_inode指標指向同一個索引節點,而且目錄項物件的d_name指的是檔名。這樣,就可以讓不同的檔名指向同一個檔案。硬連線能夠防止“誤刪", 如果檔案有多個硬連線,如果刪除一個連線,並不影響索引節點和其它連線,只有當最後一個連線被刪除後,檔案才會被刪除。軟連線的檔案實際上是一個文字檔案,包含另一個檔案的位置資訊。

舉例:

[[email protected] h]# touch file1
[[email protected] h]# ln file1 file2
[[email protected] h]# ls -l
總計 0
-rw-r--r-- 2 root root 0 12-21 17:19 file1
-rw-r--r-- 2 root root 0 12-21 17:19 file2
首先建立一個檔案file1, 然後建立硬連線file2,可以看出引用計數為2. 當刪除file1或者是file2時,建立的檔案依然存在。因為當引用計數不為0時,不會刪除索引節點及資料區,只將目錄項物件刪除。如果將file1和file2同時刪除,那麼touch的檔案也就被刪除了。

[[email protected] h]# ln -s file1 file3
[[email protected] h]# ls -l
總計 0
-rw-r--r-- 2 root root 0 12-21 17:19 file1
-rw-r--r-- 2 root root 0 12-21 17:19 file2
lrwxrwxrwx 1 root root 5 12-21 17:22 file3 -> file1
接下來,建立符號連線file3. 此時刪除file3,對file1和file2無影響,因為符號連線只是儲存了檔案的位置資訊。若刪除file2,由於是硬連線,對file1和file3無影響。若刪除file1, 由於file3儲存了file1的位置資訊,因此,導致file3失效,變成無效的連線。

3.區別

(1)軟連線是檔案路徑指標,它甚至不需要原檔案存在,稱為斷鏈。

(2)硬連線和原檔案指向一個索引節點,即同一片資料區,此資料區必須存在。

(3)硬連線不能跨檔案系統,因為不同檔案系統的inode節點是不相同的。軟連線可以。

(4)目錄不允許建立硬連線,容易造成檔案系統混亂。目錄 可以建立軟連結。參考http://c2.com/cgi/wiki?HardLink