我也问过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 命令显示文件大小等信息:
如果文件是目录,则显示的大小是系统分配给它的大小(对于 ext4 文件系统,每 4K 块为 4096 位) 即使其中有 0 个字节。
如果是普通文件,显示的大小是文件内容的大小,而不是文件占用的大小。
要了解文件占用的大小(无论是普通文件还是目录),请使用命令“du file_name”