Cómo verificar la hora de modificación y acceso de un archivo en Linux

LinuxBeginner
Practicar Ahora

Introducción

En el sistema operativo Linux, cada archivo tiene marcas de tiempo asociadas que registran cuándo se modificó el archivo, se accedió a él o se cambiaron sus atributos. Comprender estas marcas de tiempo es esencial para los administradores de sistemas, desarrolladores y usuarios habituales que necesitan monitorear las actividades de los archivos.

Este tutorial lo guía a través de las técnicas prácticas para verificar las marcas de tiempo de los archivos en Linux. Aprenderá cómo ver las fechas de modificación y acceso utilizando diferentes comandos, lo que le ayudará a realizar un seguimiento más efectivo de los cambios y a monitorear los patrones de uso de archivos en su entorno Linux.

Comprender las marcas de tiempo de archivos en Linux

En Linux, cada archivo tiene tres marcas de tiempo importantes que el sistema mantiene automáticamente:

Tipos de marcas de tiempo de archivos

  1. Tiempo de modificación (mtime): Registra cuándo se modificó por última vez el contenido del archivo.
  2. Tiempo de acceso (atime): Registra cuándo se leyó o se accedió por última vez al archivo.
  3. Tiempo de cambio (ctime): Registra cuándo se cambió por última vez los metadatos del archivo (permisos, propietario).

Comencemos a explorar las marcas de tiempo de archivos creando un archivo de prueba y examinando sus propiedades.

Primero, abra la terminal y navegue hasta el directorio de su proyecto:

cd ~/project

Cree un archivo de texto simple utilizando el comando touch:

touch testfile.txt

El comando touch crea un archivo vacío si no existe, o actualiza las marcas de tiempo si ya existe.

Veamos la información básica del archivo utilizando el comando ls con la opción -l (formato de lista detallada):

ls -l testfile.txt

Debería ver una salida similar a esta:

-rw-r--r-- 1 labex labex 0 May 15 14:30 testfile.txt

En esta salida:

  • La primera columna muestra los permisos del archivo
  • La tercera y cuarta columnas muestran el propietario y el grupo
  • La quinta columna muestra el tamaño del archivo (0 bytes)
  • La fecha y la hora ("May 15 14:30" en este ejemplo) muestran el tiempo de modificación
  • La última columna es el nombre del archivo

Esta lista básica muestra el tiempo de modificación, pero no el tiempo de acceso ni el tiempo de cambio. Exploraremos esos en los siguientes pasos.

Usar el comando stat para ver todas las marcas de tiempo

Si bien el comando ls nos proporciona información básica sobre el archivo, el comando stat ofrece información más detallada sobre un archivo, incluyendo las tres marcas de tiempo.

Usemos el comando stat para ver todas las marcas de tiempo de nuestro archivo de prueba:

stat testfile.txt

Debería ver una salida similar a esta:

  File: testfile.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:30:00.000000000 +0000
Modify: 2023-05-15 14:30:00.000000000 +0000
Change: 2023-05-15 14:30:00.000000000 +0000
 Birth: -

En esta salida:

  • Access: Muestra cuándo se accedió por última vez al archivo (atime)
  • Modify: Muestra cuándo se modificó por última vez el contenido del archivo (mtime)
  • Change: Muestra cuándo se cambió por última vez los metadatos del archivo (ctime)
  • Birth: Muestra la fecha de creación del archivo (no se admite en todos los sistemas de archivos)

Note que las tres marcas de tiempo son actualmente las mismas porque acabamos de crear el archivo. Modifiquemos el archivo para ver cómo cambian estas marcas de tiempo.

Añadamos algo de contenido al archivo utilizando el comando echo:

echo "This is a test file" > testfile.txt

Ahora veamos las marcas de tiempo nuevamente:

stat testfile.txt

