(7 risposte)
Chiuso 7 anni fa.
Come posso vedere quando è stato creato un file. Ho guardato la pagina man
ls -lc
è per l'ultima modifica dello stato del file
ls -lu
per il tempo di accesso
ls -l
non è esattamente indicato quale ora, ultima modifica?
Ho provato questi, ma non mi danno il tempo di creare il file.
Risposta accettata:
Su OS/X o FreeBSD, è l'opzione -U. Linux ora memorizza anche l'ora di nascita/creazione sulla maggior parte dei suoi file system nativi, ma non esiste ancora alcuna API per recuperarla (modifica 2018 :dal kernel 4.11, ora c'è un statx()
chiamata di sistema, e da glibc 2.28 un wrapper libc per esso e da coreutils 8.31, GNU stat
può visualizzarlo e (modifica 2021 ) dalla 8.32 GNU ls
può visualizzarlo con --time=birth
).
Sui filesystem ext4, puoi usare debugfs per ottenerlo però:
$ sudo debugfs /dev/some/fs
stat /some/file
[...]
crtime: 0x53208d7a:9045625c -- Wed Mar 12 16:38:18 2014
[...]
(dove /some/file
è il percorso all'interno di quel filesystem)
Per i filesystem NTFS e supponendo che tu stia usando ntfs-3g per montarlo, vedi Come ottengo la data di creazione di un file su un volume logico NTFS?
Se hai un sistema Linux abbastanza recente, puoi usare xfs_io
's statx
sottocomando per invocare il nuovo statx()
chiamata di sistema e ottenere l'ora di nascita:
$ TZ=UTC0 xfs_io -c 'statx -v' /some/file
[...]
stat.btime = Thu Feb 7 17:11:20 2019
[...]
(qui usando l'ora UTC con TZ=UTC0
altrimenti la data sarebbe ambigua poiché l'offset UTC non viene emesso). Oppure con statx -r
che ti dà la parte di nanosecondi e un tempo più facilmente analizzabile:
$ xfs_io -c 'statx -r' /some/file
[...]
stat.btime.tv_sec = 1549559480
stat.btime.tv_nsec = 964691587
[...]
Con GNU stat
8.31 o successivo su sistemi con glibc 2.28 o successivo e un kernel 4.11 o successivo:
$ stat /some/file | grep Birth:
Birth: 2018-05-24 16:27:28.415875403 +0100
$ stat -c '%.9W %w' /some/file
1527175648.415875403 2018-05-24 16:27:28.415875403 +0100
Con GNU ls
8.32 o successivo su sistemi con glibc 2.28 o successivo e un kernel 4.11 o successivo:
$ ls -l --time=birth --full-time /some/file
-rw-r--r-- 1 stephane stephane 2333836 2018-05-24 16:27:28.415875403 +0100 /some/file
Tradizionalmente, Unix non memorizzava un'ora di creazione.
Nota che quel valore forse ha meno significato di quanto potresti pensare.
Il tempo di modifica riflette l'età dei dati in quel file, il tempo di accesso quando è stato effettuato l'ultimo accesso, il tempo di modifica dell'inode è molto utile per il backup del software, ad esempio, perché non sai nulla di quel file è cambiato da quel momento (tranne forse il suo percorso completo per il quale puoi dare un'occhiata al ctime dei suoi componenti di directory).
Correlati:problema con il file bundleconfig?Il tempo di creazione è quando l'inode viene generato (benché un numero di collegamenti va da 0 a 1, quell'inode potrebbe essere stato allocato e rimosso in una vita precedente), non riflette l'età di alcun dato associato a quel file (i dati sono scritto dopo che il file è stato creato), non ci dice se un file da quel percorso esisteva in quel momento (il file che stiamo guardando può essere stato creato con un percorso diverso e collegato o spostato lì in un secondo momento).