Je dois trouver l'heure de création d'un fichier. Lorsque j'ai lu certains articles sur ce problème, tous ont mentionné qu'il n'y avait pas de solution (comme Site1 , Site2 ).
Quand j'ai essayé la stat
commande, ça dit Birth: -
.
Alors, comment puis-je trouver l'heure de création d'un fichier?
Réponses:
Il existe un moyen de connaître la date de création d'un répertoire, procédez comme suit:
Connaître l' inode du répertoire par
ls -i
commande (disons par exemple son X )Sachez sur quelle partition votre répertoire est enregistré par
df -T /path
commande (disons qu'il est activé/dev/sda1
)Maintenant, utilisez cette commande:
sudo debugfs -R 'stat <X>' /dev/sda1
Vous verrez dans la sortie:
crtime est la date de création de votre fichier.
Ce que j'ai testé :
Modifié en créant un fichier.
J'ai essayé la commande et il a donné une heure exacte.
la source
debugfs
il extrait directement du système de fichiers afin qu'il n'ait pas besoin d'utiliser l'API du noyau. Voir ici .statx()
compter de mars 2019.@Nux a trouvé une excellente solution à cet égard. J'ai décidé d'écrire une petite fonction qui peut être utilisée pour tout exécuter directement. Ajoutez simplement ceci à votre
~/.bashrc
.Maintenant, vous pouvez exécuter
get_crtime
pour imprimer les dates de création de autant de fichiers ou de répertoires que vous le souhaitez:la source
cp -p
ou similaire.df
ne semble pas supporter cette--output
option. Dans ce cas, vous pouvez remplacer cette ligne parfs=$(df foo | awk '{a=$1}END{print a}'
et la fonction fonctionnera également. Tout ce que je montre dans cette réponse est un moyen d'encapsuler la commande à partir de la réponse acceptée d'une manière qui peut être exécutée directement pour les cibles fichier / répertoire.L'impossibilité d'
stat
afficher l'heure de création est due à la limitation de l'stat(2)
appel système , dont la structure de retour n'incluait pas de champ pour l'heure de création. À partir de Linux 4.11 (c'est-à-dire 17.10 et plus récent *), le nouvelstatx(2)
appel système est disponible, ce qui inclut une heure de création dans sa structure de retour.* Et éventuellement sur des versions antérieures de LTS utilisant les noyaux de pile d’activation matérielle (HWE). Vérifiez
uname -r
si vous utilisez un noyau au moins à 4.11 pour confirmer.Malheureusement, il n'est pas facile d'appeler des appels système directement dans un programme C. Glibc fournit généralement un wrapper qui facilite le travail, mais elle n’a ajouté un wrapper
statx(2)
qu’en août 2018 (version 2.28 , disponible en 18.10). Heureusement, @whotwagner a écrit un exemple de programme en C qui montre comment utiliser l'statx(2)
appel système sur les systèmes x86 et x86-64. Sa sortie est au même format que celuistat
par défaut, sans aucune option de formatage, mais il est simple de le modifier pour n’imprimer que l’heure de naissance.Commencez par le cloner:
Vous pouvez compiler le
statx.c
code ou, si vous voulez seulement l'heure de naissance, créer unbirth.c
dans le répertoire cloné avec le code suivant (qui est une version minimale de l'statx.c
impression uniquement de l'horodatage de création avec une précision à la nanoseconde):Ensuite:
En théorie, cela devrait rendre le temps de création plus accessible:
debugfs
s'agit d'un outil pour les systèmes de fichiers ext2 / 3/4 et inutilisable sur d'autres).make
etlinux-libc-dev
).Tester un système xfs, par exemple:
Cependant, cela n'a pas fonctionné pour NTFS et exfat. Je suppose que les systèmes de fichiers FUSE pour ceux-ci n'incluaient pas le temps de création.
Si, ou plutôt quand, glibc ajoute le support pour l'
statx(2)
appel système,stat
suivra bientôt et nous pourrons utiliser lastat
commande plain old pour cela. Mais je ne pense pas que cela sera reporté dans les versions LTS, même s’ils obtiennent de nouveaux noyaux. Donc, je ne pense passtat
à une version actuelle LTS (14,04, 16,04 ou 18,04) à jamais imprimer le temps de création sans intervention manuelle.Toutefois, le 18.10, vous pouvez utiliser directement la
statx
fonction comme décrit dansman 2 statx
(notez que la page de manuel 18.10 est incorrecte car elle indique que glibc n’a pas encore ajouté le wrapper).la source
1
?TL; DR: Il suffit de lancer:
sudo debugfs -R 'stat /path/to/your/file' /dev/<your fs>
(Pour déterminer votre fs, courez
df -T /path/to/your/file
, ce sera probablement le cas/dev/sda1
).Version longue:
Nous allons exécuter deux commandes:
Découvrez le nom du nom de la partition pour votre fichier.
La sortie va ressembler à ceci (le nom de la partition est en premier):
Découvrez l'heure de création de ce fichier.
Dans la sortie, recherchez
ctime
.la source