Come controllare tutti i timestamp di un file?


52

Esiste un comando in Linux per controllare tutti i timestamp di un file?

Sto cercando di vedere le ultime date modificate, create e toccate sul file.


4
Solo per sottolineare, i file Linux non hanno date di nascita. Pertanto, non è possibile determinare la data di creazione di un file.
— Errore irreversibile

notato che = (. Grazie per
— avermelo segnalato

4
@FatalError: vari filesystem supportano già i timestamp di nascita / creazione; il vero problema è accedere a tali informazioni extra. (Non si può semplicemente estendere struct statsenza rompere le cose, sfortunatamente ...) Puoi provare debugfs -R "stat <1234>" /dev/sdXYext4, sostituendolo 1234con un ino.
— gravità

@grawity: pulito! Mi sono sempre chiesto perché nessun fs lo avesse avuto ... ma immagino che lo facciano, ma come hai detto tu, non posso semplicemente rompere l'ABI per i binari esistenti. Grazie per il consiglio :).
— Errore irreversibile

1
@FatalError, L'ora di nascita può essere visualizzata con il statcomando Linux , vedi Come trovare la data di creazione del file? e quali file system su Linux memorizzano i tempi di creazione? .
— Franklin Piat,

Risposte:


73

Il comando viene chiamato stat.

$ stat test
234881026 41570368 -rw-r--r-- 1 werner staff 0 0 "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" 4096 0 0 test

Se si desidera regolare il formato, consultare le pagine man, poiché l'output è specifico del sistema operativo e varia in Linux / Unix.

In genere, puoi ottenere i tempi anche attraverso un normale elenco di directory:

  • ls -l output l'ultima volta che è stato modificato il contenuto del file, il mtime
  • ls -lcvisualizza l'ultima volta della modifica dello stato del file, il ctime( Qual è la differenza? )
  • ls -lurestituisce il tempo dell'ultimo accesso, il atime(sebbene l'utilità di questo concetto sia oggetto di discussione )

E, naturalmente, ctimenon registra quando un file è stato "creato". La specifica POSIX definisce solo tre timestamp, ma alcuni filesystem Linux memorizzano il tempo di nascita / tempo di creazione. Come trovare la data di creazione del file? Su una tale configurazione supportata, si potrebbe usare

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'

statè davvero dettagliato. Ma ha lssolo bisogno di una riga. Sarebbe bello se potesse anche visualizzare i secondi. Tuttavia, quando si creano elenchi di file, il primo è perfettamente adatto.
— neverMind9

Questa è stata la soluzione rapida per me
— Andrew,

Ho notato che il risultato di ls -lpuò mostrare un formato data diverso quando è installato BusyBox (su Android). Penso che senza di esso, è come "26-07-2019 14:41", e con esso, è come "6 maggio 21:27". Come mai manca l'anno? C'è un modo per forzarlo usando il formato di senza di esso?
— sviluppatore Android il

@androiddeveloper Come ho detto, la risposta dipende dal sistema operativo. Penso che dovresti aprire una nuova domanda. Se stai parlando di Android in particolare, forse Stack Overflow o Android Enthusiasts sarebbe più adatto.
— Slhck,

@slhck Beh, è ​​lo stesso sistema operativo, solo con BusyBox installato. Ho chiesto se è possibile (significato: c'è un comando da usare) per ottenere il formato che verrà mostrato.
— sviluppatore Android il

21

Esistono solo TRE valori di tempi distinti memorizzati per ciascuno dei tuoi file, come definito dallo standard POSIX : http://pubs.opengroup.org/onlinepubs/9699919799/ (vedi la sezione Definizioni di base -> 4. Concetti generali -> 4.8 File Aggiornamento orari)

Ogni file ha tre distinti timestamp associati: l'ora dell'ultimo accesso ai dati , l'ora dell'ultima modifica dei dati e l'ora dell'ultima modifica dello stato del file . Questi valori vengono restituiti nella struttura struct delle caratteristiche del file stat, come descritto in <sys / stat.h> .

E da <sys / stat.h> :

atime is for Last data access timestamp.
mtime is for Last data modification timestamp.
ctime is for Last file status change timestamp.

I seguenti esempi mostrano la differenza tra atime , mtime e ctime , questi esempi sono in GNU / Linux BASH. È possibile utilizzare stat -xin Mac OS X o altri BSD Dist. per vedere il formato di output simile.

$ stat --version
stat (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ touch test
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:58:28.609223953 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

Quando il file è appena stato creato, tre timestamp sono uguali.


1. atime

Innanzitutto, accediamo ai dati del file leggendolo ( lesso vim), stampandolo ( cat) o copiandolo in un altro file ( cp).

$ cat test #Nothing will be printed out, since the file is empty
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800  <-- atime Changed!
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

2. ctime

Ora cambiamo lo stato del file, cambiando il permesso ( chmod) o rinominandolo ( mv)

$ chmod u+x test
$ stat stet
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:04:10.178285430 +0800  <-- ctime Changed!
$    
$ mv test testing
$ stat testing
  File: `testing'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:06:33.342207679 +0800  <-- ctime Changed again!

Si noti che fino ad ora, il contenuto ( dati ) del file è sempre lo stesso di quando è stato creato.


3. mtime

Infine, modifichiamo il contenuto del file modificando il file.

$ echo 'Modify the DATA of the file' > testing
$ echo 'Modify the DATA of the file also change the file status' > testing
$ stat testing
  File: `testing'
  Size: 56          Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 11:09:48.247345148 +0800  <-- mtime Changed!
Change: 2014-03-16 11:09:48.247345148 +0800  <-- ctime also Changed!

4. tempo di nascita

Si noti inoltre che la versione più recente di stat(ad esempio stat --version 8.13in Ubuntu 12.04) ha informazioni sul quarto timestamp: il Tempo di nascita (tempo di creazione del file). Anche se per ora potrebbe non mostrare l'ora corretta:

$ stat --version
stat (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ stat birth_time
  File: `birth_time'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 4073946     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ bingyao)   Gid: ( 1000/ bingyao)
Access: 2014-03-16 10:46:48.838718970 +0800
Modify: 2014-03-16 10:46:48.838718970 +0800
Change: 2014-03-16 10:46:48.838718970 +0800
 Birth: -

Qual è il significato di 10: 46: 48.838718970? HH: MM: SS. nanosecondi?
— Dzung Nguyen,

2
Sì . "Dal kernel 2.5.48, la struttura stat supporta la risoluzione in nanosecondi per i tre campi di data / ora del file ...."
— Tom Lord

Il tempo di creazione può essere capito con accesso root e debugfs se necessario: moiseevigor.github.io/software/2015/01/30/…
— Mikko Rantalainen

2
Tempo di nascita ... volentieri. Perché l'ultima modifica e l'ultima modifica sono quasi per lo stesso scopo ma ancora distinte. È buono se tutti e quattro esistono.
— neverMind9
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.