Für GNU-Dienstprogramme befindet sich die vollständige Dokumentation auf der infoSeite, 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 -fwar 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 ( touchwürden es vermeiden, dies zu tun, wenn Sie access(W_OK|R_OK)false zurückgeben ). -fhabe 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 touchImplementierungen 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 touchschlägt immer noch nicht fehl, wenn die -fOption ü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.
-fals Option nur ignoriert wird. Vielleicht durch das Argument Parser verstümmelt und das wars.