Comprensión de las marcas de tiempo de los archivos de Linux: mtime, ctime y atime

El sistema operativo Linux realiza un seguimiento de tres marcas de tiempo para cada archivo en su sistema. Estas marcas de tiempo le permiten descubrir cuándo se actualizó por última vez un archivo. Pero, ¿qué significan todos? ¿Y cómo averiguas estos tiempos para un archivo? ¿Hay alguna diferencia en lo que respecta a los directorios?

La comprensión de atime, ctime y mtime puede responder a todas estas preguntas. Estas son las tres marcas de tiempo que rastrean los sistemas de archivos Unix. Si alguna vez necesita conocer detalles sobre qué cambió y cuándo, siga leyendo.

¿Cuáles son las tres marcas de tiempo de Unix?

Cada archivo tiene tres marcas de tiempo asociadas. Linux los almacena en el formato de tiempo Unix, que mide los segundos desde la época. Las tres marcas de tiempo se conocen comúnmente como atime, ctime y mtime.

El mtime es el más común y, a menudo, el más útil. Significa tiempo modificado . Es el momento en el que el contenido del archivo se escribió por última vez en el disco.

Ligeramente diferente es el ctime que significa tiempo de cambio . Esta marca de tiempo realiza un seguimiento de los cambios de metadatos, como la propiedad y los permisos. Incluye cambiar el nombre de un archivo, al menos, en los sistemas operativos Linux modernos típicos. Pero también se actualiza cuando cambia el contenido del archivo, por lo que siempre está tan actualizado como mtime.

La tercera marca de tiempo es atime , que almacena la última vez que alguien accedió al archivo.

Cómo se aplican las marcas de tiempo a los directorios

Un directorio de Linux es, esencialmente, una lista de los archivos en ese directorio. Entonces, crear un archivo dentro de un directorio actualizará el mtime de ese directorio. Listar los archivos en el directorio, usando el comando ls , por ejemplo, actualiza su tiempo de acceso. Y, como con un archivo, cambiar los permisos o el nombre de un directorio actualiza su ctime.

¿Qué pasa con el tiempo de creación?

Puede que le sorprenda saber que Linux simplemente no realiza un seguimiento del tiempo de creación. Inicialmente, podría suponer que ctime significa tiempo de creación. Del mismo modo, podría pensar en ello como algo muy útil para poder averiguarlo.

Muchas aplicaciones guardan archivos al crearlos desde cero cada vez. Esto haría que el uso de un tiempo de creación fuera engañoso.

Cómo ver las diferentes marcas de tiempo

La forma más sencilla de obtener información sobre la marca de tiempo es con el comando ls . El formato largo predeterminado muestra detalles para mtime:

 $ date
Sat Mar 6 16:57:01 GMT 2021
$ echo "hello, world" > tmp
$ ls -l tmp.txt
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp

En su lugar, puede mostrar el atime usando el indicador -u :

 $ date
Sat Mar 6 16:59:33 GMT 2021
$ cat tmp
hello, world
$ ls -lu tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp
$ ls -l tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp

La última línea confirma que el mtime de este archivo es diferente del atime. Finalmente, use la bandera -c para ver ctime:

 $ date
Sat Mar 6 17:02:34 GMT 2021
$ mv tmp tmp2
$ ls -lc tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 17:02 tmp2
$ ls -l tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp2
$ ls -lu tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp2

Esta vez, confirmamos que los tres tiempos son distintos y correctos: modificamos, luego accedimos y luego cambiamos el archivo, en ese orden.

Una alternativa a ls es el comando stat . Este comando muestra detalles de bajo nivel del inodo del archivo. Hace que sea más fácil verificar las tres veces a la vez. También soluciona el problema de la bandera -u poco intuitiva. Aquí hay un resultado de ejemplo para el mismo archivo:

 $ stat tmp2
File: `tmp2'
Size: 13 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 327688 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2021-03-06 16:59:45.000000000 +0000
Modify: 2021-03-06 16:57:59.000000000 +0000
Change: 2021-03-06 17:02:43.000000000 +0000

Cómo actualizar las marcas de tiempo

El comando táctil cambia los tiempos de modificación y acceso de un archivo. También es una forma conveniente de crear un archivo vacío, lo que hará si el archivo aún no existe:

 touch tmp

De forma predeterminada, establecerá mtime y atime a la hora actual. Puede establecer una hora diferente con la bandera -t :

 touch -t 202103061200 tmp

También puede establecer solo mtime o atime con los indicadores -my -a respectivamente:

 touch -t 202103061300 -m tmp

Tenga en cuenta que ctime siempre se actualiza cuando establecemos atime o mtime.

Cómo buscar archivos basados ​​en marcas de tiempo

El comando de búsqueda es otra herramienta que actúa sobre las marcas de tiempo. Puede filtrar archivos según atime, ctime o mtime. Por ejemplo:

 find . -amin 15

encontrará archivos a los que se accedió hace exactamente 15 minutos, mientras que:

 find . -mtime -2

encontrará archivos modificados en los últimos dos días.

Linux realiza un seguimiento de cada archivo tres veces

La marca de tiempo del archivo más comúnmente referenciada es mtime. Ésta es la fecha y hora que muestra una lista de archivos, por ejemplo. Pero las otras dos marcas de tiempo también pueden ser útiles, siempre que comprenda a qué se refieren. En particular, recuerde siempre que ctime representa el tiempo de cambio , no el tiempo de creación .

Los comandos como touch y stat son miembros útiles de la caja de herramientas de la línea de comandos de Linux. Estos comandos mejorarán su flujo de trabajo de Linux al permitirle crear nuevos archivos rápidamente.