Depuis longtemps, Linux ne s'est pas soucié des dates de création de fichiers car aucun des systèmes de fichiers qu'il utilisait couramment ne les supportait. Cependant maintenant, 2 systèmes de fichiers couramment utilisés (NTFS et ext4) enregistrent tous deux des dates de création de fichiers.
La stat
commande, cependant, toujours en sortie Birth: -
sur un système de fichiers ext4, même si nous pouvons voir que ext4 a stocké le fichier de la date de création à l' aide debugfs -R 'stat <inode_number>' /dev/file_device
.
Quand j'ai cherché à savoir pourquoi cela s'est produit, j'ai vu que quelqu'un d'autre avait déjà récemment déposé un rapport de bogue à ce sujet, et la réponse est liée à un problème en amont qui indique simplement "il n'y a pas d'interface de noyau Linux actuellement pour obtenir cette information [fichier date de création]". Il me semble remarquable que cela soit apparemment toujours le cas, car les gens demandent à stat
afficher ces informations depuis des années (et stat
produisent un Birth
champ, même s'il ne le supporte apparemment pas encore! L'ont-ils ajouté par anticipation?)
Est-il donc toujours vrai qu'il n'y a pas d'interface de noyau Linux actuellement pour obtenir la date de création du fichier? Existe-t-il un plan pour mettre cela en œuvre?
la source
debugfs
.ZFS
enregistre également le temps de création du fichier et permet de les récupérer via des attributs étendus.Réponses:
EDIT: Bonne nouvelle,
statx()
a été fusionnée et devrait donc être disponible dans la version 4.11.Le travail xstat (), actuellement statx (), a été révisé en 2016.
Le processus a été un peu plus discipliné cette fois (moins de bikeshedding, accord pour abandonner les attributs controversés car ils peuvent toujours être ajoutés plus tard). Malheureusement, il y avait encore des objections à l'interface exacte et je n'ai vu aucune référence plus récente.
la source
D'après ce que je peux dire (désolé un tas de liens, de mémoire et de googlage, rien de suffisamment cohérent pour être répertorié ici comme référence), ce n'est jamais parce que les systèmes de soulignement ne prenaient pas en charge les attributs de temps de création, mais parce qu'aucun d'entre eux ne pouvait même conviennent que c'était une caractéristique utile.
Voir http://www.pathname.com/fhs/pub/fhs-2.3.html
POSIX dispose de trois horodatages. Aucun d'eux n'est le temps de la création.
Si je me souviens bien, l'argument est allé quelque chose comme:
Maintenant, beaucoup de cela est de la mémoire et de la lecture de vieilles listes de diffusion. Je n'étais pas non plus au centre des arguments. J'étais sur une liste de diffusion à cause d'un travail hors tournage dans un gros pilote pour un système Linux embarqué. Je mentionne cela parce qu'il y a sûrement plus de sources faisant autorité que ma mémoire de quelque chose dont je me souciais un peu.
Je me souviens que le gros problème était une combinaison du fait que personne ne pouvait proposer un bon cas d'utilisation, personne ne pouvait s'entendre sur la façon de gérer le champ pour les 40 autres systèmes de fichiers couramment utilisés qui ne prennent pas en charge le temps de création, et même trouver un nom pour le domaine s'est transformé en un débat massif.
la source
debugfs
pour lire le champ sur l'image du disque n'est pas vraiment une interface , et il faudra de toute façon un accès privilégié.L'heure de naissance est dans plusieurs systèmes de fichiers natifs Linux, pas seulement ext4.
Depuis la version 4.11 du noyau Linux (avril 2017), il y a un nouvel
statx()
appel système pour le récupérer. Cependant, la fonction enveloppe correspondant n'a pas été ajouté à la GNU libc encore (au 26/06/2018. 2019 modifier maintenant ajouté à 2,28), et des outils tels que GNUstat
,ls
,find
n'ont pas été mis à jour pour l' utiliser ( 2019-08- 22 Modifier GNUstat
sur les systèmes GNU / Linux avec glibc 2.28 ou supérieur le supporte depuis coreutils 8.31)Vous pouvez le faire
perl
avec quelque chose comme:Si ce
syscall.ph
n'est pas le casSYS_statx
, vous pouvez également le coder en dur. C'est 332 sur les architectures amd64. Ou essayez:Maintenant que l'heure de naissance est rarement utile. Ce n'est pas l'âge des données dans le fichier (les données sont écrites dans des fichiers après leur création), ni nécessairement l'heure à laquelle le fichier est apparu sous ce nom dans un répertoire (il aurait pu être créé sous un nom différent et renommé ou lié) et le contenu ou les attributs ont été modifiés plusieurs fois entre les deux).
la source
NFSv4
il devrait prendre en charge les attributs étendus et il existe une entrée possiblecrtime
dans les attributs étendus. Vérifiez par exemple lals.c
source Solaris qui imprime l'heure de création du fichier avecls -l -% crtime
.statx()
. Il n'y a pas encore d'utilitaire standard auquel s'interfacerstatx()
sous Linux, mais la récupération des attributs étendus est prise en charge depuis des décennies. Voir Comment obtenir la date de création d'un fichier sur un volume logique NTFS?openat(fd, ".", O_RDONLY|O_XATTR)
.