在Windows中创建一个文件都会有相应的创建时间,修改时间,访问时间来记录文件的一些属性。在Linux中也不例外,文件也有三个时间来记录文件的变动,这三个时间分别是Modification time (修改时间)、Change time(状态改动时间)、Access time(访问时间)。下面我们就来了解一下这几个时间。
(1)初识三个文件时间
Modification time (mtime):当该文件的『内容数据』变更时,就会更新这个时间! 『内容数据』指的是文件中记录的内容,而不包括文件属性和权限等!
Change time (ctime):当该文件的『状态 (status)』改变时,就会更新这个时间,举例来说, 像是文件权限、属性、inode号等被更改了,都会更新这个时间。
Access time (atime):当我们访问该文件时,就会更新这个时间为最后一次访问该文件的时间 。 当我们使用 cat 、more、less等命令读取文件信息的时候,就会更新 atime 了。
(2)查看时间
我们可以使用 stat 这个命令来查看文件的三个时间:
这个时候我们只创建了文件,因此atime,mtime,ctime是相同的,都记录的是文件的创建时间。
也可以用 ll 或ls -l --time=atime或着ls -l --time=ctime来单独查看这三个时间,如下:
(3)三个时间的变动情况
echo命令可以在不改变atime的情况下向文件中写入内容
cat命令查看文件内容只改变atime
chmod命令改变文件的访问权限只改变ctime
(4)touch命令与三个时间的关系
1、 touch的功能
touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间。
2、touch的命令参数
-a 或--time=atime或--time=access或--time=use 只更改存取时间。
-c 或--no-create 不建立任何文档。
-d 使用指定的日期时间,而非现在的时间。
-m 或--time=mtime或--time=modify 只更改变动时间。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t 使用指定的日期时间,而非现在的时间。
2.1 -a参数
touch -a 命令本来修改的是atime,但是ctime却也随之改变,为什么呢?这是因为touch命令不管进行什么操作都会改变文件的inode号,因此进行touch命令后,ctime一定会改变。(touch -m 命令也是同样的道理)
2.2 -c参数
2.3 -d参数
修改时间atime和mtime为指定时间,而ctime则更改为最新时间。
2.4 -m参数
touch -m命令本质只改变mtime,ctime改变与 -a 命令原因相同。
2.5 -r 参数
更新tmp.1的时间戳与tmp.2相同
2.6 -t 参数
值得说明的是:
这里touch -t 使用指定的时间值 time 作为指定文件相应时间戳记的新值.此处的 time规定为如下形式的十进制数:
[[CC]YY]MMDDhhmm[.SS]
这里,CC为年数中的前两位,即”世纪数”;YY为年数的后两位,即某世纪中的年数.如果不给出CC的值,则touch 将把年数CCYY限定在1969--2068之内.MM为月数,DD为天数,hh 为小时数(几点),mm为分钟数,SS为秒数.此处秒的设定范围是0--61,这样可以处理闰秒.这些数字组成的时间是环境变量指定的时区中的一个时间。由于系统的限制,早于1970年1月1日的时间是错误的。