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

Ste*_*fan 23 ls filesystems

根据 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
Run Code Online (Sandbox Code Playgroud)

Bru*_*ger 18

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

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

  • http://ext2.sourceforge.net/2005-ols/paper-html/node3.html 解释了 dir_index 功能散列文件名和文件系统特定的秘密。如果启用了该功能,dump2efs 在其文件系统功能行中包含 dir_index。 (2认同)

jll*_*gre 5

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