touch这个命令最常被使用的情况是:

           1>简历一个空文件

           2>将一个文件的时间戳修改为目前的时间

与touch相关的三个时间戳分别是:

           1>access time (atime)

   当一个文件内容被读取时,就会更新这个读取时间。举例,使用cat查看/tmp/mn.txt:

touch命令和三个时间戳_status

使用stat查看该文件的三个时间戳:

touch命令和三个时间戳_mtime_02

显然,我们可以看到atime被更新了

           2>modification time (mtime)

   当文件内容数据被改变时,就会更新这个时间。内容数据是指文件的内容,而不是文件的属性或权限。touch命令和三个时间戳_简历_03

以上是我用vim编辑了mn.txt,之后使用stat查看的结果,mtime被改变了。

           3>status time (ctime)

   当该文件状态改变时,就会更新这个时间,举例,像是权限和属性被更改,都会更新这个时间。

但我们也看到上面的情况,mtime改变了,ctime也变了。这又是为什么呢?我是觉得如果文件的内容改变,一定也会导致文件的属性发生变化,就比如说文件的大小,会随着文件的增删而改变。

   而且我观察到在改变了文件内容之后,mtime和ctime并不完全一致,在后面的秒数上会有微小的差别。


   使用touch命令可以对文件的三个时间戳进行修改:

touch命令和三个时间戳_mtime_04

以上我使用touch命令将mn.txt三个时间戳修改到当前。

   可以分别使用 touch -a 和 touch -m 来改变 atime 和 mtime 。

touch命令和三个时间戳_mtime_05

但我们使用 touch -a 时,会改变文件的访问时间(atime),同时也会改变文件的状态时间(ctime),并且它们完全相同,没有任何差异。

touch命令和三个时间戳_简历_06

我们使用 touch -m 时,会改变文件的修改时间(mtime),同时也会改变文件的状态时间(ctime),并且它们也完全相同,没有任何差异。这与使用vim编辑文件时的情况不一样。

   但不管怎么说,使用 touch -a ,touch -m 以及使用vim对文件进行编辑都是对文件状态进行修改,所以说 ctime 就会改变。

   另外,经过测试,我发现一个有趣的情况,我们来看:

首先我使用vim对mn.txt再次进行编辑:

touch命令和三个时间戳_mtime_07

然后我们使用cat打开这个文件:

touch命令和三个时间戳_mtime_08

使用stat查看文件状态,并且在之后使用vim打开这个文件,注意:不对其做任何编辑操作,退出,也就是说,我只是使用vim打开看了mn.txt这个文件,而没有对其进行编辑操作,我们来看看效果:


touch命令和三个时间戳_access_09

看到了吗?使用vim和使用cat打开文件查看内容的效果是不一样的,使用cat会改变文件的atime,而使用vim查看文件内容是不会改变这个时间戳的。因此,这可以说是一个小小的安全隐患,如果文件权限设置不当就会泄露文件内容,并且不易察觉。

   touch -d:后面可以跟一个指定的时间,而不是用目前的时间:

touch命令和三个时间戳_status_10

三个时间戳均发生了改变,atime 和 mtime 都变成了两天前的时间,而ctime 则记录了当前的时间。

我们也可以使用ll命令(ls -l的别名)来查看:

touch命令和三个时间戳_access_11

       touch -t:后面也可以跟一个指定的时间,但它有格式限制:[YYMMDDhhmm]

touch命令和三个时间戳_touch_12

   所以说,touch -t和touch -d用法类似,都会改变atime和mtime,并且ctime会记录atime 和mtime 变化的时间点!

   透过touch这条命令,我们可以轻易修改文件的时间戳,并且可以建立空文件!不过,即使我们复制一个文件是,复制所有属性,也无法复制ctime这个属性。ctime 记录的就是这个文件状态被改变的时间点。但我们平时应该更加关注的是mtime。而使用ll来查看文件的属性时,所显示的就是mtime:

touch命令和三个时间戳_access_13