Para las utilidades de GNU, la documentación completa se encuentra en la info
pá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 -f
fue forzar el toque.
Si observa el origen de esos BSD antiguos, no hubo una utimes()
llamada al sistema, por touch
lo 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 ( touch
evitarí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 touch
implementaciones 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 touch
aún no falla si se pasa la -f
opció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.
-f
como opción simplemente se ignora. Tal vez destrozado el analizador de argumentos y eso es todo.