De man touch
:
-f (ignored)
Pero no entiendo lo que se entiende por ignorado .
He intentado lo siguiente:
$ ls -l file
-rw-rw-r-- 1 pandya pandya 0 Mar 20 16:17 file
$ touch -f file
$ ls -l file
-rw-rw-r-- 1 pandya pandya 0 Mar 20 16:18 file
Y notó que a pesar de eso cambia las marcas de tiempo -f
.
Entonces, quiero saber qué -f
significa o qué hace.
-f
como opción simplemente se ignora. Tal vez destrozado el analizador de argumentos y eso es todo.Respuestas:
Para las utilidades de GNU, la documentación completa se encuentra en la
info
página, donde puede leer: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, portouch
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 seaccess(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, lautime()
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.fuente
-f
todavía funciona en Mac OS X. (¡Pero sin duda hay al menos 57 formas diferentes de realizar la misma funcionalidad "mejor", usando la GUI! )-f
no hace nada. Se mantiene por compatibilidad histórica (con BSDtouch
segúninfo touch
), para que las aplicaciones que esperan que exista no lo pasen y reciban un mensaje de error que dice que no existe. Suponiendo que se trata de coreutils de GNU, puede ver en la fuente que esto simplemente eliminabreak
el cambio de procesamiento de opciones sin hacer nada.Como una opción ignorada,
-f
está presente desde la primera versión deltouch
comando GNU agregado en 1992 ( ver diff ). Parece que, al menos en FreeBSD v9,-f
"intenta forzar la actualización, incluso si los permisos del archivo no lo permiten actualmente" (como encontró Sukminder, gracias).fuente
info
la página dice Ignorado; para compatibilidad con versiones BSD de 'touch'.-f
se / se usó para intentar forzar la actualización incluso si los permisos de archivo lo permitieron en BSD. No en V10, pero v9: freebsd.org/cgi/… (de FreeBSD al menos).Siempre que vea "la opción X se ignora" en --help output o en una página de manual, eso significa que el programa acepta la opción X - no obtiene un error de sintaxis - pero no tiene ningún efecto. El programa hace lo mismo que hubiera hecho en ausencia de la opción.
Como demuestran las otras respuestas, esto se hace por compatibilidad con versiones anteriores. Una opción solía tener algún efecto, lo que sea que hizo ya no es útil, y hacer lo mismo independientemente de la opción es el comportamiento de compatibilidad correcto.
fuente
Al mirar el comentario en el código fuente histórico , línea 22:
Se pretendía ignorar la opción -f desde el lanzamiento inicial de Jim Meyering.
Y la instrucción switch para manejar opciones tiene un caso explícito (líneas 150/151) para no hacer nada:
Es notable lo que motivó a los siguientes autores desde 1992 a mantener esta opción ignorada. ¿Tal vez hay un escenario de uso que requiere la opción -f y se rompe?
fuente