Je souhaite connaître la date de création d'un fichier particulier, et non la date de modification ou la date d'accès.
J'ai essayé avec ls -ltrh
et stat filename
.
linux
files
timestamps
stat
Özzesh
la source
la source
stat(1)
.stap
pour récupérer les temps de création.Réponses:
La norme POSIX ne définit que trois horodatages distincts à stocker pour chaque fichier: l'heure du dernier accès aux données, l'heure de la dernière modification des données et l'heure de la dernière modification du statut du fichier.
Cela dit, les systèmes de fichiers Linux modernes, tels que ext4, Btrfs et JFS, enregistrent l'heure de création du fichier (heure de naissance), mais utilisent des noms différents pour le champ en question (
crtime
dans ext4,otime
dans Btrfs et JFS). Cependant, actuellement, Linux ne fournit pas d’API de noyau pour accéder aux temps de création de fichiers , même sur les systèmes de fichiers les prenant en charge.Comme Craig Sanders et Mohsen Pahlevanzadeh ont souligné,
stat
ne supporte le%w
et%W
spécificateurs de format pour afficher l'heure de naissance de fichier (en format lisible par l' homme et en quelques secondes depuis Epoch respectivement). Cependant,stat
lui - même accède à l'heure de naissance via la fonctionget_stat_birthtime()
fournie par gnulib (inlib/stat-time.h
), qui obtient l'heure de naissance à partir des champsst_birthtime
etst_birthtimensec
de lastat
structure renvoyés par l'stat()
appel système. Bien que, par exemple, les systèmes BSD (et, par extension, OS X) fournissentst_birthtime
viastat
, ce n’est pas le cas de Linux. C’est pourquoi lesstat -c '%w' file
sorties-
(indiquant une heure de création inconnue) sous Linux, même pour les systèmes de fichiers qui stockent l’heure de création en interne.Comme le souligne Stéphane Chazelas , certains systèmes de fichiers, tels que ntfs-3g, exposent les temps de création de fichiers via des attributs de fichier étendus.
la source
stap
pour créer votre propre API de noyau. Voir l'exemple en réponse ici.TLDR; Utilisez
stap
( "SystemTap" ) pour créer votre propre API de noyau. Démo de l'extraction du temps de création ext4 ci-dessous.Vous pouvez extraire les temps de création ext4 sur les systèmes Fedora 19. Voici la mienne:
Il est clair que les inodes sur mes partitions ext4 ont le temps de création. Voici un script shell qui détermine l'inode associé à un nom de fichier, puis augmente la
stat
sortie avec l'heure de création en utilisantstap
("systemtap").NB: Ceci est juste une démo et extrêmement inefficace puisqu'un module de noyau est créé, chargé et déchargé à chaque exécution. Ceci est également probablement très fragile car aucune vérification d'erreur n'est effectuée. Une API de noyau appropriée serait préférable, mais ce script pourrait être rendu beaucoup plus efficace et lire les temps de création de plusieurs fichiers / inodes.
[contenu de stap_stat.sh]
Voici une démo:
la source
debugfs + stat
permet d'obtenircrtime
sans singe patcher le noyau.En
ext4
c'est possible; carext4
le système de fichiers stocke l'heure de création du fichier. Néanmoins, vous constaterez que lastat
commande ne peut pas afficher la date, car je pense que le noyau ne possède aucune API pour cela.Quoi qu’il en soit, l’heure de naissance du fichier est enregistrée
ext4
et vous pouvez le trouver, mais pas par une méthode directe, mais en utilisantdebugfs
la source
xstat filename
/dev/sdxX
est monté dans/some/path
et que le fichier est/some/path/some/file
, le chemin à spécifier est uniquementsome/file
: son chemin doit être référé non à la racine du système de fichiers, mais au point de montage. Sinon, le fichier ne sera pas trouvé.En théorie, avec GNU stat, vous pouvez utiliser
stat -c '%w'
ou%W
obtenir la date de création d'un fichier (ou heure de naissance).En pratique, la plupart des systèmes de fichiers n'enregistrent pas ces informations et le noyau Linux ne fournit aucun moyen d'y accéder.
Le plus proche que vous pouvez obtenir est ctime du fichier, qui n'est pas l'heure de création, mais l'heure à laquelle les métadonnées du fichier ont été modifiées.
Linux Weekly News a publié un article intéressant à ce sujet il y a quelques années - http://lwn.net/Articles/397442/
la source
Différence entre
FreeBSD
etGNU\Linux
surstat command
:Si vous appelez
stat
commande,GNU\Linux
elle appelle l'-x
option, mais sous FreeBSD, vous devez invoquer vous-même l'-x
option.Voir aussi Quels systèmes de fichiers sous Linux stockent l'heure de création?
Notes:
--printf
est très utile enscripting
....!la source
Dans OS X , vous pouvez utiliser
ls -lU
,stat -f%B
,GetFileInfo -d
oumdls -n kMDItemFSCreationDate
:la source
Regarde ça:
BTW, cela ne fonctionne que sur ext4. Je n'ai pas encore trouvé de solution pour BtrFS ...;)
la source