Quel est l'ordre "directory" des files dans un directory (utilisé par `ls -U`)?

Selon la page de manuel pour ls, ls -U signifie:

ne sortinger pas; listr les inputs dans l'ordre des directorys.

Que signifie "ordre d'annuaire" et comment est-il déterminé?

Le test suivant (exécuté sur un système de files ext3) montre que ce n'est pas l'ordre dans lequel les files ont été créés:

 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 

Cela dépend du système de files. Pour certains filesystems (ext3 parmi eux), un directory est en fait un file avec un format bien connu et le bit 'd' défini dans ses permissions ou mode. Dans ce cas, l'historique de la longueur des noms de files a été créé et supprimé. Le kernel remplira la première input dans le file de directory qui a assez d'espace pour contenir le nom du nouveau file. Voir http://e2fsprogs.sourceforge.net/ext2intro.html pour plus de détails, la section intitulée "Description physique".

Pour certains autres filesystems, Reiserfs parmi eux, un directory est en fait juste des inputs dans un tree B + qui n'est pas visible dans le système de files, de sorte qu'un simple ls d'un directory dans un système de files Reiserfs est dans l'ordre lexical.

En effet, il n'y a pas d'ordre spécifique à attendre. C'est à l'OS et à l'implémentation du système de files de order les inputs comme il le veut. Un des objectives de cette option est d'get la list plus rapide possible, ce qui peut être un facteur important avec de très grands directorys.

C'est l'ordre dans lequel les inputs sont stockées en interne dans le système de files. Cela variera d'un système de files à l'autre. Par exemple, les entires peuvent être stockés dans une sorte d'tree équilibré, tel qu'un tree rouge-noir . Il peut y avoir d'autres optimizations pour les directorys avec un petit nombre d'inputs, ou pour gérer efficacement les ajouts et les suppressions.

Le directory est juste un autre file, qui list les métadonnées des files réels. "ls -U" list simplement les entires dans le même ordre dans le file de directory.

La command est déterminée par le operating system et l'implémentation du système de files.