Comment vérifier tous les horodatages d'un fichier?

52

Existe-t-il une commande sous Linux pour vérifier tous les horodatages d'un fichier?

J'essaie de voir les dernières dates modifiées, créées et touchées du fichier.

Mechaflash
la source
4
Rappelons simplement que les fichiers Linux n’ont pas de date de naissance. Ainsi, il n'est pas possible de déterminer la date à laquelle un fichier a été créé.
FatalError
remarqué que = (. Merci de me l'avoir
signalé
4
@FatalError: Divers systèmes de fichiers prennent déjà en charge les horodatages de naissance / création; Le vrai problème est d’ avoir accès à ces informations supplémentaires. (On ne peut pas prolonger struct statsans casser des choses, malheureusement ...) Vous pouvez essayer debugfs -R "stat <1234>" /dev/sdXYd'ext4, en le remplaçant 1234par un ino.
Grawity
@grawity: Neat! Je me suis toujours demandé pourquoi il n'y avait pas de fs ... Merci pour le conseil :).
FatalError
1
@FatalError, l'heure de naissance peut être affichée avec la statcommande Linux , voir Comment trouver la date de création du fichier? et Quels systèmes de fichiers sous Linux stockent l’heure de la création? .
Franklin Piat

Réponses:

73

La commande s'appelle stat.

$ stat test
234881026 41570368 -rw-r--r-- 1 werner staff 0 0 "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" "Feb  7 16:03:06 2012" 4096 0 0 test

Si vous souhaitez ajuster le format, reportez-vous aux pages de manuel, car le résultat est spécifique au système d'exploitation et varie sous Linux / Unix.

En règle générale, vous pouvez également obtenir les temps par le biais d'une liste de répertoires normale:

  • ls -l la dernière fois que le contenu du fichier a été modifié, la mtime
  • ls -lcaffiche la dernière heure de modification du statut du fichier, le ctime( Quelle est la différence? )
  • ls -ludonne le dernier temps d'accès, le atime(bien que l'utilité de ce concept soit sujette à discussion )

Et bien sûr, ctimene pas enregistrer quand un fichier a été "créé". La spécification POSIX ne définit que trois horodatages, mais certains systèmes de fichiers Linux enregistrent l'heure de naissance / heure de création. Comment trouver la date de création du fichier? Sur une telle configuration prise en charge, on pourrait utiliser

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'
slhck
la source
statest vraiment détaillé. Mais lsn'a besoin que d'une ligne. Ce serait bien si cela pouvait aussi afficher des secondes. Cependant, lors de la création de listes de fichiers, l’ancien convient parfaitement.
neverMind9
ls -l était la solution rapide pour moi
Andrew
J'ai remarqué que le résultat de ls -lpeut afficher un format de date différent lorsque BusyBox est installé (sur Android). Je pense que sans cela, c'est comme "2019-07-26 14:41", et avec ça, c'est comme "6 mai 21:27". Comment se fait-il que l'année soit manquante? Y a-t-il un moyen de le forcer en utilisant le format sans?
développeur Android
@androiddeveloper Comme je l'ai dit, la réponse dépend du système d'exploitation. Je pense que vous devriez ouvrir une nouvelle question. Si vous parlez d'Android en particulier, peut-être que Stack Overflow ou Android Enthusiasts conviendrait mieux.
slhck le
@slhck Eh bien, c'est le même système d'exploitation, avec BusyBox installé. J'ai demandé s'il était possible (c'est-à-dire: existe-t-il une commande à utiliser) pour obtenir le format qui sera affiché.
développeur Android
21

Il n'y a que TROIS valeurs de temps distinctes stockées pour chacun de vos fichiers, comme défini par le standard POSIX : http://pubs.opengroup.org/onlinepubs/9699919799/ (voir la section Définitions de base -> 4. Concepts généraux -> 4.8 Fichier Times Update)

Chaque fichier a trois horodatages associés distincts: 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 . Ces valeurs sont renvoyées dans la structure de caractéristiques de fichier struct stat, comme décrit dans <sys / stat.h> .

Et de <sys / stat.h> :

atime is for Last data access timestamp.
mtime is for Last data modification timestamp.
ctime is for Last file status change timestamp.

A la suite des exemples montrent la différence entre les atime , mtime et ctime , ces exemples sont dans GNU / Linux BASH. Vous pouvez utiliser stat -xMac OS X ou un autre BSD Dist. pour voir le format de sortie similaire.

$ stat --version
stat (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ touch test
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:58:28.609223953 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

Lorsque le fichier vient d'être créé, trois horodatages sont identiques.


1. heure

Premièrement, accédons aux données du fichier en le lisant ( lessou vim), en l’imprimant ( cat) ou en le copiant dans un autre fichier ( cp).

$ cat test #Nothing will be printed out, since the file is empty
$ stat test
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800  <-- atime Changed!
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

2. ctime

Maintenant, changeons l’état du fichier, en changeant permission ( chmod) ou en le renommant ( mv)

$ chmod u+x test
$ stat stet
  File: `test'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:04:10.178285430 +0800  <-- ctime Changed!
$    
$ mv test testing
$ stat testing
  File: `testing'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:06:33.342207679 +0800  <-- ctime Changed again!

Notez que jusqu'à présent, le contenu ( données ) du fichier est toujours le même que lors de la création.


3. mtime

Enfin, modifions le contenu du fichier en le modifiant.

$ echo 'Modify the DATA of the file' > testing
$ echo 'Modify the DATA of the file also change the file status' > testing
$ stat testing
  File: `testing'
  Size: 56          Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d  Inode: 98828525    Links: 1
Access: (0764/-rwxrw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 11:09:48.247345148 +0800  <-- mtime Changed!
Change: 2014-03-16 11:09:48.247345148 +0800  <-- ctime also Changed!

4. heure de naissance

Notez également que la version la plus récente de stat(par exemple stat --version 8.13dans Ubuntu 12.04) contient des informations de quatrième horodatage - l’ heure de la naissance ( heure de création du fichier). Bien qu'il puisse ne pas afficher l'heure correcte pour l'instant:

$ stat --version
stat (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ stat birth_time
  File: `birth_time'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d  Inode: 4073946     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ bingyao)   Gid: ( 1000/ bingyao)
Access: 2014-03-16 10:46:48.838718970 +0800
Modify: 2014-03-16 10:46:48.838718970 +0800
Change: 2014-03-16 10:46:48.838718970 +0800
 Birth: -
YaOzI
la source
Quelle est la signification de 10: 46: 48.838718970? HH: MM: SS. nanosecondes?
Dzung Nguyen
2
Oui . "Depuis le noyau 2.5.48, la structure de statistiques prend en charge la résolution en nanosecondes pour les trois champs d'horodatage de fichier ...."
Tom Lord
Le temps de création peut être déterminé avec un accès root et des fichiers de débogage
Mikko Rantalainen
2
L'heure de la naissance… volontiers. Parce que la dernière modification et la dernière modification sont presque dans le même but mais restent distinctes. C'est bien si les quatre existent.
neverMind9