marca de tiempo, hora de modificación y hora creada de un archivo

105

Solo sé eso ls -ty ls -fdoy diferentes clasificaciones de archivos y subdirectorios en un directorio.

  • ¿Cuáles son las diferencias entre la marca de tiempo, la hora de modificación y la hora de creación de un archivo?
  • ¿Cómo obtener y cambiar este tipo de información mediante comandos?
  • ¿En términos de qué tipo de información dicen las personas que un archivo es "más nuevo" que el otro?
  • ¿Qué tipo de cambio de información no hará que el archivo sea diferente?

Por ejemplo, vi que alguien escribió:

Por defecto, el programa rsync solo busca ver si los archivos son diferentes en tamaño y marca de tiempo. No le importa qué archivo es más nuevo, si es diferente, se sobrescribe. Puede pasar el indicador '--update' a rsync, lo que hará que omita los archivos en el destino si son más nuevos que el archivo en la fuente, pero solo mientras sean del mismo tipo de archivo. Esto significa que si, por ejemplo, el archivo de origen es un archivo normal y el destino es un enlace simbólico, el archivo de destino se sobrescribirá, independientemente de la marca de tiempo.

En una nota al margen, ¿el tipo de archivo aquí significa solo un archivo normal y un enlace simbólico, no el tipo como pdf, jpg, htm, txt, etc.?

Tim
fuente
Ver también askubuntu.com/questions/62492/…
rogerdpack

Respuestas:

138

Hay 3 tipos de "marcas de tiempo":

  • Acceso: la última vez que se leyó el archivo
  • Modificar: la última vez que se modificó el archivo (se modificó el contenido)
  • Cambiar: la última vez que se modificaron los metadatos del archivo (por ejemplo, permisos)

Para mostrar esta información, puede usar statcuál es parte de los coreutils.

stat también le mostrará más información como el dispositivo, los inodos, los enlaces, etc.

Recuerde que este tipo de información depende en gran medida del sistema de archivos y las opciones de montaje. Por ejemplo, si monta una partición con la noatimeopción, no se escribirá información de acceso.

Sería una utilidad para cambiar las marcas de tiempo touch. Hay algunos argumentos para decidir qué marca de tiempo cambiar (por ejemplo, -a para el tiempo de acceso, -m para el tiempo de modificación) e influir en el análisis de una nueva marca de tiempo dada. Ver man touchpara más detalles.

touchpuede ser útil en combinación con cp -u( "copiar solo cuando el archivo SOURCE es más nuevo que el archivo de destino o cuando falta el archivo de destino" ) o para la creación de archivos de marcador vacíos.

echox
fuente
1
¡Gracias! Para el comando rsync, en "no le importa qué archivo es más nuevo", en términos de qué tipo de marca de tiempo significa "más nuevo". Además, en una nota al margen, ¿el tipo de archivo que le interesa a rsync significa solo un archivo normal y un enlace simbólico, no el tipo como pdf, jpg, htm, txt, etc.?
Tim
2
En general, la referencia a la hora de un archivo es la marca de tiempo "modificada". Por ejemplo, lo que ves de ls -l. Y el tipo de archivo se refiere a archivo vs enlace simbólico (u otros tipos de archivos como directorios o dispositivos). No es cuál es el tipo de datos en el archivo (texto vs. JPEG, etc.).
Seth L
2
@Tim En ese contexto, es la marca de tiempo modificada; rsync dice que cuando decide si debe hacer una copia de seguridad de un archivo, no verifica si el archivo de origen se ha modificado más recientemente que la copia de seguridad existente (que es común con los programas de copia de seguridad); solo verifica si los archivos tienen diferentes tamaños o diferentes tiempos de modificación y, de ser así
Michael Mrozek
1
¿Y cómo sé cuándo se creó el archivo primero? ¿Se mantiene esta información en algún lugar o se pierde en las actualizaciones? por así decirlo, ¿cuánto tiempo ha existido el archivo ...?
xyz
1
La página del comando man stat (2) describe con más detalle cuándo se cambian esas marcas de tiempo.
Cristian Ciupitu
35

La respuesta de echox es válida pero quiero agregar información sobre el tiempo de creación del archivo.

Soporte de sistema de archivos

Algunos sistemas de archivos admiten una entrada adicional en el inodo con respecto al tiempo de creación (o tiempo de nacimiento). Sé que ext4 admite esta función y también JFS y BTRFS .

Sin embargo, la mayoría de las herramientas y API aún no se han actualizado para leer esta información adicional. Entonces, aunque podría estar allí, no es accesible.

Por ejemplo, en Ubuntu 12.04 LTS obtengo lo siguiente para un archivo que creé hoy:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

Puede ver que la función estadística más nueva tiene un campo de nacimiento, aunque la salida parece incorrecta. Y a través de debugfs podemos obtener la información (crtime ya que estoy en el sistema de archivos ext4).

soporte de statx

Ahora, desde Kernel 4.11, una nueva llamada al sistema statx , además de un mejor soporte de Y2038 o sistemas de archivos de red, también trae algunas características adicionales como el btimeacceso o el tiempo de nacimiento (tiempo de creación). El soporte para ext4 debe estar en la misma versión del kernel 4.11.

Ha habido parches para agregar soporte a esta nueva llamada al sistema en versiones posteriores de Kernel: por ejemplo, BTRFS y F2FS en Kernel 4.13, SMB3 en 4.14, GFS2 en 4.15, NFS en 4.16, etc.

El próximo glibc proporcionará una llamada de función para consultar esta interfaz (consulte las noticias de Phoronix sobre el soporte de glibc statx ). Por lo tanto, podemos esperar soporte para esta característica en el espacio del usuario muy pronto.

Huygens
fuente
¿Sabes si btime permanece intacto cuando los archivos de Windows (tiempo de creación) se mueven a ext4 y viceversa, como mtime?
Paradroid
@paradroid lo siento, no sé la respuesta. Si se refiere a Linux al copiar un archivo de NTFS a ext4, sería necesario buscar en el controlador NTFS si admite el tiempo de creación. Si quiere decir en Windows, uno debería buscar en el controlador ext4 para Windows.
Huygens