目的
linux下文件有3个时间的,分别是atime,mtime,ctime。有些博友对这3个时间还是比较迷茫和困惑的,我整理了下,写下来希望对博友们有所帮助。
含义
简名 | 全名 | 中文名 | 含义 |
---|---|---|---|
atime | access time | 访问时间 | 文件中的数据库最后被访问的时间 |
mtime | modify time | 修改时间 | 文件内容被修改的最后时间 |
ctime | change time | 变化时间 | 文件的元数据发生变化。比如权限,所有者等 |
查看
1 | [root@centos7 time]# pwd |
测试
3.1 准备工作
测试前,我们需要先关闭文件系统的relatime特性。这个随后在说,具体操作如下。
1 | [root@centos7 time]# mount -o remount,strictatime /app # 重新挂载我们的/app,并修改文件系统工作在严格atime上,也就是不启用了默认的relatime支持。 |
3.2 读取文件
1 | [root@centos7 time]# stat issue #先获取3个时间 |
通过上面的分析,我们可以看出来,在使用cat读取文件后,文件的atime发生了改变。其他的没有改变。
3.3 修改文件
1 | [root@centos7 time]# stat issue #先获取下3个time |
通过上面的实验,我们可以看出来,写文件操作不会导致atime(访问时间)的修改,但是mtime和ctime会发生修改。mtime修改了我们可以理解的,毕竟我们修改了文件的,
那为何ctime也修改了呢, 仔细可以发现我们文件的大小发生了变化,也就是元数据发生了变化,所以ctime也是要变化的。
3.4 修改文件所有者
1 | [root@centos7 time]# stat issue #先查看下3个time |
通过上面的实验,我们可以看出来,修改了权限后,文件ctime发生了变化。
说说relatime
常用命令对三个time的修改情况我们上面的测试,可以看出来,每次访问文件都会更新atime,这是很耗时的,尤其在web服务器上,大量用户只是访问html页面,完全没有必要修改atime。
从kernel2.6.29开始,文件系统默认集成了一个relatime的属性。
那么啥时候更新atime呢? 有2种情况会更新atime,第一种是mtime比atime新,第二种是上次访问是1天前的了。
常用命令对三个time的修改情况
上面我们做了3个测试,我们也对atime,mtime,ctime有了一定的了解。网上有人已经做了好多测试如下表。
1 | +-------------------------------------------------+ |