czy `ls -lt` podąży za dokładnymi mimessem, czy tylko za przybliżonymi mimessem z dokładnością do sekundy?

10

ls -lpokazuje tylko znaczniki czasu modyfikacji plików z dokładnością do sekundy. Jeśli dwa pliki mają ten sam znacznik czasu do sekundy, ale nie zostały zmodyfikowane dokładnie w tym samym czasie, ls -ltuporządkuje pliki w kolejności dokładnych mtimów lub tylko przybliżonych mtimów do sekund (a zatem kolejność między plikami może być arbitralny)?

Tim
źródło

Odpowiedzi:

17

To bardzo zależy od lswdrożenia. Z tych 4 znalezionych w systemie GNU / Linux tutaj:

$ 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
  • GNUls , ten z projektu GNU (z kolekcji GNU coreutils ). To jest zwykle spotykane w systemach GNU, takich jak Debian (jądro Linux lub kFreeBSD), Cygwin lub Fedora.

    $ gnu-ls -rt
    a  c  b
    
  • The lsfrom Heirloom Toolchest , port narzędzi OpenSolaris:

    $ heirloom-ls -rt
    a  b  c
    
  • lsZ kolekcji AT & T Open Source , prawdopodobnie zbudowany w ksh93. Kolejny z kilkoma fantazyjnymi rozszerzeniami:

    $ 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 (jak znaleziono (lub pochodną) w większości (zwykle osadzonych) systemach opartych na Linuksie):

    $ busybox ls -rt
    c  b  a
    

A zatem GNU i ast lsrozważają drugą część ułamkową. Inne powracają do porównania leksykalnego plików ostatnio zmodyfikowanych w tej samej sekundzie. Tylko busybox lshonoruje -rtam.

W moich testach FreeBSD lsobsługuje również precyzję poniżej sekundy (pod warunkiem, że są włączone na poziomie VFS, patrz vfs.timestamp_precisionsysctl).

zshGlobs (z omkwalifikatorem glob do zamawiania w czasie modyfikacji, Omdla odwrotnej kolejności) również zajmują cały czas:

$ echo *(Om)
a c b

[ file1 -nt file2 ], gdzie jest obsługiwany, ogólnie obsługuje także szczegółowość poniżej sekundy .

Stéphane Chazelas
źródło
1
Czy narzędzia inne niż GNU naruszają POSIX, czy też określa zaokrąglanie dla sortowania?
Kevin
2
Co to jest astmy?
Random832
@ Random832, patrz edycja.
Stéphane Chazelas
2
@Kevin, z mojej lektury specyfikacji, nie są one zgodne w tym zakresie. AFAICT, w specyfikacji nie ma nic, co pozwala na ignorowanie części drugiej, a POSIX zapewnia przejrzysty interfejs API do pobierania dokładnych znaczników czasu.
Stéphane Chazelas,
1
@ikkachu, masz rację. Nie zauważyłem tego. patrz edycja. To zmienia wynik ast.
Stéphane Chazelas
4

Jeśli chodzi o lsimplementację GNU , uruchomienie ls -luporządkuje pliki w kolejności alfabetycznej i ls -ltuporządkuje pliki według czasu modyfikacji, najpierw najnowszej, z największą dokładnością obsługiwaną przez podstawowy system plików. Możesz to sprawdzić za pomocą --full-timeopcji.

Tak więc, aby odpowiedzieć na twoje pytanie, tak, w największym stopniu może, ale tylko wtedy, gdy użyjesz -t(w przeciwnym razie domyślnie będzie to alfabet) i użyjesz implementacji, która je obsługuje ( więcej szczegółów znajdziesz w odpowiedzi Stéphane'a ). Na przykład ext4może obsługiwać precyzję nanosekundową, biorąc pod uwagę wystarczająco duże i-węzły do ​​przechowywania wymaganych danych znaczników czasu.

Joe
źródło
2
Powinieneś dodać do swojej odpowiedzi, że mówi tylko o GNU. Istnieje wiele innych implementacji, które mogą zachowywać się inaczej.
Roland Illig
@RolandIllig dodaje
Joe
1

możesz to sprawdzić, jeśli porównasz dane wyjściowe z

ls -lat

i

ls -lat --full-time

w sortowaniu nie ma nic arbitralnego.

D'Arcy Nader
źródło
1

Tak, to będzie.

Aby przetestować, utwórz dwa pliki z niewielką różnicą czasu:

$ touch aa; sleep 0.2; touch bb

Sprawdź czasy modyfikacji:

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

Lista wykorzysta taką różnicę:

$ 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

Z --full-timetą różnicą będzie jasne.

$ 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
Izaak
źródło
W ostatnim bloku, wierzę, że masz bbi aawstecz.
Alex