學習Linux必須掌握的一個知識-i節點
linux文件系統是Linux系統的心臟部分,提供了層次結構的目錄和文件。文件系統將磁碟空間劃分為每1024個位元組一組,稱為塊(也有用512位元組為一塊的,如:SCOXENIX)。編號從0到整個磁碟的最大塊數。
全部塊可劃分為四個部分,塊0稱為引導塊,文件系統不用該塊;塊1稱為專用塊,專用塊含有許多信息,其中有磁碟大小和全部塊的其他兩部分的大小。從塊2開始是i節點表,i節點表中含有i節點,表的塊數是可變的,後面將做討論。i節點表之後是空閑存儲塊(數據存儲塊),可用於存放文件內容。
文件的邏輯結構和物理結構是十分不同的,邏輯結構是用戶敲入cat命令後所看到的文件,用戶可得到表示文件內容的字元流。物理結構是文件實際上如何存放在磁碟上的存儲格式。用戶認為自己的文件是邊疆的字元流,但實際上文件可能並不是以邊疆的方式存放在磁碟上的,長於一塊的文件通常將分散地存放在盤上。然而當用戶存取文件時,linux文件系統將以正確的順序取出各塊,給用戶提供文件的邏輯結構。
邏輯結構的表現就是通過i節點來完成的, linux中,文件查找不是通過文件名稱來查找的。實際上是通過i節點來實現文件的查找定位的。我們可以形象的將i節點看做是一個指針fip。當文件存儲到磁碟上去的時候,文件肯定會存放到一個磁碟位置上,可以這樣想像,既然文件數據是存放在磁碟上的,如果我們知道這個文件數據的地址,當我們想要讀寫文件的時候,我們是不是直接使用這個地址去找到文件就可以了呢?
是的,linux下,i節點其實就是可以這麼認為,把i節點看作是一個指向磁碟上該文件存儲區的地址。只不過這個地址我們一般是沒辦法直接使用的,而是通過文件名來間接使用的。事實上,i節點不僅包含了文件數據存儲區的地址,還包含了很多信息,比如數據大小,等等文件信息。但是i節點是不保存文件名的。文件名是保存在一個目錄項中。每一個目錄項中都包含了文件名和i節點。
我們可以通過一個圖來看看目錄項,i節點,文件數據四者之間的關係。
從上圖可以看到,目錄項中包含了文件名和i節點。
同時,你會發現上圖中,目錄項A和目錄項B的i節點指向同一個存儲區,其中這個存儲區存放的是printf("Hello World")的數據。
也就是意味著helloA.java和helloB.java的內容是一樣的。
這就引出了一個硬鏈接和符號鏈接的概念
硬鏈接 ln -d
符號鏈接 ln -s。
要想得到helloA.java和helloB.java這種關係,我們可以使用如下命令:
#ln -d helloA.java helloB.java
對於硬鏈接來說。如果刪掉源文件helloA.java,那麼磁碟上數據文件時不會刪除的。因為i節點上記錄了該文件的硬鏈接數。只有硬鏈接數是0的時候,刪除文件名的時候,該數據在磁碟上才會刪除。
也就是說。
創建符號鏈接命令:
#ln -s helloB.java helloC.java
符號鏈接其實是文件索引的索引。當源文件helloB.java刪除之後,其實磁碟數據文件還在,helloC.java也無法使用。
符號鏈接包含了一個文件名的路勁,如果這個文件名被刪除,這符號鏈接自然就不能正常工作了。
視頻教程
微信小程序視頻教程
學習視頻1
學習視頻2
linux免費學
TAG:JAVA碼農之家 |