
我注意到它ls -l
報告目錄的物理大小,同時報告文件的邏輯大小。例如,這是以下範例的輸出ls -l
:
drwxr-xr-x 2 chris chris 36864 2017-04-23 18:14 dir1
-rw-r--r-- 1 chris chris 6 2017-04-23 18:10 file1.txt
dir1
size 是 36864 字節,它是 4096 位元組的倍數(因此它可能是物理大小)。
而file1.txt
大小為 6 個位元組(這是邏輯大小)。
答案1
實際上,ls
報告核心告訴它的任何內容:它在大小方面沒有做任何不同的事情,這取決於檔案是否是目錄)。 Linux 報告邏輯大小。但是目錄的邏輯大小並不是一個非常有趣的屬性:它取決於檔案系統格式。
大多數 Linux 發行版上的預設檔案系統類型是 ext4,您可能正在使用該類型。 Ext4 為目錄分配整個區塊,並根據需要管理這些區塊內的空間。如果目錄收縮,它甚至不會釋放塊(dir1
即使您刪除了其中的所有文件,也會保留 9 個區塊)。當詢問恰好是目錄的檔案的大小時,ext4 會傳回為目錄分配的大小,並且這始終是整數區塊。
不同的檔案系統類型的行為不同。例如,對於 Btrfs,根據實驗,目錄的大小可以是 2 的任意倍數。
答案2
這是ext2
//ext3
檔案系統的功能ext4
,它們以完整區塊的形式報告目錄的大小。如果您對 XFS 進行相同的嘗試,您將看到更細粒度的大小。
真的沒關係。對於文件,「邏輯」大小是相關的,因為應用程式可能依賴於了解文件的大小(最多一個位元組):尾隨垃圾可能是相關的,或者某些資料結構可能放置在相對於文件末尾的位置。文件(例如.zip 檔案)。
對於目錄來說,「邏輯」大小並不重要,因為內部結構是眾所周知的,而且在 Linux 上,用戶空間程式甚至無法直接讀取目錄的內容。相反,讀取必須經過為此目的而進行的系統呼叫。而那些系統呼叫將處理目錄的內部結構。