Für GNU-Dienstprogramme befindet sich die vollständige Dokumentation auf der info
Seite, auf der Sie lesen können:
-f
Ignoriert; für die Kompatibilität mit BSD-Versionen von `touch '.
Siehe historischen BSD Manpages für Touch , wo -f
war zu zwingen , die Berührung.
Wenn Sie sich die Quelle dieser alten BSDs ansehen, gab es keinen utimes()
Systemaufruf. touch
Öffnen Sie die Datei im Lese- / Schreibmodus, lesen Sie ein Byte, suchen Sie sie zurück und schreiben Sie sie erneut, um den letzten Zugriff und die letzte Änderungszeit zu aktualisieren .
Offensichtlich brauchten Sie sowohl Lese- als auch Schreibberechtigungen ( touch
würden es vermeiden, dies zu tun, wenn Sie access(W_OK|R_OK)
false zurückgeben ). -f
habe versucht, das zu umgehen , indem ich die Berechtigungen vorübergehend auf 0666 ändere !
0666 bedeutet Lese- und Schreibberechtigung für alle. Es musste sein, dass ansonsten (wie bei einer restriktiveren Berechtigung wie 0600, die das Berühren noch erlaubt hätte ) Prozesse, die ansonsten Lese- oder Schreibberechtigung für die Datei hätten, während dieses kurzen Fensters nicht mehr möglich waren , Funktionalität zu brechen .
Dies bedeutet jedoch, dass Prozesse, die sonst keinen Zugriff auf die Datei hätten, jetzt eine kurze Gelegenheit haben, sie zu öffnen, wodurch die Sicherheit verletzt wird .
Das ist nicht sehr sinnvoll. Moderne touch
Implementierungen machen das nicht. Seitdem wurde der utime()
Systemaufruf eingeführt, der es ermöglicht, Änderungen und Zugriffszeiten separat vorzunehmen, ohne sich mit dem Inhalt der Dateien vermischen zu müssen (was bedeutet, dass er auch mit nicht regulären Dateien funktioniert) und nur dafür Schreibzugriff benötigt.
GNU touch
schlägt immer noch nicht fehl, wenn die -f
Option übergeben wird, sondern ignoriert einfach das Flag. Auf diese Weise schlagen Skripte, die für diese alten BSD-Versionen geschrieben wurden, bei der Portierung auf GNU-Systeme nicht fehl. Heutzutage wenig relevant.
-f
als Option nur ignoriert wird. Vielleicht durch das Argument Parser verstümmelt und das wars.