LINUX 硬連線和軟連線

gaopengtttt發表於2016-01-26
在瞭解了EXT2的構架後,我們來了解一下硬連結是什麼:
說白了一個檔案都有一個Inode和相應目錄下的記錄項,如果我們建立一個硬連線實際上是在目錄下建立一個新的記錄項
我們知道記錄項中包含了 Inode的編號,新的記錄項實際也是指向原有的Inode
我們來考慮如下:
gaopeng@bogon:~/stu/part3$ ln testkl testkl1
gaopeng@bogon:~/stu/part3$ stat testkl
  File: ‘testkl’
  Size: 8861            Blocks: 40         IO Block: 4096   regular file
Device: 1bh/27d Inode: 396425      Links: 2
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/ gaopeng)   Gid: ( 1000/ gaopeng)
Access: 2016-01-25 12:26:09.749519495 +0800
Modify: 2016-01-25 11:16:42.721510371 +0800
Change: 2016-01-25 12:26:22.909519524 +0800
 Birth: -
gaopeng@bogon:~/stu/part3$ stat testkl1
  File: ‘testkl1’
  Size: 8861            Blocks: 40         IO Block: 4096   regular file
Device: 1bh/27d Inode: 396425      Links: 2
Access: (0775/-rwxrwxr-x)  Uid: ( 1000/ gaopeng)   Gid: ( 1000/ gaopeng)
Access: 2016-01-25 12:26:09.749519495 +0800
Modify: 2016-01-25 11:16:42.721510371 +0800
Change: 2016-01-25 12:26:22.909519524 +0800
 Birth: -

注意這裡的 Inode: 396425硬連結和原有的檔案是一致的。那麼我們就考慮他們實際上透過一個Inode來指向它實際的資料塊

如果要刪除一個檔案實際上要等到記錄項都刪除後才會刪除。
如下:
gaopeng@bogon:~/stu/part3$ ls -l testkl
-rwxrwxr-x 2 gaopeng gaopeng 8861 Jan 25 11:16 testkl
gaopeng@bogon:~/stu/part3$ ls -l testkl1
-rwxrwxr-x 2 gaopeng gaopeng 8861 Jan 25 11:16 testkl1

可以看到這裡的testkl 和已經連線testkl1 的硬連線 硬連線計數都是2
如果刪除一份原有的testkl
gaopeng@bogon:~/stu/part3$ rm -rf testkl
gaopeng@bogon:~/stu/part3$ ls -l testkl1
-rwxrwxr-x 1 gaopeng gaopeng 8861 Jan 25 11:16 testkl1
而刪除實際上就是刪除記錄項和硬連線計數-1
發現硬連線計數已經為1了,如果這裡硬連線計數為0這個檔案才是完全刪除了。
如果存在任何一個硬連線存在換句話說一個記錄項存在,檔案就存在。
對於硬連線,除了RM 使用unlink 也可以達到rm 的目的,實際上rm 也是呼叫了unlink 函式

而軟連線 就是一個快捷方式,並不需要在目錄中有記錄項,如果刪除檔案
連線就失效了,硬連線是如果存在一個連線檔案及存在。


1、硬連線不允許跨檔案系統
2、硬連線不允許目錄,避免死迴圈

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-1982562/,如需轉載,請註明出處,否則將追究法律責任。

相關文章