horodatage, heure de modification et heure de création d'un fichier

105

Je sais juste que ls -tet ls -fdonne le tri différent des fichiers et des sous-répertoires dans un répertoire.

  • Quelles sont les différences entre l'horodatage, l'heure de modification et l'heure de création d'un fichier?
  • Comment obtenir et modifier ce type d'informations par commandes?
  • Pour ce qui est du type d'informations, les gens disent-ils qu'un fichier est "plus récent" que l'autre?
  • Quels types d'informations ne modifieront pas le fichier?

Par exemple, j'ai vu quelqu'un écrire:

Par défaut, le programme rsync cherche uniquement à déterminer si la taille et l'horodatage des fichiers sont différents. Peu importe le fichier le plus récent, s’il est différent, il est écrasé. Vous pouvez passer l'indicateur '--update' à rsync, ce qui le fera ignorer les fichiers de la destination s'ils sont plus récents que le fichier de la source, mais uniquement s'ils sont du même type de fichier. Cela signifie que si, par exemple, le fichier source est un fichier standard et que la destination est un lien symbolique, le fichier de destination sera écrasé, quel que soit l'horodatage.

Sur une note de côté, le type de fichier signifie-t-il uniquement les fichiers standard et simlink, et non le type tel que pdf, jpg, htm, txt, etc.?

Tim
la source
Voir aussi askubuntu.com/questions/62492/…
rogerdpack

Réponses:

139

Il existe 3 types de "timestamps":

  • Accès - la dernière fois que le fichier a été lu
  • Modifier - la dernière fois que le fichier a été modifié (le contenu a été modifié)
  • Change - la dernière fois que les métadonnées du fichier ont été modifiées (autorisations, par exemple).

Pour afficher cette information, vous pouvez utiliser statce qui fait partie des coreutils.

stat vous montrera également quelques informations supplémentaires telles que le périphérique, les inodes, les liens, etc.

N'oubliez pas que ce type d'informations dépend fortement du système de fichiers et des options de montage. Par exemple, si vous montez une partition avec l' noatimeoption, aucune information d'accès ne sera écrite.

Un utilitaire pour changer les horodatages serait touch. Certains arguments permettent de décider de l’horodatage à modifier (par exemple -a pour le temps d’accès, -m pour le temps de modification) et d’influencer l’analyse d’un nouvel horodatage donné. Voir man touchpour plus de détails.

touchpeut être utile en combinaison avec cp -u( "copier uniquement lorsque le fichier SOURCE est plus récent que le fichier de destination ou lorsque le fichier de destination est manquant" ) ou pour la création de fichiers de marqueur vides.

echox
la source
1
Merci! Pour la commande rsync, dans "peu importe le fichier le plus récent", en ce qui concerne le type d'horodatage utilisé par "plus récent". En outre, le type de fichier dont rsync s’intéresse ne signifie-t-il que les fichiers normaux et simlink, pas le type tel que pdf, jpg, htm, txt, etc.?
Tim
2
Généralement, la référence à l'heure d'un fichier est l'horodatage "modifié". Par exemple, ce que vous voyez ls -l. Et le type de fichier fait référence à un fichier par rapport à un lien symbolique (ou à d’autres types de fichiers tels que des répertoires ou des périphériques). Ce n'est pas le type de données dans le fichier (texte ou jpeg, etc.).
Seth L
2
@ Tim Dans ce contexte, c'est l'horodatage modifié; rsync dit que lorsqu'il décide s'il doit sauvegarder un fichier, il ne vérifie pas si le fichier source a été modifié plus récemment que la sauvegarde existante (ce qui est commun avec les programmes de sauvegarde); il vérifie simplement si les fichiers ont des tailles différentes ou des temps de modification différents et sauvegarde, le cas échéant
Michael Mrozek
1
Et comment puis-je savoir quand le fichier a été créé? Cette information est-elle conservée quelque part ou est-elle perdue dans les mises à jour? pour ainsi dire, depuis combien de temps le fichier existe-t-il ..?
xyz
1
La page de manuel stat (2) décrit plus en détail quand ces horodatages sont modifiés.
Cristian Ciupitu
35

La réponse de echox est valide mais je souhaite ajouter des informations concernant le temps de création du fichier.

Prise en charge du système de fichiers

Certains systèmes de fichiers prennent en charge une entrée supplémentaire dans l'inode en ce qui concerne l'heure de création (ou l'heure de naissance). Je sais que ext4 prend en charge cette fonctionnalité ainsi que JFS et BTRFS .

Cependant, la plupart des outils et des API n'ont pas encore été mis à jour pour lire ces informations supplémentaires. Donc, même si cela pourrait être là, ce n'est pas accessible.

Par exemple, sur Ubuntu 12.04 LTS, je reçois ce qui suit pour un fichier que j'ai créé aujourd'hui:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

Vous pouvez voir que la fonction statistique la plus récente a un champ de naissance, bien que la sortie semble incorrecte. Et via debugfs, nous pouvons obtenir les informations (crtime car je suis sur le système de fichiers ext4).

support statx

Depuis le noyau 4.11, il existe maintenant un nouvel appel système statx , en plus d’une meilleure prise en charge des systèmes de fichiers Y2038 ou réseau, qui apporte également quelques fonctionnalités supplémentaires comme l’ btimeaccès ou l’heure de naissance (heure de création). Le support pour ext4 devrait être dans la même version 4.11 du noyau.

Des correctifs ont été ajoutés pour prendre en charge ce nouvel appel système dans les versions ultérieures du noyau: par exemple, BTRFS et F2FS dans le noyau 4.13, SMB3 dans 4.14, GFS2 dans 4.15, NFS dans 4.16, etc.

La prochaine glibc fournira un appel de fonction pour interroger cette interface (voir les actualités de Phoronix sur le support de glibc statx ). Nous pouvons donc nous attendre à ce que cette fonctionnalité soit bientôt prise en charge dans l’espace utilisateur.

Huygens
la source
Savez-vous si btime reste intact lorsque les fichiers de Windows (heure de création) sont déplacés vers ext4 et inversement, comme mtime?
paradro
@paradroid désolé je ne connais pas la réponse. Si vous voulez dire sous Linux lors de la copie d'un fichier de NTFS vers ext4, il faut regarder dans le pilote NTFS s'il prend en charge le temps de création. Si vous voulez dire sous Windows, il faudrait chercher dans le pilote ext4 pour Windows.
Huygens le