Comprendre les horodatages des fichiers Linux: mtime, ctime et atime

Le système d'exploitation Linux garde la trace de trois horodatages pour chaque fichier de votre système. Ces horodatages vous permettent de découvrir quand un fichier a été mis à jour pour la dernière fois. Mais que signifient-ils tous? Et comment connaître ces horaires pour un fichier? Y a-t-il une différence en ce qui concerne les répertoires?

Une compréhension de atime, ctime et mtime peut répondre à toutes ces questions. Ce sont les trois horodatages suivis par les systèmes de fichiers Unix. Si jamais vous avez besoin de savoir ce qui a changé et quand, lisez la suite.

Quels sont les trois horodatages Unix?

Chaque fichier est associé à trois horodatages. Linux les stocke au format horaire 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. Il représente le temps modifié . C'est l'heure à laquelle le contenu du fichier a été écrit pour la dernière fois sur le disque.

Légèrement différent est le ctime qui représente le temps de changement . Cet horodatage suit les modifications des métadonnées telles que la propriété et les autorisations. Cela inclut le changement de nom 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 mtime.

Le troisième horodatage est l' atime , qui stocke 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 des fichiers de ce répertoire. Ainsi, la création d'un fichier dans un répertoire mettra à jour le mtime de ce répertoire. La liste des fichiers dans le répertoire, à l'aide de la commande ls , par exemple, met à jour son heure d'accès. Et, comme pour un fichier, la modification des autorisations ou du nom d'un répertoire met à jour son heure de fonctionnement.

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

Vous serez peut-être surpris d'apprendre que Linux ne tient tout simplement pas compte du temps de création. Vous pourriez initialement supposer que ctime représente l'heure de création. De même, vous pourriez considérer cela comme une chose très utile pour pouvoir le découvrir.

De nombreuses applications enregistrent des fichiers en les créant à chaque fois à partir de zéro. Cela rendrait l'utilisation d'une heure de création trompeuse.

Comment afficher les différents horodatages

Le moyen le plus simple d'obtenir des informations d'horodatage est d'utiliser la commande ls . Le format long par défaut affiche les détails du 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'atime à la place en utilisant l'indicateur -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 de l'atime. Enfin, utilisez l'indicateur -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 les détails de bas niveau de l'inœud du fichier. Cela facilite la vérification des trois fois à la fois. Cela permet également de contourner le problème de l'indicateur -u peu intuitif. Voici un exemple de sortie pour le même fichier:

 $ stat tmp2
File: `tmp2'
Size: 13 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 327688 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2021-03-06 16:59:45.000000000 +0000
Modify: 2021-03-06 16:57:59.000000000 +0000
Change: 2021-03-06 17:02:43.000000000 +0000

Comment mettre à jour les horodatages

La commande tactile modifie les heures de modification et d'accès d'un fichier. C'est aussi un moyen pratique de créer un fichier vide, ce qu'il fera si le fichier n'existe pas déjà:

 touch tmp

Par défaut, il définira mtime et atime sur l'heure actuelle. Vous pouvez définir une heure différente avec l'indicateur -t :

 touch -t 202103061200 tmp

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

 touch -t 202103061300 -m tmp

Notez que le ctime est toujours mis à jour lorsque nous définissons atime ou mtime.

Comment rechercher des fichiers en fonction des horodatages

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

 find . -amin 15

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

 find . -mtime -2

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

Linux effectue le suivi 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 affichées par 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, rappelez-vous toujours que ctime représente le temps de changement , pas le temps de création .

Les commandes telles que touch et stat sont des membres utiles de la boîte à outils de ligne de commande Linux. Ces commandes amélioreront votre flux de travail Linux en vous permettant de créer rapidement de nouveaux fichiers.