一 定义
缩写 | 全称 | 释义 |
---|---|---|
atime | Access Time | 文件最后一次访问(读取或执行)的时间 |
mtime | Modify Time | 文件内容最后一次改变的时间 |
ctime | Change Time | 文件属性最后一次改变(包括权限、链接个数等)的时间 |
二 mtime和ctime的比较
mtime指的是文件内容最后一次被修改后的时间。
比如用echo
将内容重定向至文件,或者用vim
编辑文件内容时,时间会改变。
ctime指的是文件的元数据最后一次被修改的时间,也就是文件的属性信息。
比如更改文件的inode、文件的链接数、文件的权限、文件的属主和属组用户信息等。
需要注意的是,当文件的内容被修改时,首先block会必然改变,因为文件的大小与之前会不一致;其次inode也会随之变化,文件变得不同,属性信息也会发生改变;而inode的变化也会导致ctime的变化,因为元数据发生了改变。
简单总结就是,mtime改变,ctime就一定会改变;
ctime改变,mtime却不一定改变。
三 atime在访问文件后并不一定会修改
使用 ext3 文件系统的时候,如果在使用 mount 命令进行挂载时使用了 noatime 参数,那么就不会更新 atime 的信息。
事实上,无论读取文件,还是复制文件,都需要访问源文件,都会进行频繁的写操作,并且增加了磁盘的IO消耗,会相当消耗系统资源。如果完全禁止atime的修改,则会破坏 POSIX 兼容性。
针对这个问题,Linux 内核 2.6.20 开始为mount引入了一个–relatime选项,并从 2.6.30 开始这一选项默认是开启的。当开启了–relatime选项后,只有当 atime < mtime
或 atime < ctime
或文件的上次访问时间超过 1 天,才会去更新 atime。
上述设置,一方面大幅度减少atime写操作对系统资源的消耗,另一方面降低了对备份软件的影响(某些备份软件需要通过对比 atime、mtime、ctime 的时间来判断是否需要进行备份)。
四 相关操作命令对三个时间的影响
用√
表示时间发生改变,用×
表示不发生改变
命令 | atime | mtime | ctime |
---|---|---|---|
cat | × | × | × |
cp | × | × | × |
mv | × | √ | √ |
chmod | × | × | √ |
chown | × | × | √ |
touch | √ | √ | √ |
> | √ | √ | √ |
>> | √ | √ | √ |
vi、vim(不修改) | × | × | √ |
vi、vim(修改) | √ | √ | √ |
执行可执行文件 | × | √ | × |