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
- Tiempo de modificación (mtime): Registra cuándo se modificó por última vez el contenido del archivo.
- Tiempo de acceso (atime): Registra cuándo se leyó o se accedió por última vez al archivo.
- 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
lscon diversas opciones para mostrar las marcas de tiempo de los archivos - Utilizar el comando
statpara 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
touchpara 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.



