Sous Linux (utilisant actuellement le système de fichiers ext4), comment vérifier rapidement si le contenu d'un fichier a été modifié sans lire aucun de ses contenus?
La stat
commande est-elle une approche recommandée? Je fais actuellement
$ stat --format "%Y" hello.txt
et plus tard, je peux vérifier si la même commande donne la même sortie. Si c'est le cas, je conclus que hello.txt n'a pas changé.
Mon sentiment est que l'on veut ajouter plus de paramètres pour être encore plus sûr. Par exemple, l'ajout de la taille du fichier, du nom du fichier, etc., fournirait-il une "empreinte" encore meilleure du fichier?
À ce sujet, je me souviens qu'un volume TrueCrypt que j'avais une fois était toujours ignoré par mon programme de sauvegarde incrémentielle, peut-être parce que TrueCrypt s'est assuré de ne laisser aucun changement de métadonnées. Je suppose qu'il est en effet possible de modifier toutes les données retournées par stat
, donc il ne peut pas être garanti de reprendre à chaque modification possible du fichier?
la source
md5sum filename
?md5sum
ou toute sorte de somme de contrôle lit le contenu du fichier. Je ne veux pas faire ça car c'est beaucoup trop lent pour mes besoins.ls -t
triera le contenu d'un répertoire par heure de modification.Réponses:
Si vous souhaitez détecter si un fichier a été modifié par des moyens normaux (le modifier dans une application, extraire une nouvelle version d'un système de contrôle de révision, le reconstruire, etc.), vérifiez si son heure de modification (mtime) est passée de le dernier chèque. C'est ce que
stat -c %Y
rapporte.L'heure de modification peut être réglée par la
touch
commande. Si vous souhaitez détecter si le fichier a changé de quelque manière (y compris l'utilisation detouch
, extraire une archive, etc.), vérifiez si son temps de changement d'inode ( ctime ) a changé depuis la dernière vérification. C'est ce questat -c %Z
rapporte. Le ctime ne peut être usurpé que par l'administrateur système (et même alors, uniquement par des moyens indirects: en changeant l'horloge du système, ou en accédant directement au disque, en contournant le système de fichiers).la source
La commande stat n'a qu'une résolution d'une seconde. Donc, si le fichier a été modifié deux fois dans la même seconde, vous pourriez manquer une modification. Les systèmes de fichiers plus récents comme ext4 fournissent des horodatages de résolution plus élevée en nanosecondes, mais certains des anciens outils n'ont pas encore rattrapé leur retard.
Il est également possible pour d'autres programmes de définir une heure de modification arbitraire. Vous pouvez voir comment cela peut se produire via la commande tactile.
Si vous êtes préoccupé par l'une de ces deux possibilités, ce ne serait pas une mauvaise idée de regarder également la taille du fichier. C'est ce que fait rsync lorsqu'il recherche des fichiers modifiés.
la source
Ce que vous avez, c'est la bonne méthode. La seule raison de l'échec serait que le système de fichiers ne se met pas à jour correctement - auquel cas vous vous retrouverez avec tout un tas de problèmes plus graves.
Bien sûr, je suppose qu'une personne possédant les bonnes connaissances et un accès root à un système où la partition est accessible pourrait être en mesure de modifier les informations pour donner l' impression que le fichier n'a pas été modifié. Cependant, dans ce cas, ils se seraient sûrement assurés de faire de même avec la taille, etc.
la source
Je rends l'empreinte plus détaillée.
J'ai créé une petite fonction wrapper qui génère une sortie identique pour les versions MacOS / BSD et GNU de
stat
(détecte également la version installée par Homebrew avec ung
préfixe).La
init
fonction est appelée une fois lors de l'initialisation du script etgetFileStatus
peut être appelée à plusieurs reprises sans surcharge de détection.la source