Para las utilidades de GNU, la documentación completa se encuentra en la infopágina, donde puede leer:
-f
Ignorado para compatibilidad con versiones BSD de 'touch'.
Vea las páginas de manual históricas de BSD para el tacto , donde -ffue forzar el toque.
Si observa el origen de esos BSD antiguos, no hubo una utimes()llamada al sistema, por touchlo que abriría el archivo en modo de lectura + escritura, leería un byte, buscaría y volvería a escribirlo para actualizar el último acceso y la última hora de modificación .
Obviamente, necesitabas permisos de lectura y escritura ( touchevitarías intentar hacerlo si se access(W_OK|R_OK)devuelve falso ). -f¡Intenté evitarlo cambiando temporalmente los permisos temporalmente a 0666 !
0666 significa permiso de lectura y escritura para todos. Tenía que ser que, de lo contrario (como con un permiso más restrictivo como 0600 que todavía hubiera permitido el toque ), eso podría significar durante esa breve ventana, los procesos que de otro modo habrían leído o escrito permiso para el archivo ya no podrían , rompiendo la funcionalidad .
Sin embargo, eso significa que los procesos que de otro modo no tendrían acceso al archivo ahora tienen una breve oportunidad de abrirlo, lo que rompe la seguridad .
Eso no es algo muy sensato de hacer. Las touchimplementaciones modernas no hacen eso. Desde entonces, la utime()llamada al sistema se ha introducido, lo que permite cambiar la modificación y el tiempo de acceso por separado sin tener que mezclarse con el contenido de los archivos (lo que significa que también funciona con archivos no regulares) y solo necesita acceso de escritura para eso.
GNU touchaún no falla si se pasa la -fopción, pero simplemente ignora la bandera. De esa manera, los scripts escritos para esas versiones antiguas de BSD no fallan cuando se transfieren a sistemas GNU. No es muy relevante hoy en día.
-fcomo opción simplemente se ignora. Tal vez destrozado el analizador de argumentos y eso es todo.