关于Linux的命令:touch。
通常,我们都认为该命令是用来创建一个新的文件的,并且我们也是按照这样的方式操作的,如下:

上面的SHELL LOG中,我通过“touch me”创建了一个新的空文件:me。

但事实上,这种对于“touch”的理解是一种误解。
通过“man touch”,你可以看到对于“touch”的定义:
touch – change file timestamps

可以看到,该命令的初衷是修改某个文件的时间戳的。

在Linux中,一个文件有三个时间:
atime,Access Time
mtime,Modified Time
ctime,Change Time

atime记录的是文件最后一次被访问的时间,它会在访问文件的操作出发时被改变。
mtine记录的是文件的内容最后一次被修改的时间。
ctime记录的是文件的属性(元信息)最后一次被改变的时间。

因此,
在对一个文件做访问的时候,会影响atime。
如果变更了文件的内容,会影响atime、mtime。
如果(只是)变更了文件的属性,会影响ctime。

通常,“ls -l”或者“ll”命令,查看到的时间是ctime的值。

某个文件的以上三种时间属性,可以通过以下方式获取:

时间属性,即上述Shell Log中的:Access、Modify、Change,对应的值。

当然,也可以通过“ls”命令的参数查看到以上三种时间属性,如下:

说明:
Access:ls -lu
Modify:ls -l
Change:ls -lc

而“touch”设计的初衷便是修改这三个时间属性的值,并非大家误以为的创建一个新的空文件。

用“touch”修改时间属性:

修改:Access Time。

修改:Modify Time。

仅修改时间而不创建文件
如果文件存在的情况下,你会看到如下情况:

如果文件不存在,你会看到如下情况:

可以看到“touch”,并不是为了创建新的空文件而诞生的指令。

关于ctime,由于上面命令修改了文件本身的时间属性,所以属于变更了文件的元信息,故而,ctime的值为改变时的当前时间。

touch之所以会默认创建一个给定名称的新文件,是因为,在早期,如果提供的目标文件的参数给定的目标文件不存在的时候,touch会出现异常。

所以,touch默认让用户创建新文件,再后来,由于用户养成了创建新文件就会想到“touch”,故而,这种功能被延续下来了。

——————————————————————————————————————————
Finished。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装