在 Linux 中空文件怎么会占用零字节?

在 Linux 中空文件怎么会占用零字节?

我也问过Windows 的一个兄弟问题


在 Linux 中(我刚刚测试过):

  • 空文件夹的大小为 4 KB(无论其名称如何)
  • 空文件的大小为 0 字节

但是,文件和文件夹显然有名称,必须存储在某个地方。

  • 它们大概存储在哪里?
  • 可用于存储这些数据的最大内存是否是预定义的数字,还是取决于磁盘中的可用空间?
  • 名称较短的空文件是否比名称较长的空文件占用更少的空间?(或者存储这些名称的数据结构对每个文件都有固定的字节数,也许用填充剩余的字节\0?)
  • 名称较短的空文件夹是否比名称较长的空文件夹占用的空间更少?
  • 一个名为的空文件夹foobar比一个名为的空文件占用的空间更少、相同或更多foobar
  • 处的空文件/etc/empty.txt比 处的空文件占用的空间更少、相同或更多/etc/long/nested/path/until/the/empty/file/is/reached/empty.txt

答案1

文件名存储在目录中。目录由目录条目组成,每个目录条目包含文件名和该文件的 inode 编号。inode 包含各种元数据,例如拥有该文件的用户 ID 和组 ID、inode 上次修改的时间等。文件名越长,目录中占用的空间就越多。可以有多个目录条目(在相同或不同的目录中)引用相同的 inode 编号。当创建指向同一 inode 的附加目录条目时,这称为创建硬链接。

索引节点表中的索引节点数量是固定的,因此如果您创建大量索引节点,最终可能会耗尽索引节点表中的空间。(您可以通过“df -i”查看正在使用的索引节点数量。如果您预计文件系统中索引节点的平均大小小于默认值,您还可以创建具有大量索引节点的文件系统。)

目录也是由 inode 组成的,其工作方式与文件非常相似,但有以下例外。首先,即使是“空”目录也会有“.” (目录本身) 和“..” (父目录) 的目录条目,因此即使是“空”目录也会占用 4k 的空间。其次,目录可能没有硬链接。也就是说(忽略“.”和“..”条目),只能有引用目录 inode 的目录条目。这意味着目录形成树,而不是广义的图。

答案2

ls 命令显示文件大小等信息:

  1. 如果文件是目录,则显示的大小是系统分配给它的大小(对于 ext4 文件系统,每 4K 块为 4096 位) 即使其中有 0 个字节。

  2. 如果是普通文件,显示的大小是文件内容的大小,而不是文件占用的大小。

要了解文件占用的大小(无论是普通文件还是目录),请使用命令“du file_name”

相关内容