Vous voulez en savoir plus sur la façon dont Linux suit les changements dans un fichier ? Voici ce que vous devez savoir sur les horodateurs de fichiers Linux.

Le système d’exploitation Linux garde la trace de trois horodatages pour chaque fichier de votre système. Ces horodatages vous permettent de savoir quand un fichier a été mis à jour pour la dernière fois. Mais que signifient-ils tous ? Et comment trouver ces horodatages pour un fichier ? Y a-t-il une différence lorsqu’il s’agit de répertoires ?

Une bonne compréhension de atime, ctime et mtime peut répondre à toutes ces questions. Ce sont les trois timestamps que les systèmes de fichiers Unix suivent. Si vous avez besoin de connaître les détails de ce qui a changé et quand, lisez ce qui suit.

Quels sont les trois horodateurs d’Unix ?

Trois horodatages sont associés à chaque fichier. Linux les stocke dans le format de temps Unix qui mesure les secondes depuis l’époque. Les trois horodatages sont communément appelés atime, ctime et mtime.

Le mtime est le plus courant et souvent le plus utile. C’est l’abréviation de modified time. Il s’agit de l’heure à laquelle le contenu du fichier a été écrit pour la dernière fois sur le disque.

Légèrement différent, le ctime est l’abréviation de change time. Cet horodatage suit les changements de métadonnées tels que la propriété et les permissions. Il inclut le renommage d’un fichier – du moins, sur les systèmes d’exploitation Linux modernes typiques. Mais il est également mis à jour lorsque le contenu du fichier change, il est donc toujours aussi à jour que le mtime.

Le troisième horodatage est le atime, qui enregistre la dernière fois que quelqu’un a accédé au fichier.
Comment les horodatages s’appliquent aux répertoires

Un répertoire Linux est, essentiellement, une liste de fichiers dans ce répertoire. Ainsi, la création d’un fichier à l’intérieur d’un répertoire mettra à jour le mtime de ce répertoire. Lister les fichiers du répertoire, en utilisant la commande ls, par exemple, met à jour son temps d’accès. Et, comme pour un fichier, la modification des permissions ou du nom d’un répertoire met à jour son ctime.

Qu’en est-il du temps de création ?

Vous serez peut-être surpris d’apprendre que Linux ne garde tout simplement pas trace du temps de création. Vous pourriez d’abord supposer que ctime est l’abréviation de « creation time ». De même, vous pouvez penser que c’est une chose très utile à savoir.

De nombreuses applications enregistrent les fichiers en les créant à chaque fois à partir de zéro. L’utilisation d’une heure de création serait donc trompeuse.

Comment afficher les différents horodatages

La façon la plus simple d’obtenir des informations sur les horodatages est d’utiliser la commande ls. Le format long par défaut affiche les détails de l’heure mtime :

$ date
Sat Mar 6 16:57:01 GMT 2021
$ echo « hello, world » > tmp
$ ls -l tmp.txt
-rw-r–r– 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp

Vous pouvez afficher l’heure à la place en utilisant l’option -u :

$ date
Sat Mar 6 16:59:33 GMT 2021
$ cat tmp
hello, world
$ ls -lu tmp
-rw-r–r– 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp
$ ls -l tmp
-rw-r–r– 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp

La dernière ligne confirme que le mtime de ce fichier est différent du atime. Enfin, utilisez le drapeau -c pour afficher ctime :

$ date
Sat Mar 6 17:02:34 GMT 2021
$ mv tmp tmp2
$ ls -lc tmp2
-rw-r–r– 1 ubuntu ubuntu 13 2021-03-06 17:02 tmp2
$ ls -l tmp2
-rw-r–r– 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp2
$ ls -lu tmp2
-rw-r–r– 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp2

Cette fois, nous confirmons que les trois temps sont distincts et corrects : nous avons modifié, puis accédé, puis changé le fichier, dans cet ordre.

Une alternative à ls est la commande stat. Cette commande affiche des détails de bas niveau à partir de l’inode du fichier. Elle permet de vérifier plus facilement les trois temps en une seule fois. Elle permet également de contourner le problème du drapeau -u, peu intuitif. Voici un exemple de sortie pour le même fichier :

$ stat tmp2
Fichier : `tmp2
Taille : 13 Blocs : 8 IO Blocks : 4096 regular file
Périphérique : 801h/2049d Inode : 327688 Liens : 1
Accès : (0644/-rw-r–r–) Uid : ( 1000/ ubuntu) Gid : ( 1000/ ubuntu)
Accès : 2021-03-06 16:59:45.000000000 +0000
Modifier : 2021-03-06 16:57:59.000000000 +00000000
Modifier : 2021-03-06 17:02:43.000000000 +00000000

Comment mettre à jour les horodatages

La commande touch permet de modifier les heures de modification et d’accès d’un fichier. C’est également un moyen pratique de créer un fichier vide, ce qu’elle fera si le fichier n’existe pas déjà :

touch tmp

Par défaut, elle définit mtime et atime à l’heure actuelle. Vous pouvez définir une heure différente avec l’option -t :

touch -t 202103061200 tmp

Vous pouvez également définir uniquement mtime ou atime avec les drapeaux -m et -a respectivement :

touch -t 202103061300 -m tmp

Notez que le ctime est toujours mis à jour lorsque nous définissons le atime ou le mtime.
Comment trouver des fichiers en fonction de leur horodatage

La commande find est un autre outil qui agit sur les horodatages. Elle peut filtrer les fichiers en fonction de atime, ctime ou mtime. Par exemple

find . -amin 15

trouvera les fichiers accédés il y a exactement 15 minutes, tandis que :

find . -mtime -2

trouvera les fichiers modifiés au cours des deux derniers jours.

Linux garde la trace de chaque fichier trois fois

L’horodatage de fichier le plus couramment référencé est mtime. Il s’agit de la date et de l’heure qu’indique une liste de fichiers, par exemple. Mais les deux autres horodatages peuvent également être utiles, à condition que vous compreniez à quoi ils font référence. En particulier, n’oubliez jamais que ctime représente l’heure de modification, et non l’heure de création.
Les commandes telles que touch et stat sont des membres utiles de la boîte à outils de la ligne de commande Linux. Ces commandes amélioreront votre flux de travail Linux en vous permettant de créer rapidement de nouveaux fichiers.