creation time sur ext4
Pour avoir la date de création d’un fichier sur ext4 avec la commande stat, il vous faut 3 ingrédients :
- kernel 4.11 ou supérieur (4.19 à ce jour sur Debian Buster)
- libc 2.28 ou supérieur (2.28-10 à ce jour sur Debian Buster)
- coreutils 8.31 ou supérieur (8.30 à ce jour sur Debian Buster)
Par un miracle miraculeux à croire que j’ai tout prévu, coreutils 8.32 est arrivé le 02/10 sur Debian Testing et sera disponible sur Ubuntu 20.10 lors de sa sortie prévue le 22/10.
atime, mtime, ctime, crtime
Commençons par un petit rappel des dates d’un fichier sur Linux qu’on affiche en général avec stat
.
Date du dernier accès (access time – atime) : Quand le fichier est consulté
Date de dernière modification (modification time – mtime) : Quand le contenu du fichier est modifié
Date du dernier changement (change time – ctime) : Quand les attributs (permissions, propriétaire…) ou le contenu du fichier sont modifiés
Date de création (creation time – crtime pour ext4) : Quand le fichier est créé
Ce sujet étant complexe, je vous renvoie vers ces saines lectures (1, 2, 3).
En pratique
On identifie les partitions en ext4 mount -t ext4
(ou mount | grep ext4
) et on vérifie les options de montage, notamment pour noatime (ne pas mettre à jour la date d’accès). L’option relatime est utilisée par défaut dans le kernel depuis la version 2.6.30 (man mount
puis /relatime
).
sudo touch /toto stat /toto Fichier : /toto Taille : 0 Blocs : 0 Blocs d'E/S : 4096 fichier vide Périphérique : 10305h/66309d Inœud : 8571 Liens : 1 Accès : (0644/-rw-r--r--) UID : ( 0/ root) GID : ( 0/ root) Accès : 2020-10-15 17:02:49.212202834 +0200 Modif. : 2020-10-15 17:02:49.212202834 +0200 Changt : 2020-10-15 17:02:49.212202834 +0200 Créé : 2020-10-15 17:02:49.212202834 +0200
cat /toto stat /toto Fichier : /toto Taille : 0 Blocs : 0 Blocs d'E/S : 4096 fichier vide Périphérique : 10305h/66309d Inœud : 8571 Liens : 1 Accès : (0644/-rw-r--r--) UID : ( 0/ root) GID : ( 0/ root) Accès : 2020-10-15 17:03:26.660363346 +0200 Modif. : 2020-10-15 17:02:49.212202834 +0200 Changt : 2020-10-15 17:02:49.212202834 +0200 Créé : 2020-10-15 17:02:49.212202834 +0200
sudo nano /toto # Faites une modification et enregistrez stat /toto Fichier : /toto Taille : 2 Blocs : 8 Blocs d'E/S : 4096 fichier Périphérique : 10305h/66309d Inœud : 8571 Liens : 1 Accès : (0644/-rw-r--r--) UID : ( 0/ root) GID : ( 0/ root) Accès : 2020-10-15 17:03:26.660363346 +0200 Modif. : 2020-10-15 17:04:31.244640195 +0200 Changt : 2020-10-15 17:04:31.244640195 +0200 Créé : 2020-10-15 17:02:49.212202834 +0200
sudo chmod 777 /toto stat /toto Fichier : /toto Taille : 2 Blocs : 8 Blocs d'E/S : 4096 fichier Périphérique : 10305h/66309d Inœud : 8571 Liens : 1 Accès : (0777/-rwxrwxrwx) UID : ( 0/ root) GID : ( 0/ root) Accès : 2020-10-15 17:03:26.660363346 +0200 Modif. : 2020-10-15 17:04:31.244640195 +0200 Changt : 2020-10-15 17:05:10.028806446 +0200 Créé : 2020-10-15 17:02:49.212202834 +0200
LANG=en_US.UTF-8 stat /toto File: /toto Size: 2 Blocks: 8 IO Block: 4096 regular file Device: 10305h/66309d Inode: 8571 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-10-15 17:03:26.660363346 +0200 Modify: 2020-10-15 17:04:31.244640195 +0200 Change: 2020-10-15 17:05:10.028806446 +0200 Birth: 2020-10-15 17:02:49.212202834 +0200
stat -c '%w' /toto 2020-10-15 17:02:49.212202834 +0200
ls -l --time=birth /toto # ou --time=creation -rwxrwxrwx 1 root root 7 15 oct. 17:02 /toto
Quelques réflexions
Notez bien que la date de création d’un fichier sur ext4 est disponible depuis des années sur Linux (article de 2012) mais il fallait utiliser debugfs pour la récupérer… On a « seulement » accès à cette date facilement en 2020 sur Debian/Ubuntu avec les commandes ls et stat du paquet coreutils. coreutils 8.31 est sorti en mars 2019 (« stat now prints file creation time »), coreutils 8.32 en mars 2020 (« ls now supports the –time=birth option to display and sort by file creation time »).
L’évolution est intéressante à vivre et à suivre je trouve. Il y a eu une première phase « implémentation », ça fonctionne, on peut récupérer l’info avec debugfs. Nous sommes à la seconde phase « utilisable », on récupère l’information simplement, à hauteur de l’utilisateur. Ensuite viendra la phase « intégration », on sera en mesure de chercher/trouver les fichiers avec telle date de création typiquement avec find
. Enfin la dernière phase « diffusion et prise en charge », tous les logiciels en ayant l’usage prendront en charge la date de création. Par exemple les gestionnaires de fichiers Caja et Thunar qui permettront de trier les fichiers par date de création. Je suis curieux de voir si on aura cela dans les 5 ans.
Tout ça pour vous dire que vous êtes à la pointe en me lisant, vous allez pouvoir briller dans les soirées mondaines (sur IRC évidemment).