關於檔案系統在建立目錄檔案和普通檔案時的區別

TheBlackEagle發表於2024-04-24

在上一篇探究linux直譯器時同樣涉及到了一些其他問題

比如為什麼在ls -lh時目錄的大小都是4.0k?

之前想過可能是最小或者最大隻能顯示出4.0k的,但是就如上圖顯示的,這兩種都是不可能的

直到我在使用stat命令檢視檔案大小時忽然想到,用這個命令能不能檢視資料夾的大小?

然後發現還真能,但是也是4.0k

於是我開始想,難不成這個資料夾真的就是4.0k這麼大?但是這是為什麼?

後來發現自己還是windows用多了,下意識就以為資料夾的大小就應該是整個資料夾中所有檔案的大小加和

而實際上呢,這個目錄本身也是一個檔案,而我們這些檢視檔案大小的命令檢視的就是這個目錄本身的檔案大小,而不是目錄下包含的檔案大小總和

那為什麼所有目錄檔案的大小都是4k呢

透過這兩篇文章:

https://cloud.tencent.com/developer/ask/sof/211345

https://www.cnblogs.com/iiiiher/p/8511351.html

我們可以得知在建立檔案時,系統會給這個檔案分配一個叫inode(索引節點)的東西,這個inode會指向一個block,這個block就是實際存檔案的地方

這個block我覺得挺好理解的吧

參考這個:https://blog.csdn.net/jialexiao/article/details/71124930

大概就是資料的存放是一塊一塊的,而這個塊的大小我們這裡預設是4096也就是4k,在建立檔案時自動會給inode指向一個block,而目錄檔案又不會再寫入什麼的(還真不太一定哈,稍後研究研究),所以我們就會看到目錄檔案都是統一的4k大小

但是如果是這樣的話那不就和一開始的猜想之一一樣了嗎,即“最小的檔案大小就是4k”,而我們能夠很明顯地看到小於4k的檔案大小是可以正常顯示的

那麼這裡的區別還是回到了普通檔案和目錄檔案的區別在哪

本來找了半天沒找到,結果最後發現自己找錯方向了

參考這篇文章:https://blog.csdn.net/dangpu/article/details/40020801

在建立空檔案時是不會分配block的,只會分配一個inode,而建立資料夾時會同時分配block和inode

上面提到的文章還講了關於這個block還有一個東西就是在使用ls -l時,上面顯示的這個total是什麼東西

還看到有人說block是4K,total是block的個數,所以total可以是0,1,2,3...等正整數的,這個其實非常好驗證,我試了一下

可以看到ls -lh時顯示檔案的大小隻有2,但是total卻是4.0K

這裡還發現件事,就是這個total是根據你當前實際顯示出的檔案來計算的,比如如果加上了-a,那麼這個total就會增加

看起來似乎是把這兩個目錄.和..也計算上了

參考:

https://www.cnblogs.com/xumenger/p/4491425.html

https://zhuanlan.zhihu.com/p/73437944

https://blog.csdn.net/qq_42759112/article/details/126249990

https://blog.csdn.net/jialexiao/article/details/71124930

相關文章