Linux 中空檔案怎麼可能佔用零位元組?

Linux 中空檔案怎麼可能佔用零位元組?

我也問過Windows 的兄弟問題


在Linux中(我剛剛測試過):

  • 空資料夾的大小為 4 KB(無論其名稱為何)
  • 空檔案的大小為 0 位元組

然而,文件和資料夾顯然有名稱,必須儲存在某個地方。

  • 它們大致儲存在哪裡?
  • 可用於儲存這些資料的最大記憶體是預先定義的數字還是取決於磁碟中的可用空間?
  • 具有短名稱的空文件是否比具有較大名稱的空文件佔用更少的空間? (或者也許儲存這些名稱的資料結構對於每個檔案都有固定的位元組數,這可能會用 填充剩餘的位元組\0?)
  • 名稱短的空資料夾是否比名稱大的空資料夾佔用的空間更少?
  • 名為 的空資料夾foobar比名為 的空檔案佔用更少的空間、相同的空間還是更多的空間foobar
  • 空文件 at/etc/empty.txt佔用的空間比空文件 at 佔用的空間更少、相同還是更多/etc/long/nested/path/until/the/empty/file/is/reached/empty.txt

答案1

檔案名稱儲存在目錄中。目錄由目錄項目組成,每個目錄項目包含檔案名稱和該檔案的索引節點號。 inode 包含各種元數據,例如擁有該檔案的使用者 ID 和群組 ID、最後修改 inode 的時間等。可以有多個目錄條目(在相同或不同的目錄中)引用相同的索引節點號。當建立指向相同索引節點的附加目錄條目時,稱為建立硬連結。

inode 表中的 inode 數量是固定的,因此如果建立大量 inode,最終可能會耗盡 inode 表中的空間。 (您可以透過「df -i」查看正在使用的 inode 數量。如果您預期檔案系統中 inode 的平均大小小於預設值,您也可以建立具有大量 inode 的檔案系統。 )

目錄也由索引節點組成,其運作方式與檔案非常相似,但有以下例外。首先,即使是「空」目錄也會有「.」的目錄條目。 (目錄本身)和「..」(父目錄),因此即使是「空」目錄也會佔用 4k 的空間。其次,目錄不能有硬連結。也就是說(忽略“.”和“..”條目),只能有目錄條目引用目錄 inode。這意味著目錄形成樹,而不是廣義圖。

答案2

ls 指令顯示檔案大小等資訊:

  1. 如果檔案是目錄,顯示的大小是系統分配給它的大小(每塊 4K:ext4 檔案系統為 4096 位元) 即使其中有 0 位元組。

  2. 如果是普通文件,則顯示的大小是其內容的大小,而不是文件所佔用的大小。

要知道檔案所佔用的大小是普通檔案還是目錄,使用指令“du file_name”

相關內容