O que é a “ordem de diretório” dos arquivos em um diretório (usado por 'ls -U')?

18

De acordo com a página man do ls, ls -U significa:

do not sort; list entries in directory order.

O que significa "ordem de diretório" e como ela é determinada?

O teste a seguir (executado em um sistema de arquivos ext3) mostra que não é a ordem na qual os arquivos foram criados:

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
    
por Stefan 19.05.2011 / 17:49

4 respostas

14

Depende do sistema de arquivos. Para alguns sistemas de arquivos (ext3 entre eles), um diretório é, na verdade, um arquivo com um formato conhecido e o 'd' bit configurado em suas permissões ou modo. Nesse caso, o histórico de quantos nomes de arquivos foram criados e excluídos pode ser importante. O kernel preencherá a primeira entrada no arquivo de diretório que tenha espaço suficiente para conter o nome do novo arquivo. Consulte o link para obter mais detalhes, a seção intitulada "Descrição física".

Para alguns outros sistemas de arquivos, o Reiserfs entre eles, um diretório é, na verdade, apenas algumas entradas em uma árvore B + não visível no sistema de arquivos, portanto, um ls simples de um diretório em um sistema de arquivos Reiserfs está em ordem lexical.

    
por 19.05.2011 / 18:48
3

Na verdade, não há uma ordem específica a ser esperada. Cabe ao SO e à implementação do sistema de arquivos ordenar as entradas da maneira que desejar. Um dos objetivos dessa opção é obter a listagem mais rápida possível, o que pode ser um fator significativo com diretórios muito grandes.

    
por 19.05.2011 / 18:12
2

É a ordem em que as entradas são armazenadas internamente no sistema de arquivos. Isso irá variar de sistema de arquivos para sistema de arquivos. Por exemplo, as entradas podem ser armazenadas em algum tipo de árvore balanceada, como uma Red-Black Tree . Pode haver mais otimizações para diretórios com um pequeno número de entradas ou para lidar eficientemente com adições e remoções.

    
por 19.05.2011 / 18:13
-1

Diretório é apenas outro arquivo, que lista os metadados dos arquivos reais. "ls -U" apenas lista as entradas na mesma ordem no arquivo do diretório.

A ordem é determinada pelo SO e pela implementação do sistema de arquivos.

    
por 19.05.2011 / 19:09