it-swarm.it

data / ora, ora di modifica e ora di creazione di un file

So solo che ls -t e ls -f fornisce un diverso ordinamento di file e sottodirectory in una directory.

  • Quali sono le differenze tra data/ora, tempo di modifica e ora di creazione di un file?
  • Come ottenere e modificare questo tipo di informazioni tramite comandi?
  • In termini di che tipo di informazioni le persone dicono che un file è "più nuovo" dell'altro?
  • Che tipo di modifica delle informazioni non renderà il file diverso?

Ad esempio, ho visto qualcuno scrivere:

Per impostazione predefinita, il programma rsync cerca solo di vedere se i file hanno dimensioni e data/ora diverse. Non importa quale file sia più recente, se diverso, viene sovrascritto. È possibile passare il flag '--update' a rsync che causerà il salto dei file sulla destinazione se sono più recenti del file sull'origine, ma solo fintanto che sono dello stesso tipo di file. Ciò significa che se, ad esempio, il file di origine è un file normale e la destinazione è un collegamento simbolico, il file di destinazione verrà sovrascritto, indipendentemente dal timestamp.

In una nota a margine, il tipo di file qui significa solo file e simlink regolari, non il tipo come pdf, jpg, htm, txt ecc?

108
Tim

Esistono 3 tipi di "timestamp":

  • Accesso: l'ultima volta che il file è stato letto
  • Modifica: l'ultima volta che il file è stato modificato (il contenuto è stato modificato)
  • Modifica: l'ultima volta che sono stati modificati i metadati del file (ad es. Autorizzazioni)

Per visualizzare queste informazioni, è possibile utilizzare stat che fa parte dei coreutils.

stat ti mostrerà anche qualche informazione in più come dispositivo, inode, collegamenti, ecc.

Ricorda che questo tipo di informazioni dipende fortemente dal filesystem e dalle opzioni di mount. Ad esempio, se montate una partizione con l'opzione noatime, non verranno scritte informazioni di accesso.

Un'utilità per modificare i timestamp sarebbe touch. Vi sono alcuni argomenti per decidere quale data/ora modificare (ad es. -A per il tempo di accesso, -m per il tempo di modifica) e influenzare l'analisi di un nuovo timestamp. Vedi man touch per maggiori dettagli.

touch può tornare utile in combinazione con cp -u ( "copia solo quando il file SOURCE è più recente del file di destinazione o quando manca il file di destinazione" ) o per la creazione di un contrassegno vuoto File.

146
echox

La risposta di echox è valida ma voglio aggiungere informazioni relative al tempo di creazione del file.

Supporto per file system

Alcuni file system supportano una voce aggiuntiva nell'inode riguardante l'ora di creazione (o l'ora di nascita). So che ext4 supporta questa funzione e anche JFS e BTRFS .

Tuttavia, la maggior parte degli strumenti e delle API non è stata ancora aggiornata per leggere queste informazioni aggiuntive. Quindi, anche se potrebbe essere lì, non è accessibile.

Ad esempio su Ubuntu 12.04 LTS ottengo quanto segue per un file che ho creato oggi:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ Sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

Puoi vedere che la nuova funzione stat ha un campo di nascita, anche se l'output sembra errato. E tramite debugfs possiamo ottenere le informazioni (crtime visto che sono sul file system ext4).

supporto statx

Ora c'è dal kernel 4.11 una nuova chiamata di sistema statx , oltre al miglior supporto di Y2038 o file system di rete, porta anche alcune funzionalità extra come btime o tempo di nascita ( tempo di creazione) accesso. Il supporto per ext4 dovrebbe essere nella stessa versione del kernel 4.11.

Ci sono state patch per aggiungere supporto a questo nuovo syscall nelle versioni successive del kernel: ad es. BTRFS e F2FS nel kernel 4.13, SMB3 in 4.14, GFS2 in 4.15, NFS in 4.16, ecc.

Il prossimo glibc fornirà una chiamata di funzione per interrogare questa interfaccia (vedi Notizie Phoronix sul supporto glibc statx ). Quindi possiamo aspettarci molto presto il supporto per questa funzione nello spazio utente.

38
Huygens