1. 程式人生 > >Linux中硬連線與符號連線的區別

Linux中硬連線與符號連線的區別


要弄清楚硬連線與符號連線的區別,首先要知道Linux的Ext2檔案系統的基本原理:

每個檔案(無論是一般檔案還是目錄檔案)都會佔用一個inode和至少一個block。
inode記錄檔案的許可權、屬性和該檔案佔用的block號碼(注意inode沒有記錄該檔案的檔名)。
block記錄檔案的實際內容(對於目錄檔案,它的block記錄的是在該目錄下的檔名和該檔名佔用的inode號碼)。
當訪問某個檔案時,會從根目錄的inode號碼開始,找到inode內容,並根據inode讀取block,根據下一級檔名找到對應的inode號碼,這樣一層一層地往下讀到最終檔案的block為止。



硬連線檔案:
多個檔名對應到同一個inode號碼。
如果在某個目錄下為一個檔案建立一個硬連線檔案,實質是在該目錄檔案的block中添加了一個條目,這個條目由硬連線檔名和原始檔案的inode號碼組成。並沒有佔用新的inode和block。
如果刪除一個硬連線檔案,實質是刪除了該硬連線檔案所在目錄檔案的block中的一個條目,並沒有刪除該檔案的inode和block,因此不會對其它硬連線檔案造成影響。即同一個inode的硬連線檔案彼此都是地位平等的。
不能為目錄檔案建立硬連線檔案。
建立硬連線檔案的命令:ln 原始檔名 硬連線檔名




符號連線檔案:
如果為一個檔案建立一個符號連線檔案,符號連線檔案將會佔用新的inode和block,block記錄的是目標檔案的檔名,這樣可以通過檔名找到目標檔案的inode和block(從根目錄一層一層找)。
如果目標檔案被刪除了,則符號連線檔案就無法打開了。如果刪除的是符號連線檔案,則目標檔案不會受到影響。即目標檔案和它的符號連線檔案之間地位是不平等的。
當修改符號連線檔案時,實際修改的是目標檔案。
可以為目錄檔案建立符號連線檔案。
建立符號連線檔案的命令:ln -s 目標檔名 符號連線檔名