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


105

Lo so ls -te ls -fdò diversi ordinamenti 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?


Risposte:


138

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 statquale parte dei coreutils.

stat ti mostrerà anche altre informazioni come il dispositivo, gli inode, i collegamenti, ecc.

Ricorda che questo tipo di informazioni dipende fortemente dal filesystem e dalle opzioni di mount. Ad esempio, se si monta una partizione con l' noatimeopzione, 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 esempio -a per il tempo di accesso, -m per il tempo di modifica) e influenzare l'analisi di un nuovo timestamp. Vedi man touchper maggiori dettagli.

touchpuò essere 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 file marker vuoti.


1
Grazie! Per il comando rsync, in "non importa quale file è più recente", in termini di quale tipo di timestamp significa "più recente". Inoltre, in una nota a margine, il tipo di file che interessa a rsync significa solo file e simlink regolari, non il tipo come pdf, jpg, htm, txt ecc?
Tim

2
Generalmente, il riferimento all'ora di un file è il timestamp "modificato". Ad esempio, ciò che vedi ls -l. E il tipo di file si riferisce a file vs. symlink (o altri tipi di file come directory o dispositivi). Non è il tipo di dati nel file (testo vs. jpeg, ecc.).
Seth L

2
@Tim In quel contesto è il timestamp modificato; rsync sta dicendo che quando decide se eseguire il backup di un file, non controlla se il file di origine è stato modificato più di recente rispetto al backup esistente (che è comune con i programmi di backup); controlla solo se i file hanno dimensioni diverse o tempi di modifica diversi e, in tal caso, esegue il backup
Michael Mrozek

1
E come faccio a sapere quando il file è stato creato per primo? Queste informazioni vengono mantenute da qualche parte o vengono perse negli aggiornamenti? per così dire, da quanto tempo esiste il file ..?
xyz,

1
La pagina man stat (2) descrive in modo più dettagliato quando questi timestamp vengono cambiati.
Cristian Ciupitu,

35

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 esiste dal Kernel 4.11 una nuova chiamata di sistema statx , oltre al miglior supporto di Y2038 o file system di rete, che porta anche alcune funzionalità extra come l'accesso btimeall'ora di nascita (ora di creazione). 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 di Phoronix sul supporto di glibc statx ). Quindi possiamo aspettarci molto presto il supporto per questa funzione nello spazio utente.


Sai se btime rimane intatto quando i file da Windows (tempo di creazione) vengono spostati su ext4 e viceversa, come mtime?
paradroid

@paradroid mi dispiace non conosco la risposta. Se intendi sotto Linux quando copi un file da NTFS a ext4, dovresti cercare nel driver NTFS se supporta il tempo di creazione. Se intendi in Windows, dovresti cercare nel driver ext4 per Windows.
Huygens,
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.