2012-02-07 14:59:56 +0000 2012-02-07 14:59:56 +0000
54
54

¿Cómo comprobar todas las marcas de tiempo de un archivo?

¿Existe un comando en Linux para comprobar todas las marcas de tiempo de un archivo?

Estoy tratando de ver las últimas fechas de modificación, creación y toque del archivo.

Respuestas (2)

75
75
75
2012-02-07 15:03:39 +0000

El comando se llama 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

Si desea ajustar el formato, consulte las páginas de manual, ya que la salida es específica del sistema operativo y varía bajo Linux/Unix.

Generalmente, también puede obtener los tiempos a través de un listado de directorios normal:

  • ls -l da la salida de la última vez que se modificó el contenido del fichero, el mtime
  • ls -lc da la salida de la última hora de modificación del estado del fichero, el ctime ¿Cuál es la diferencia? )
  • ls -lu da la salida de la última hora de acceso, el atime (aunque la utilidad de este concepto está sujeta a discusión )

Y por supuesto, el ctime no registra cuándo se “creó” un fichero. La especificación POSIX define sólo tres marcas de tiempo, pero algunos sistemas de archivos Linux almacenan la Hora de Nacimiento/Hora de Creación. ¿Cómo encontrar la fecha de creación de un archivo? ](https://unix.stackexchange.com/q/91197/1664) En tal configuración soportada, uno podría usar

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'
21
21
21
2014-03-15 09:24:38 +0000

Sólo hay tres valores de tiempo distintos almacenados para cada uno de sus archivos, tal y como se define en el Estándar POSIX : http://pubs.opengroup.org/onlinepubs/9699919799/ (véase la sección Definiciones Básicas -> 4. Conceptos Generales -> 4.8 Actualización de Tiempos de Archivo)

Cada archivo tiene tres marcas de tiempo asociadas distintas: la hora del último acceso a los datos , la hora de la última modificación de los datos , y la hora en que el estado del archivo cambió por última vez. Estos valores se devuelven en la estructura de características de archivo struct stat, como se describe en <sys/stat.h> _.

Y de <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.
  • *

Los siguientes ejemplos muestran la diferencia entre el atime , mtime y ctime , estos ejemplos son en GNU/Linux BASH. Puede usar stat -x en Mac OS X u otra Dist. BSD para ver el formato de salida similar.

$ 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

Cuando el archivo acaba de ser creado, tres marcas de tiempo son las mismas.

  • *

1. atime

Primero, vamos a acceder a los datos del archivo leyéndolos (less o vim), imprimiéndolos (cat) o copiándolos a otro archivo (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

Ahora vamos a cambiar el estado del fichero, cambiando el permiso (chmod) o renombrándolo (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!

Observa que hasta ahora, el contenido ( data ) del fichero sigue siendo el mismo que cuando se creó.

  • *

3. mtime

Por último, vamos a modificar el contenido del fichero editándolo.

$ 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. hora de nacimiento

Tenga en cuenta también que la versión más reciente de stat (por ejemplo, stat --version 8.13 en Ubuntu 12.04) tiene una cuarta información de marca de tiempo: la hora de nacimiento (hora de creación del archivo). Aunque puede no mostrar la hora correcta por ahora:

$ 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: -