目录中文件的“目录顺序”是什么(由“ls -U”使用)?

目录中文件的“目录顺序”是什么(由“ls -U”使用)?

根据 ls 的手册页,ls -U意思是:

不排序;按目录顺序列出条目。

“目录顺序”是什么意思?它是如何确定的?

以下测试(在 ext3 文件系统上执行)表明这不是文件创建的顺序:

root@sv1010vm0007:/tmp# mkdir test
root@sv1010vm0007:/tmp# touch test/2
root@sv1010vm0007:/tmp# touch test/1
root@sv1010vm0007:/tmp# touch test/3
root@sv1010vm0007:/tmp# ls -U test
2  3  1

答案1

这取决于文件系统。对于某些文件系统(其中包括 ext3),目录实际上是具有众所周知格式的文件,并且在其权限或模式中设置了“d”位。在这种情况下,创建和删除文件名长度的历史记录可能很重要。内核将填充目录文件中的第一个条目,该条目有足够的空间来保存新文件的名称。看http://e2fsprogs.sourceforge.net/ext2intro.html有关更多详细信息,请参阅标题为“物理描述”的部分。

对于其他一些文件系统,其中包括 Reiserfs,目录实际上是只是 B+ 树中的一些条目这在文件系统中不可见,因此lsReiserfs 文件系统中的普通目录是按词法顺序排列的。

答案2

事实上,没有特定的顺序可以期待。由操作系统和文件系统实现来按照自己喜欢的方式对条目进行排序。此选项的一个目标是尽可能获得更快的列表,这对于非常大的目录来说可能是一个重要因素。

答案3

这是条目在文件系统内部存储的顺序。这会因文件系统的不同而有所不同。例如,整体可以存储在某种平衡树中,例如红黑树。对于条目数量较少的目录,或者有效地处理添加和删除,可能会有进一步的优化。

答案4

目录只是另一个文件,它列出了实际文件的元数据。 “ls -U”只是在目录文件中以相同的顺序列出全部内容。

该顺序由操作系统和文件系统实现决定。

相关内容