irá 'ls -lt' seguir os mtimes precisos ou apenas os mtimes aproximados até o segundo?

10

ls -l mostra apenas os registros de data e hora da modificação dos arquivos até o segundo. Se dois arquivos tiverem o mesmo registro de data e hora até o segundo, mas não tiverem sido modificados exatamente ao mesmo tempo, ls -lt ordenará os arquivos na ordem dos mtimes precisos ou apenas os mtimes aproximados até o segundo (e, portanto, a ordem entre os arquivos podem ser arbitrários)?

    
por Tim 07.01.2018 / 21:03

4 respostas

17

Isso depende muito da implementação de ls . Desses 4 encontrados em um sistema GNU / Linux aqui:

$ touch a; touch c; touch b; stat -c %y a c b
2018-01-10 12:52:21.367640342 +0000
2018-01-10 12:52:21.371640148 +0000
2018-01-10 12:52:21.375639952 +0000
  • GNU ls , aquele do projeto GNU (de a coleção GNU coreutils ). Essa é a única normalmente encontrada em sistemas GNU como o Debian (kernels Linux ou kFreeBSD), Cygwin ou Fedora.

    $ gnu-ls -rt
    a  c  b
    
  • A ls da Heirloom Toolchest , uma porta de ferramentas do OpenSolaris:

    $ heirloom-ls -rt
    a  b  c
    
  • A ls de a coleção de código aberto AT & T , possivelmente criada em ksh93 . Outro com algumas extensões sofisticadas:

    $ ast-ls -rt
    a  c  b
    $ PATH=/opt/ast/bin:$PATH ksh93 -c 'type ls; ls -rt'
    ls is a shell builtin version of /opt/ast/bin/ls
    a  c  b
    
  • busybox (como encontrado (ou derivado) na maioria dos sistemas baseados em Linux (geralmente incorporados):

    $ busybox ls -rt
    c  b  a
    

Então, desses, GNU e ast ls consideram a segunda parte fracionária. Os outros recorrem à comparação lexical para arquivos modificados pela última vez no mesmo segundo. Somente busybox ls respeita o -r .

Em meus testes, o ls do FreeBSD também suporta precisão de sub-segundo (desde que eles estejam habilitados no nível do VFS, veja vfs.timestamp_precision sysctl).

As globs de

zsh (com o qualificador om glob para encomendar na hora da modificação, Om para a ordem inversa) também levam o tempo todo:

$ echo *(Om)
a c b

[ file1 -nt file2 ] , em que o suporte também geralmente suporta granularidade abaixo de um segundo .

    
por 07.01.2018 / 22:32
4

Com relação à implementação ls do GNU, executar ls -l ordenará os arquivos em ordem alfabética e ls -lt ordenará os arquivos na ordem do tempo de modificação, o mais recente primeiro, com a maior precisão suportada pelo sistema de arquivos subjacente. Você pode verificar isso usando a opção --full-time .

Portanto, para responder à sua pergunta, sim, na maior extensão possível, mas somente quando você usar -t (caso contrário, será padronizado como alfabético) e usará uma implementação que a suporte (consulte A resposta de Stéphane para mais detalhes). Por exemplo, ext4 pode suportar precisão de nanossegundos, com inodes grandes o suficiente para armazenar os dados de registro de data e hora necessários.

    
por 07.01.2018 / 21:16
1

você pode verificar isso se comparar a saída de

ls -lat

e

ls -lat --full-time

não há nada arbitrário na classificação.

    
por 07.01.2018 / 21:11
1

Sim, será.

Para testar, crie dois arquivos com uma pequena diferença de tempo:

$ touch aa; sleep 0.2; touch bb

Verifique os horários de modificação:

$ stat -c %y bb aa
2018-01-07 20:51:19.364248042 0000
2018-01-07 20:51:19.072248226 0000

A lista usará essa diferença:

$ ls -lt aa bb
-rw-r--r-- 1 user user 0 Jan  7 20:51 bb
-rw-r--r-- 1 user user 0 Jan  7 20:51 aa

Com --full-time , a diferença será clara.

$ ls -lt --full-time aa bb
-rw-r--r-- 1 user user 0 2018-01-07 20:51:19.364248042 0000 bb
-rw-r--r-- 1 user user 0 2018-01-07 20:51:19.072248226 0000 aa
    
por 07.01.2018 / 21:15

Tags