Comment ctime change-t-il?

8

J'essaie de comprendre précisément quand l'horodatage ctime d'un fichier est modifié. Dans de nombreux endroits (par exemple, dans la réponse acceptée ici ), il est suggéré que toute modification des attributs de fichier modifie également ctime. Cependant, cela ne semble pas être vrai, du moins sur mon Ubuntu 12.04 (oui, je sais, un peu vieux ...):

cat file.txt > /dev/null

modifie l'atime, il modifie donc les attributs du fichier (dans l'inode du fichier), mais ne modifie pas le ctime.

D'autres sources (par exemple, ici et ici ) suggèrent que seules certaines opérations sur les attributs de fichier modifient réellement le ctime, mais aucune liste précise n'est fournie.

Où puis-je trouver une référence précise à quelles opérations modifient le ctime?

VeryHardCoder
la source
Peut-être que le problème est lié à cat, l'avez-vous examiné avec touch?
Mahdi

Réponses:

8

Il existe trois horodatages sur les systèmes Unix:

  • atime: Temps d'accès

    Cet horodatage vous indique quand le fichier a été accédé la dernière fois, y compris uniquement l'accès en lecture.

  • ctime: Changer le temps

    Cet horodatage vous indique quand les attributs de fichier (informations d'inode) ont changé la dernière fois. Cela inclut par exemple la propriété et les autorisations, mais un changement de contenu déclenche également une mise à jour de cet horodatage.

    Notez que les modifications apportées à atime semblent être une exception car elles ne déclenchent pas de mise à jour ctime. Cela est probablement dû au fait qu'un simple accès en lecture qui est suffisant pour déclencher une mise à jour atime n'apporte aucune modification pertinente aux attributs de fichier. Et l'un des principaux objectifs de ctime est d'aider les outils de sauvegarde à déterminer si un fichier a changé. L'atime est une information non pertinente pour de tels outils et la mise à jour d'une sauvegarde juste pour mettre à jour un atime modifié parce que quelqu'un a lu le fichier serait inutile.

    Je ne suis pas sûr, mais certaines personnes pensent que ce comportement (les modifications apportées à atime ne mettent pas à jour ctime) est uniquement dû aux options de montage (comme relatime) du système de fichiers sous-jacent qui met en cache et retarde les mises à jour atime dans l'inode pour des raisons de performances en mémoire et les applique uniquement aux vrais inodes du disque (déclenchant une mise à jour ctime) sous certaines conditions.
    @kos l'a essayé et apparemment même lors du montage d'un FS avec l'option `strictatime``, le ctime semble ne jamais se mettre à jour si l'atime change.

  • mtime: Temps de modification

    Cet horodatage vous indique quand le contenu du fichier a été modifié la dernière fois.


Ainsi, un simple accès en lecture utilisant cat FILENAMEuniquement modifie l' atime , mais pas le ctime car aucun attribut de fichier n'a été modifié. Le temps modifié ne compte pas.

Byte Commander
la source
C'est exactement le point: pourquoi le temps modifié ne compte pas? N'est-ce pas un attribut de fichier?
VeryHardCoder
@VeryHardCoder J'ai essayé d'élaborer ma réponse sur ce point et j'ai ajouté quelques explications.
Byte Commander