Debería ver que el tiempo de modificación (Modify) y el tiempo de cambio (Change) se han actualizado, mientras que el tiempo de acceso puede permanecer igual dependiendo de la configuración de su sistema.

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:30:00.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:35:12.000000000 +0000
 Birth: -

Verificar el tiempo de modificación (mtime)

El tiempo de modificación (mtime) se actualiza cada vez que cambia el contenido de un archivo. Esta es la marca de tiempo que se muestra más comúnmente por defecto en las listas de archivos.

Usar ls para verificar el tiempo de modificación

El comando estándar ls -l muestra el tiempo de modificación por defecto:

ls -l testfile.txt

Salida:

-rw-r--r-- 1 labex labex 19 May 15 14:35 testfile.txt

Para los archivos modificados en el año actual, ls -l muestra el mes, el día y la hora. Para los archivos modificados en años anteriores, muestra el mes, el día y el año en lugar de la hora.

Personalizar el formato de la fecha

Para ver información más detallada de la marca de tiempo, use la opción --time-style con ls:

ls -l --time-style=full-iso testfile.txt

Salida:

-rw-r--r-- 1 labex labex 19 2023-05-15 14:35:12.000000000 +0000 testfile.txt

Esto muestra la marca de tiempo en formato ISO completo, incluyendo año, mes, día, horas, minutos, segundos y zona horaria.

También puede usar otras opciones de formato como long-iso o iso:

ls -l --time-style=long-iso testfile.txt

Salida:

-rw-r--r-- 1 labex labex 19 2023-05-15 14:35 testfile.txt

Usar date para mostrar el tiempo de modificación

Otra forma de verificar el tiempo de modificación es con el comando date usando la opción -r:

date -r testfile.txt

Salida:

Mon May 15 14:35:12 UTC 2023

Este comando muestra el tiempo de modificación en un formato legible para humanos.

Verificar el tiempo de acceso (atime)

El tiempo de acceso (atime) se actualiza cada vez que se lee o accede a un archivo. Sin embargo, muchos sistemas Linux modernos utilizan opciones de montaje como relatime o noatime para reducir la frecuencia de actualizaciones del atime y mejorar el rendimiento.

Usar ls para verificar el tiempo de acceso

Para ver el tiempo de acceso en lugar del tiempo de modificación, use la opción -u con ls -l:

ls -lu testfile.txt

Salida:

-rw-r--r-- 1 labex labex 19 May 15 14:40 testfile.txt

La marca de tiempo mostrada ahora es el tiempo de acceso en lugar del tiempo de modificación.

Accedamos al archivo para actualizar su tiempo de acceso:

cat testfile.txt

Salida:

This is a test file

Ahora verifiquemos el tiempo de acceso nuevamente:

ls -lu testfile.txt

Debería ver que el tiempo de acceso se ha actualizado a la hora actual.

Comparar todas las marcas de tiempo

Usemos el comando stat para ver todas las marcas de tiempo después de acceder al archivo:

stat testfile.txt

Salida:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:41:05.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:35:12.000000000 +0000
 Birth: -

Note que solo el tiempo de acceso ha cambiado, mientras que el tiempo de modificación y el tiempo de cambio siguen siendo los mismos que antes.

Cambiar los permisos de un archivo para actualizar el tiempo de cambio

Actualicemos el tiempo de cambio (ctime) modificando los permisos del archivo:

chmod 640 testfile.txt

Verifiquemos todas las marcas de tiempo nuevamente:

stat testfile.txt

Salida:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:41:05.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:42:30.000000000 +0000
 Birth: -

Puede ver que el tiempo de cambio (ctime) se ha actualizado a la hora actual, mientras que el tiempo de acceso y el tiempo de modificación permanecen sin cambios.

Manipular marcas de tiempo de archivos con touch

El comando touch no solo permite crear archivos, sino también actualizar sus marcas de tiempo. Esto es útil para pruebas o cuando se necesita sincronizar las marcas de tiempo entre archivos.

Actualizar todas las marcas de tiempo

