一 定义
| 缩写 | 全称 | 释义 |
|---|---|---|
| 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(修改) | √ | √ | √ |
| 执行可执行文件 | × | √ | × |
968

被折叠的 条评论
为什么被折叠?



