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
. "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.