2012-02-07 14:59:56 +0000 2012-02-07 14:59:56 +0000
54
54

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

Existe-t-il une commande dans 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.

Réponses (2)

75
75
75
2012-02-07 15:03:39 +0000

La commande est appelée 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 la sortie est spécifique au système d'exploitation et varie sous Linux/Unix.

En général, vous pouvez également obtenir les heures par le biais d'une liste de répertoire normale :

  • ls -l indique la dernière fois que le contenu du fichier a été modifié, mtime
  • ls -lc indique la dernière fois que le statut du fichier a été modifié, ctime Quelle est la différence ? )
  • ls -lu indique la dernière fois que le fichier a été consulté, atime (bien que l'utilité de ce concept soit sujet à discussion )

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

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'
21
21
21
2014-03-15 09:24:38 +0000

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

Chaque fichier est associé à trois horodatages distincts : l'heure du dernier accès aux données , l'heure de la dernière modification des données , et l'heure du dernier changement de statut du fichier. Ces valeurs sont renvoyées dans la structure des caractéristiques du fichier struct stat, comme décrit dans <sys/stat.h> _.

Et à partir 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.

Les exemples suivants montrent la différence entre atime , mtime et ctime , ces exemples sont sous GNU/Linux BASH. Vous pouvez utiliser stat -x dans Mac OS X ou d'autres 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éé, les trois horodatages sont les mêmes.


1. atime

Premièrement, accédons** aux données du fichier en le lisant (less ou 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, changons le statut du fichier, en changeant la 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 sa création.


3. mtime

Enfin, modifions le contenu du fichier en éditant le fichier.

$ 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. birth time

Notez également que la nouvelle version de stat (par exemple stat --version 8.13 dans Ubuntu 12.04) possède une 4ème information d'horodatage - le Birth Time (heure de création du fichier). Bien qu'elle 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: -