Linux时间参数atime、ctime、mtime

在linux下每个文件(目录)都会记录很多时间参数,主要有三个关于文件变动的时间——mtime、atime、ctime,它们储存与inode数据结构”中,使用stat filename命令可以查看它们。

1.ctime

change time:当文件(目录)的“状态”被改变时,这个时间会被更新,如文件的权限、拥有者、所属组属性、大小等。
如下:
这里写图片描述

2. mtime

modification time:当文件(目录)的“内容数据”被修改时,这个时间会更新,权限的修改不会影响该时间。
注意:对于目录来讲,它的内容是该目录路径下的文件(目录)名列表,这也就意味着,当你在某个目录下创建新的文件(目录)时,该目录的mtime会改变。
如下:
这里写图片描述

细心的小伙伴可能会发现,我们只改变了文件的内容,但是文件的ctime也改变了,这是因为当改变了文件内容后,文件的大小属性也改变了,于是ctime也会随之改变。

3. atime

access time:获取时间,即当文件的“内容被访问读取”时,这个时间会被更新,比如cat某文件时,该文件的atime会改变。
不过这是一个有争议的时间参数,在某些Linux版本,当你使用cat、more读取文件内容后,atime并不会更新,比如我刚才在自己的Linux上测试时,cat文件后,它的atime并没有随之改变,为什么呢?

1. atime未更新原因

想想你平常在使用Linux时使用比较频繁的命令是什么,我想lscat使用的应该很频繁了吧。那么当你每ls一次,文件的atime都会更新一次,除此之外,系统本身还有大量的文件访问,这些访问造成的atime更新如果都被写入到磁盘中,这样做会带来几个问题:
1. 大量的文件访问,会导致频繁的将atime写入磁盘,浪费时间,降低系统的性能。
2. 这样做本身也是特别费电。

说道这儿有人可能会问,为什么ctimemtime为什么会即时更新呢?
原因是,在Linux系统中,我们往往最关心的是文件的修改时间,比如有人告诉你上周五完成的一个程序有个小bug,于是你就通过mtime或者是ctime定位找到上周五修改过的文件,你当然不会通过atime去找了,因为你可能昨天还ls过它。
所以,每次读取文件后更新它的atime好像并没有这个必要,一是我们平常并不会经常使用这个时间参数,二是频繁的更新它会导致系统的性能的损耗。于是Linux内核的开发人员为了提高性能,在2.6.30版本之后,修改了atime的更新机制。我查看了自己的版本,果然:
这里写图片描述

2. atime会更新的情况

那么在2.6.30之后的版本,只有在下列几种情况下,才会更atime
1. atime小于ctimemtime时。举个例子:某文件的atime11:02,而mtime是同一天的12:03,那么,当你cat改文件后,它的atime会更新。
atime大于ctime的情况:
这里写图片描述

atime小于ctime的情况:
这里写图片描述

  1. 当前读取时间与上次间隔大于24小时。
  2. 如果将分区mount的挂载的时候指定采用非relatime方式(默认采用relatime方式),如strictatime.
    补充:在OS启动的时候,将各个分区挂载到不同的目录,在挂载(mount)的参数中采用strictatime,表明及时更新atime。在2.6.30之后mount添加了”relatime”和”strictatime”两个选项,详细的可以通过”man mount”查看。

3. 如何让你的atime即时更新

那么如果你想让你的Linux文件的atime及时更新,要怎么做呢?
OS启动的时候会读取/etc/fstab文件,在你的Linux中修改etc/fstab文件,添加strictatime选项:
这里写图片描述

然后重启你的OS,再去试试,是不是只要读取文件内容,它的atime就会改变呢!

参考资料

  1. http://stackoverflow.com/questions/15547649/is-it-necessary-to-enable-atime-in-etc-fstab-to-get-the-correct-last-accessed
  2. http://www.h-online.com/open/news/item/Kernel-Log-What-s-coming-in-2-6-30-File-systems-New-and-revamped-file-systems-741319.html

【作者:果冻 http://blog.csdn.net/jelly_9

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值