linux文件系統節點詳解


linux文件系統有兩層結構,邏輯結構和物理結構。也就是inode和block。

每個文件都有一個inode, 記錄文件屬性:權限,時間還有最重要的block號碼。

block是實際存放文件內容的地方。

但文件名不在這里。在哪?在目錄的block里面。

目錄也有一個唯一的inode,記錄內容與文件inode大體相似。

block是記錄該目錄下文件名,子目錄名與它們的inode信息的地方。

所以我們在找文件時,比如/etc/issue,先讀/目錄的inode,找到/的內容block,再從中找出etc/的inode,

然后讀etc/的block,找出issue的inode,再讀issue的block,得出內容。當然前提是所有權限支持。

這也是為什么新建文件,刪文件時要目錄權限配合的原因。

因為文件本身不記錄文件名,文件名記錄在其父目錄的block中。

那/目錄的inode記錄在哪里?這是雞生蛋,蛋生雞的問題。解決循環要有外力介入。

先有雞還是先有蛋?先有雞,因為雞是恐龍進化來的。恐龍下蛋,但那畢竟不是雞蛋.....

所以還是先有雞,后有雞蛋。這也解決了沒有雞蛋,雞是從哪里來的問題。

根目錄的inode是掛載時候記錄的,因此有了/的inode,找文件就是一路順藤摸瓜。

 

 

再談談linux下的link。

它分硬鏈接和軟鏈接兩種。軟鏈接應用較廣。

硬鏈接只是在相應目錄的block里面記錄了目標文件的inode。也就是多寫了一行。它,不是真正意義上的文件,沒有自己的inode,所以不會占用inode和block,但目標文件的inode引用計數會+1。

刪除目標文件,硬鏈接依舊可以打開,畢竟刪除只是刪block里的文件名映射而已,由於硬鏈接里有完整的文件名映射,所以依然可以打開。

 

軟鏈接則不同。軟鏈接記錄的是目標文件的文件名。會占用新的inode和block,block里記錄的是目標文件的文件名。打開軟鏈接時,先找到目標文件的文件名,在去相應目錄去找inode, 相當於中間多了一層。

刪除目標文件后,軟鏈接無法打開。因為目標文件的文件名已經被刪除,中間層不存在,所以即使目標文件的inode和block還在,但邏輯上它已經不存在了。所以無法打開。

 

但,無論更改軟鏈接或者硬鏈接,都相當於更改原文件!

另外新建目錄時會自動建兩個硬鏈接.和..,所以本目錄初始化時,link為2。上層目錄link數會+1.

 ln 默認建硬鏈接,-s 建軟鏈接。


免責聲明!

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



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