Linux文件鏈接hard link與symbolic link


Linux中文件鏈接有兩種方式,一種是hard link,又稱為硬鏈接;另一種是symbolic link,又稱為符號鏈接。要區分兩者的不同要回顧Linux常用的ext2文件系統。這種文件系統使用inode與block,其中inode記錄文件數據所存儲的block序號,而block用於存儲數據。至於跟進一步的文件系統,分割盤,block group,meta data什么的這里不講,有興趣的同學參閱《鳥哥的Linux私房菜》。
硬盤的硬件以inode和block分割,但我們直觀可見的目錄如何存儲於硬盤中。這里我們要把目錄也看做文件,硬盤會分配一個inode和block,如果是文件系統的根目錄,一般分配的inode編號為2,方便系統啟動時查找。目錄下一層的檔案名和對應的inode編號存儲於該層目錄inode對應的block中。這里特別強調一點,目錄是一個樹形結構。我們這里談到的inode與block只與樹的一層對應。

如圖中所示,root作為一個目錄,會對應一個inode,這個inode對應的block會存儲file1,file2和direction1的inode和文件名和目錄名,但不會存儲file3和file4的inode和文件名。所以每一個目錄都對應一個inode和block,也只存儲自己之下一層以內的文件和目錄。只與再下面的文件可以通過打開direction1的inode對應block查看。目錄之間這種鏈式關系稱為掛載。direction1就掛載在root目錄下。
有了以上的認識之后我們再看什么是硬鏈接與符號鏈接。首先附上鳥叔的兩張圖(侵刪)


這兩種連接方式的不同就在於新建立的目錄名對應的inode指向什么,硬鏈接在文件block中新建立一條記錄,記錄文件名與數據對應inode,符號鏈接建立一條記錄保存文件所在路徑。進一步講,硬鏈接指向數據,符號鏈接指向目錄。這種不同的鏈接方法直接影響了文件inode節點數。硬鏈接會增加文件inode節點數,但符號鏈接這不會影響。倘使我們刪除一個硬鏈接,只要inode連接數不為0,數據就不會刪除。其他的硬鏈接還是可以鏈接到數據的。但符號鏈接只連接了這個文件所對應的文件名所在位置,不增加文件的inode節點數。倘使我們刪除原來的文件名,並使得inode節點數為0(沒有其他的硬鏈接),這個數據就被刪除了。盡管這個符號鏈接還存在,但是已經不能調用數據了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM