Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
6年前关闭。
Improve this question
我正在使用Ubuntu 14.04,并使用mkdir命令在/tmp上创建了一个空目录:
然后我用ls检查了它的大小:
结果显示目录的大小为4KB,尽管里面什么也没有!
然后我触摸创建了一个空文件:
然后我检查了它的大小:
结果显示空文件的大小为0B,与空目录不同。
我已经读过一些问答,说4KB是目录的元数据。但是,如果它是元数据,那么内部将存储什么类型的信息,为什么存储的信息如此之大,以及为什么一个空文件没有这种元数据?如果不是元数据,那么4KB是什么意思?
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
6年前关闭。
Improve this question
我正在使用Ubuntu 14.04,并使用mkdir命令在/tmp上创建了一个空目录:
cd /tmp
mkdir foo
然后我用ls检查了它的大小:
ls -ldh foo
结果显示目录的大小为4KB,尽管里面什么也没有!
然后我触摸创建了一个空文件:
touch empty
然后我检查了它的大小:
ls -l empty
结果显示空文件的大小为0B,与空目录不同。
我已经读过一些问答,说4KB是目录的元数据。但是,如果它是元数据,那么内部将存储什么类型的信息,为什么存储的信息如此之大,以及为什么一个空文件没有这种元数据?如果不是元数据,那么4KB是什么意思?
最佳答案
我将把这个问题分解为3个部分,其中2个我可以回答...
第1部分:为什么空目录大小不为0?
因为它包含.
和..
,所以它并不是真正的空。
第2部分:为什么最低4K?
因为那是文件系统的块大小。创建文件系统时,可以将其设置为较小,但是会产生开销。文件系统必须记住每个块的“正在使用或正在使用”标志,因此,较小的块=更多的块=更多的开销。 (在ext2的早期,默认块大小为1K。磁盘足够小,通过不为每个文件分配4K的倍数节省的空间比用于免费块映射的空间更为重要。)
超过4K的块大小是不可能的,因为4K是大多数处理器上的页面大小(虚拟内存的最小单位),并且Linux并非旨在处理大于内存页面的文件系统块。
第3部分:当您用ls -l
一个常规文件时,您将获得实际使用的字节数,但是当您用ls -ld
一个目录时,您将获得分配的字节数。为什么?
这部分我不知道。对于常规文件,您可以使用ls -s
查看分配大小,这两个大小实际上告诉您不同的内容。但是在目录上,-l
大小类似于-s
大小的冗余副本。大概内核可以报告一个大小,该大小指示实际使用了4K块的多少,但没有使用。我不知道为什么
关于linux - 为什么Linux中的空目录大小为4KB? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26666642/