我的问题与其说是计算机科学问题,不如说是词源学问题。
该命令touch
更改文件访问和修改时间。
“触摸”代表什么?
答案1
事实并非如此代表任何事物;它不是缩写或首字母缩写。这是一个动词。
当您touch
创建文件时,您正在“在其上添加新的指纹”,更新其上次修改日期(或者如果它尚不存在则创建它)。
答案2
正如 DopeGhoti 所说,将时间戳更新为当前时间非常符合英语单词的语义。人们通常所说的“接触”内存中的数据意味着访问它(例如“这个函数接触了 2GB 的数据,因此它破坏了 CPU 的缓存”)。该touch(1)
命令的存在是为了以对元数据产生影响的方式触摸文件,而不产生其他影响。
它还具有将时间/日期元数据设置为当前时间以外的其他选项,在这种情况下,语义含义不再真正适用。 (例如,touch -r reference_file /tmp/foo
将 mtime 和 atime 设置为与参考相同)。
有点相关:
如果您好奇,GNU coreutilstouch(1)
实现使用以下系统调用序列将时间戳更新为当前时间:
$ strace touch /tmp/foo
...
open("/tmp/foo", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
dup2(3, 0) = 0
close(3) = 0
open
withO_CREAT
实现了 create-if-missing 行为。省略O_TRUNC
会保留现有内容,就像>> /tmp/foo
会的那样。 dup2
将 mtime、atime 和 ctime 三个全部更新为当前时间。 (仅open()
/close()
不会影响时间戳)。
要将时间设置为“现在”以外的时间,它会执行相同的顺序,然后使用utimensat(0, NULL, ...)
设置 stdout 引用的文件的时间(因为它将该文件的 fd 复制到 fd0)。