Qu'est-ce qui compte comme une modification ou un changement de fichier?

16

Le changement de nom affecte-t-il la modification du fichier ou le temps d'accès? Y a-t-il une liste quelque part de ce qui change à quel moment?

Gilles 'SO- arrête d'être méchant'
la source

Réponses:

9

Renommer met à jour l'heure de changement:

$ mkdir tmp
$ cd tmp

$ echo abc > a
$ stat a
  File: `a'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000 /  zelda   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:06:58.981107444 +0100
 Birth: -

$ mv a b
$ stat b
  File: `b'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  zelda)   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:07:14.893238472 +0100
 Birth: -

L'heure d'accès est mise à jour lors de la lecture du contenu d'un fichier. Modifiez lorsque vous mettez à jour le fichier (l'ouverture pour la modification ne suffit pas pour changer l'heure de modification).

Zelda
la source
La copie et le collage d'un fichier modifient-ils son heure de "modification" sur le nouveau fichier? L'utilisation de Ctrl + X et du collage modifie-t-elle le temps de "changement"?
1
Une copie crée un nouveau fichier avec Modify, Access et Change avec une nouvelle valeur (tout de même). Coller quelque chose dans un éditeur (puis enregistrer) met à jour les trois (Changer avec un horodatage plus tard que les deux autres, bien sûr seulement après avoir enregistré)
Zelda
Je voulais dire utiliser CTRL + x sur le fichier et CTRL + v ailleurs.
Cela utilise les outils de ligne de commande cpet mv, et vipour l'édition. D'autres éditeurs ou votre bureau peuvent gérer la tâche différemment et avoir plus d' horodatages mis à jour.
Zelda
Par exemple, Nautilus ne met pas à jour Access et Modify en utilisant Ctrl + X puis Ctrl + V, seul le changement est différent, commemv
Zelda
9

Une modification affectant le mtime du fichier est un changement des données du fichier: une écriture d'un nombre d'octets différent de zéro, ou une troncature qui finit par modifier le fichier. La création d'un fichier définit également son mtime à la date actuelle. Le simple fait d'ouvrir un fichier en écriture n'affecte pas le mtime, en supposant que le fichier n'est pas créé ou tronqué.

La lecture d'un fichier (si un nombre d'octets différent de zéro est lu) ou l'exécution d'un fichier définit son heure à l'heure actuelle. Le simple fait d'ouvrir un fichier en lecture n'affecte jamais le temps. Sous Linux, ceci est maintenant désactivé par défaut dans la plupart des circonstances; l' atimeoption de montage restaure les mises à jour atime, tandis que l' noatimeoption de montage les désactive complètement.

Les programmes peuvent modifier le mtime et le atime d'un fichier; la commande de base pour ce faire est touch. Certains programmes de copie de fichiers définissent la copie sur le même mtime que l'original, par exemple cp -pou rsync -t.

Un changement affectant le ctime du fichier est un changement des métadonnées du fichier: autorisations, propriétaire, heures, nombre de liens, etc. Renommer un fichier met également à jour son ctime. Les modifications des données du fichier affectent également le ctime, mais la lecture à partir d'un fichier ne modifie pas le ctime même s'il modifie le atime. Il est impossible de modifier le ctime d'une autre manière que de le définir à l'heure actuelle (même root est contraint, mais root peut indirectement définir le ctime en changeant d'abord l'heure du système ou en accédant directement à la partition contenant le système de fichiers).

Gilles 'SO- arrête d'être méchant'
la source
1

Une observation empirique supplémentaire non mentionnée par les autres réponses:

L'ouverture du fichier pour l'écriture avec O_TRUNCchange le mtime même si le fichier était à l'origine vide.

Cela semble être le cas au moins sur ext3 sous Linux 3.10.

Arseniy Alekseyev
la source