`ls -lt` seguirà i mtime accurati o solo i mtime approssimativi fino al secondo?


10

ls -lmostra solo i timestamp di modifica dei file fino al secondo. Se due file hanno lo stesso timestamp fino al secondo, ma sono stati modificati non esattamente allo stesso tempo, ls -ltordineranno i file nell'ordine dei mtime accurati o solo i mtime approssimativi fino al secondo (e quindi l'ordine tra i file può essere arbitrario)?

Risposte:


17

Dipende molto lsdall'implementazione. Di quei 4 trovati su un sistema GNU / Linux qui:

$ 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 , quello del progetto GNU (dalla collezione GNU coreutils ). Questo è quello che si trova in genere su sistemi GNU come Debian (kernel Linux o kFreeBSD), Cygwin o Fedora.

    $ gnu-ls -rt
    a  c  b
    
  • The lsfrom the Heirloom Toolchest , una porta di strumenti OpenSolaris:

    $ heirloom-ls -rt
    a  b  c
    
  • L' lsdalla collezione di AT & T Open Source , possibilmente costruito in ksh93. Un altro con alcune estensioni fantasiose:

    $ 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 (come trovato (o un derivato) sulla maggior parte dei sistemi (generalmente integrati) basati su Linux):

    $ busybox ls -rt
    c  b  a
    

Quindi, tra questi, GNU e ast lsconsiderano la seconda parte frazionaria. Gli altri tornano al confronto lessicale per i file modificati l'ultima volta nello stesso secondo. Solo busybox lsonora il -rlì.

Nei miei test, FreeBSD lssupporta anche la precisione al secondo (a condizione che siano abilitati a livello VFS, vedi vfs.timestamp_precisionsysctl).

zshI globs (con il omqualificatore glob per ordinare in tempo di modifica, Omper ordine inverso) richiedono anche il tempo pieno:

$ echo *(Om)
a c b

[ file1 -nt file2 ], laddove supportato generalmente supporta anche la granularità al secondo .


1
Gli strumenti non GNU violano POSIX o specificano l'arrotondamento per l'ordinamento?
Kevin

2
Che cos'è ast-ls?
Casuale 832

@ Random832, vedi modifica.
Stéphane Chazelas,

2
@ Kevin, dalla mia lettura delle specifiche, sono non conformi a tale riguardo. AFAICT, non c'è nulla nelle specifiche che consenta di ignorare la parte del secondo e POSIX fornisce un'API chiara per recuperare timestamp precisi.
Stéphane Chazelas,

1
@ikkachu, hai ragione. Non me ne ero accorto. vedi modifica. Questo cambia il risultato per ast.
Stéphane Chazelas,

4

Per quanto riguarda l' lsimplementazione di GNU , l'esecuzione ls -lordinerà i file in ordine alfabetico e ls -ltordinerà i file in ordine di tempo di modifica, prima il più recente, con la massima precisione supportata dal file system sottostante. Puoi verificarlo usando l' --full-timeopzione.

Quindi, per rispondere alla tua domanda, sì, nella massima misura possibile, ma solo quando lo usi -t(altrimenti, sarà impostato in ordine alfabetico), e stai usando un'implementazione che la supporta (vedi la risposta di Stéphane per maggiori dettagli). Ad esempio, ext4può supportare la precisione dei nanosecondi, dati inode abbastanza grandi da memorizzare i dati di data / ora richiesti.


2
Dovresti aggiungere alla tua risposta che parla solo di GNU ls. Esistono molte altre implementazioni che potrebbero comportarsi diversamente.
Roland Illig,

@RolandIllig ha aggiunto
Joe

1

puoi verificare che se confronti l'output di

ls -lat

e

ls -lat --full-time

non c'è nulla di arbitrario lì nell'ordinamento.


1

Si lo farà.

Per provare, crea due file con una piccola differenza di tempo:

$ touch aa; sleep 0.2; touch bb

Controlla i tempi di modifica:

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

L'elenco utilizzerà tale differenza:

$ 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

Con --full-timela differenza sarà chiaro.

$ 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

Nell'ultimo blocco, credo che tu abbia bbe aaindietro.
Alex
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.