Answers:
对于GNU实用程序,完整的文档在该info
页面中,您可以在其中阅读:
-f
忽略 与“触摸”的BSD版本兼容。
请参阅具有历史意义的BSD手册页以进行触摸,在哪里-f
可以强制进行触摸。
如果您查看那些旧BSD的来源,则没有utimes()
系统调用,因此touch
将以读写模式打开文件,读取一个字节,向后查找并再次写入,以更新上次访问和上次修改时间。
显然,你需要两个读取和写入权限(touch
将避免尝试这样做,如果access(W_OK|R_OK)
返回false)。-f
尝试通过暂时将权限临时更改为0666来解决此问题!
0666表示对所有人的读写许可。必须这样,否则(例如,在0600等更严格的许可下仍会允许触摸)可能意味着在该短窗口期间,原本具有对该文件的读或写权限的进程将无法再使用,破坏功能。
但是,这意味着原本无法访问该文件的进程现在很少有机会打开它,从而破坏了安全性。
那不是一件很明智的事情。现代touch
实现不这样做。从那时起,引入了utime()
系统调用,从而允许分别更改修改和访问时间,而不必与文件内容打交道(这意味着它也可以与非常规文件一起使用),并且只需要对此进行写访问。
touch
如果通过了该-f
选项,GNU 仍然不会失败,而只是忽略该标志。这样,为那些旧版本的BSD编写的脚本在移植到GNU系统时不会失败。如今相关性不高。
-f
在Mac OS X中仍然可以使用。(但毫无疑问,至少有57种使用GUI“更好”执行相同功能的不同方式! )
-f
什么也没做。保留它是为了实现历史兼容性(touch
根据的BSD info touch
),以便期望它存在的应用程序不会通过它,并返回一条错误消息,指出它不存在。假设这是GNU coreutils,您可以在源代码中看到它只是执行了break
选项处理开关,而不执行任何操作。
作为一个被忽略的选项,-f
它出现touch
在1992年添加的GNU 命令的第一个版本中(请参阅diff)。看来,至少在FreeBSD v9中,-f
“即使文件权限当前不允许,也要尝试强制更新”(由Sukminder找到,谢谢)。
info
页面说“ 忽略”;与“触摸”的BSD版本兼容。
-f
即使文件权限确实允许在BSD上进行更新,它还是曾经被用来试图强制进行更新。不是在V10中,而是在v9中:freebsd.org/cgi/…(至少是FreeBSD的)。
-f
as选项只是被忽略。也许通过参数解析器进行了修改,仅此而已。