Est-il possible d'avoir un fichier dont la date de modification est antérieure à sa date de création? Quelles actions provoqueraient cet événement?
Est-il possible d'avoir un fichier dont la date de modification est antérieure à sa date de création? Quelles actions provoqueraient cet événement?
Réponses:
Considérez une archive .tar qui est extraite. En règle générale, les fichiers extraits auront un horodatage de dernière modification attribué à partir du contenu de l'archive (qui est généralement dans le passé, sauf si vous êtes un voyageur du temps). En ce qui concerne le système de fichiers, ces fichiers viennent tout juste d'être créés.
Il existe également des utilitaires pour changer l'heure de modification des fichiers existants, sous Linux par exemple c'est la commande tactile .
cp -p
et les choses qui l'imitent comme rcp -p
et scp -p
, ainsi rsync
qu'avec -t
ou -a
, prend le modtime de la source.
Si vous créez un fichier à partir de zéro, il obtient une heure de création de "maintenant" et une date de modification de "maintenant". Imaginez maintenant copier ce fichier sur un autre lecteur. Windows conservera l'heure de modification, mais l'heure de création de ce fichier sera définie à l'heure à laquelle vous avez copié le fichier sur ce lecteur (c'est-à-dire l'heure à laquelle le fichier a été créé sur ce lecteur). Aussi simple que cela.
C'est en fait correct:
Sous Windows, il est très facile de définir (falsifier, si vous voulez) les heures de création et de modification d'un fichier. Vous n'avez pas besoin de changer l'horloge de l'ordinateur; vous n'avez même pas besoin d'un accès administrateur local. Tout ce dont vous avez besoin est un accès en écriture au fichier en question.
Pour définir l'heure de création d'un fichier avec PowerShell à l'aide de SetCreationTime
:
[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))
Pour régler l'heure de la dernière modification à l'aide de SetLastWriteTime
:
[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))
Sous Linux, vous pouvez facilement changer l'heure de la dernière modification d'un fichier avec le -d
drapeau de touch
, comme indiqué dans cette réponse Ask Ubuntu . Il n'y a pas vraiment de notion de date de création pour les fichiers sur les systèmes de fichiers Linux ( lecture supplémentaire sous Unix et Linux ).
La chose la plus importante à noter ici est que le temps de modification du fichier n'est pas vraiment spécial - il est stocké comme toutes les autres données. Il n'y a aucun moyen de dire quand les données ont été en fait la dernière écriture ou lues à partir.
De là, nous pouvons voir qu'il est toujours possible (à l'exclusion des supports à écriture unique comme un CD) d'aller directement modifier les bits sur un lecteur qui stockent la dernière heure modifiée, ou même l'heure de création.
Plus concrètement, cela est également possible à partir de systèmes d'exploitation communs, comme d'autres réponses l'ont noté. Sous Windows, cela est fourni par la SetFileTime
fonction WinAPI , et vous pouvez le faire avec utime
sous Linux. Des outils comme touch
construire au-dessus de ces API.
L'utilisation légitime la plus courante de ces API est de conserver le temps de modification, par exemple lors de la copie de fichiers, de leur extraction à partir d'archives, etc.
D'après mon expérience, cela s'est produit lorsqu'un ou plusieurs ordinateurs ont été utilisés pour modifier le fichier et que l'un d'eux a la mauvaise heure système. Les trois causes les plus courantes de l'heure système erronée, sans ordre particulier, sont: