Pour les utilitaires GNU, la documentation complète se trouve dans la info
page, où vous pouvez lire:
-f
Ignoré; pour la compatibilité avec les versions BSD de `touch '.
Voir les pages de manuel BSD historiques pour le toucher , où -f
devait être forcé le toucher.
Si vous regardez la source de ces anciens BSD, il n'y a pas eu d' utimes()
appel système, donc touch
ouvrez le fichier en mode lecture + écriture, lisez un octet, recherchez et réécrivez-le afin de mettre à jour le dernier accès et la dernière modification .
De toute évidence, vous aviez besoin d' autorisations de lecture et d' écriture ( touch
évitez d'essayer de le faire si access(W_OK|R_OK)
renvoyé faux ). -f
essayé de contourner cela en modifiant temporairement les autorisations temporairement en 0666 !
0666 signifie la permission de lire et d'écrire pour tout le monde. Il devait en être autrement (comme avec une autorisation plus restrictive telle que 0600 qui aurait encore permis le toucher ) qui pourrait signifier pendant cette courte fenêtre, les processus qui auraient autrement lu ou écrit l'autorisation sur le fichier ne pourraient plus , rupture de fonctionnalité .
Cela signifie cependant que les processus qui n'auraient pas autrement accès au fichier ont maintenant une courte opportunité de l'ouvrir, ce qui brise la sécurité .
Ce n'est pas une chose très sensée à faire. Les touch
implémentations modernes ne font pas cela. Depuis lors, l' utime()
appel système a été introduit, permettant de changer la modification et le temps d'accès séparément sans avoir à se mêler au contenu des fichiers (ce qui signifie qu'il fonctionne également avec des fichiers non réguliers) et n'a besoin que d'un accès en écriture pour cela.
GNU touch
n'échoue toujours pas si l' -f
option est passée , mais ignore simplement le drapeau. De cette façon, les scripts écrits pour ces anciennes versions de BSD n'échouent pas lorsqu'ils sont portés sur des systèmes GNU. Pas très pertinent de nos jours.
-f
option est simplement ignorée. Peut-être déformé par l'analyseur d'arguments et c'est tout.