首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Linux中的空目录的大小是4KB?

为什么Linux中的空目录的大小是4KB?
EN

Stack Overflow用户
提问于 2014-10-31 02:26:53
回答 2查看 10.1K关注 0票数 20

我使用Ubuntu14.04并使用mkdir命令在/tmp上创建了一个空目录:

代码语言:javascript
运行
复制
cd /tmp
mkdir foo

然后我用ls检查了它的大小:

代码语言:javascript
运行
复制
ls -ldh foo

结果显示,这个目录的大小是4KB,尽管它里面什么都没有!

然后我创建了一个带有touch的空文件:

代码语言:javascript
运行
复制
touch empty

然后我检查了它的尺寸:

代码语言:javascript
运行
复制
ls -l empty

结果表明,空文件为0B,与空目录不同。

我读过一些Q&A的说法,4KB是目录的元数据。但是如果是元数据,里面存储着什么样的信息,为什么它如此庞大,为什么一个空文件没有这样的元数据呢?如果不是元数据,4KB意味着什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-31 02:43:21

我要把这个问题分成三部分,其中两部分我可以回答.

第1部分:为什么一个空目录大小不是0?

因为它包含...,所以它不是真正的空。

第二部分:为什么4K是最小值?

因为这是文件系统的块大小。您可以在创建文件系统时将其设置得更小,但存在开销。文件系统必须记住每个块都有一个免费或正在使用的标志,所以小块=更多块=更多开销。(在ext2的早期,默认的块大小是1K。磁盘足够小,不为每个文件分配4K倍数所节省的空间比用于空闲块映射的空间更重要。)

超过4K的块大小是不可能的,因为4K是大多数处理器上的页面大小(虚拟内存的最小单位),而Linux的设计并不是为了处理大于内存页的文件系统块。

第3部分:当您ls -l一个常规文件时,您得到实际使用的字节数,但是当您ls -ld一个目录时,您得到了分配的字节数。为什么?

这部分我不知道。对于常规文件,您可以使用ls -s查看分配大小,这两个大小实际上告诉您不同的事情。但是在目录中,-l大小就像-s大小的冗余副本。据推测,内核可以报告一个大小来表示实际使用了多少4K块,但它没有,我不知道为什么。

票数 33
EN

Stack Overflow用户

发布于 2014-10-31 02:39:58

目录包含的元数据是一系列目录条目。它在创建时并不是空的,因为立即创建了两个目录:一个用于该目录,名为".",另一个用于其父目录,称为"..“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26666642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档