touch如果该文件不存在,则创建一个新的空文件,因为这正是设计目的。该实用程序必须包含代码以专门处理这种情况。该实用程序出现在Unix V7中;其手册对此进行了描述:
touch —文件的最后修改日期
touch尝试设置每个文件的修改日期。这是通过从文件读取字符并将其写回来完成的。如果** file *不存在,除非-c指定了选项,否则将尝试创建它。
(我不知道touch如果文件为空该怎么办。基础系统调用稍后出现。)
我不确定为什么touch要设计成使文件存在,但是我怀疑是因为make。为什么要将文件的修改时间设置为当前时间?在某些情况下,将修改时间设置为特定时间可能很有用,但是该功能后来出现了,原始功能touch只能将修改时间设置为当前时间。这样做的原因是重新运行make依赖于该文件的规则。
也就是说,假设您有一个文件foo和一个makefile,该文件声明了bar要从中生成命令foo。当您键入时make bar,将执行并bar创建命令。如果bar存在并且比foo,make bar则不做任何事情,因为make假定bar已经生成了。但是,如果bar早于foo,则使之认为bar不是最新的,需要重新生成。
但是,如果生成的规则bar已更改怎么办?然后,您有两个选择:
rm bar; make bar
touch foo; make bar
您可能需要foo存在才能生成bar,否则该命令通常将不起作用。
该make实用程序中还存在“触摸”术语:make -t bar只会假装运行命令,也就是说,它将修改时间设置bar为当前时间,而不实际运行要生成的命令bar(如果您认为的更改foo不应影响bar)。touch因此,该实用程序是该make -t功能的独立版本。
touch /forcefsck一个空文件创建该文件,/forcefsck以强制在下次重新启动时检查文件系统是否存在错误。文件本身不需要包含任何内容,只需要存在即可。没有touch,我需要使用vi或nano保存空白文件。使用起来更快touch。