Para actualizar todas las marcas de tiempo (acceso, modificación y cambio) a la hora actual:

touch testfile.txt

Verificar las marcas de tiempo:

stat testfile.txt

Salida:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:45:10.000000000 +0000
Modify: 2023-05-15 14:45:10.000000000 +0000
Change: 2023-05-15 14:45:10.000000000 +0000
 Birth: -

Actualizar solo el tiempo de acceso

Para actualizar solo el tiempo de acceso:

touch -a testfile.txt

Verificar las marcas de tiempo:

stat testfile.txt

Salida:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:46:15.000000000 +0000
Modify: 2023-05-15 14:45:10.000000000 +0000
Change: 2023-05-15 14:46:15.000000000 +0000
 Birth: -

Tenga en cuenta que el tiempo de cambio (ctime) también se actualiza porque los metadatos del archivo han cambiado.

Actualizar solo el tiempo de modificación

Para actualizar solo el tiempo de modificación:

touch -m testfile.txt

Verificar las marcas de tiempo:

stat testfile.txt

Salida:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:46:15.000000000 +0000
Modify: 2023-05-15 14:47:20.000000000 +0000
Change: 2023-05-15 14:47:20.000000000 +0000
 Birth: -

Nuevamente, el tiempo de cambio también se actualiza.

Establecer marcas de tiempo específicas

Puede establecer una marca de tiempo específica utilizando la opción -d con touch:

touch -d "2023-01-01 12:00:00" testfile.txt

Verificar las marcas de tiempo:

stat testfile.txt

Salida:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-01-01 12:00:00.000000000 +0000
Modify: 2023-01-01 12:00:00.000000000 +0000
Change: 2023-05-15 14:48:30.000000000 +0000
 Birth: -

Esto establece tanto el tiempo de acceso como el de modificación en el 1 de enero de 2023, a las 12:00 PM. El tiempo de cambio todavía se actualiza a la hora actual.

Crear un nuevo archivo con marcas de tiempo de un archivo existente

También puede utilizar la opción -r para hacer referencia a las marcas de tiempo de otro archivo:

## Create a new file
touch newfile.txt

## Set its timestamps based on testfile.txt
touch -r testfile.txt newfile.txt

Verificar las marcas de tiempo del nuevo archivo:

stat newfile.txt

Salida:

  File: newfile.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 2101100     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-01-01 12:00:00.000000000 +0000
Modify: 2023-01-01 12:00:00.000000000 +0000
Change: 2023-05-15 14:49:45.000000000 +0000
 Birth: -

Los tiempos de acceso y modificación de newfile.txt ahora coinciden con los de testfile.txt.

Resumen

En este laboratorio, has aprendido cómo:

  • Comprender los tres tipos de marcas de tiempo de archivos en Linux: tiempo de modificación (mtime), tiempo de acceso (atime) y tiempo de cambio (ctime)
  • Utilizar el comando ls con diversas opciones para mostrar las marcas de tiempo de los archivos
  • Utilizar el comando stat para ver información detallada de las marcas de tiempo
  • Leer el contenido de archivos para actualizar el tiempo de acceso
  • Cambiar los permisos de archivos para actualizar el tiempo de cambio
  • Utilizar el comando touch para manipular manualmente las marcas de tiempo de los archivos
  • Aplicar marcas de tiempo específicas a los archivos
  • Copiar marcas de tiempo de un archivo a otro

Estas habilidades son esenciales para una gestión y monitoreo eficientes de archivos en Linux. Las marcas de tiempo de los archivos te ayudan a rastrear cambios, monitorear patrones de acceso y garantizar que los archivos se mantengan adecuadamente. Ya seas un administrador de sistemas que rastrea cambios no autorizados, un desarrollador que depura problemas relacionados con archivos o un usuario regular que organiza sus archivos, comprender las marcas de tiempo de los archivos es una habilidad valiosa en el entorno Linux.