¿Cómo cambia ctime?

8

Estoy tratando de entender con precisión cuándo se cambia la marca de tiempo ctime de un archivo. En muchos lugares (p. Ej., En la respuesta aceptada aquí ) se sugiere que cualquier cambio en los atributos del archivo también cambiará ctime. Sin embargo, esto parece no ser cierto, al menos en mi Ubuntu 12.04 (sí, lo sé, un poco viejo ...):

cat file.txt > /dev/null

cambia el atime, por lo que cambia los atributos del archivo (en el inodo del archivo), pero no cambia el ctime.

Otras fuentes (p. Ej., Aquí y aquí ) sugieren que solo algunas operaciones en los atributos del archivo realmente cambian el ctime, pero no se proporciona una lista precisa.

¿Dónde puedo encontrar una referencia precisa sobre qué operaciones cambian el ctime?

VeryHardCoder
fuente
Tal vez el problema está relacionado con cat, ¿lo examinó touch?
Mahdi

Respuestas:

8

Hay tres marcas de tiempo en los sistemas Unix:

  • atime: Tiempo de acceso

    Esta marca de tiempo le indica cuándo se accedió al archivo la última vez, incluido solo el acceso de lectura.

  • ctime: Cambio de hora

    Esta marca de tiempo le indica cuándo cambiaron los atributos del archivo (información de inodo) la última vez. Eso incluye, por ejemplo, propiedad y permisos, pero un cambio de contenido también desencadena una actualización de esta marca de tiempo.

    Tenga en cuenta que los cambios en el atime parecen ser una excepción, ya que no desencadenan una actualización de ctime. Esto probablemente se deba a que un simple acceso de lectura que es suficiente para desencadenar una actualización atime no realiza cambios relevantes en los atributos del archivo. Y uno de los propósitos principales de ctime es ayudar a las herramientas de respaldo a determinar si un archivo ha cambiado. El atime es una información irrelevante para tales herramientas y la actualización de una copia de seguridad solo para actualizar un atime modificado porque alguien ha leído el archivo sería inútil.

    No estoy seguro, pero algunas personas piensan que este comportamiento (los cambios a atime no actualizan ctime) solo se debe a las opciones de montaje (como relatime ) del sistema de archivos subyacente que almacena en caché y retrasa las actualizaciones atime en el inodo por razones de rendimiento en la memoria y solo los aplica a los inodos reales en el disco (desencadenando una actualización de ctime) bajo ciertas condiciones.
    @kos lo intentó y, aparentemente, incluso cuando se monta un FS con la opción `` strictatime``, el ctime parece que nunca se actualiza si cambia el tiempo.

  • mtime: Tiempo de modificación

    Esta marca de tiempo le indica cuándo se modificó el contenido del archivo la última vez.


Entonces, un simple acceso de lectura usando cat FILENAMEsolo cambia el atime , pero no el ctime ya que no se modificó ningún atributo de archivo. El cambio de atime no cuenta.

Byte Commander
fuente
Ese es exactamente el punto: ¿por qué el cambio de tiempo no cuenta? ¿No es un atributo de archivo?
VeryHardCoder
@VeryHardCoder Traté de elaborar mi respuesta en ese punto y agregué algunas explicaciones.
Byte Commander