Linux系统文件有三个主要的时间属性,分别是ctime(change time, 而不是create time), atime(access time), mtime(modify time)。后来为了解决atime的性能问题,还引入了一个relatime的属性。

ctime:change time。最后一次文件或目录状态(原数据,即属性)改变的时间。

如:记录该文件的inode节点被修改的时间。touch命令除了-d和-t选项外都会改变该时间。而且chmod,chown等命令也能改变该值


mtime:modify time。最后一次修改文件或目录的时间。

mtime和ctime的区别在于,只有修改了文件的内容,才会更新文件的mtime,而对文件更名,修改文件的属主等操作,只会更新ctime。

如: 对文件进行mv操作,mtime不变,ctime更新;编辑文件内容,mtime和ctime同时修改。其他操作的影响,可以自己试验。但是我发现对文件执行touch操作,会同时修改mtime和ctime,所以具体修改哪个时间,还取决于不同命令自己的实现。


atime:access time。最后一次访问文件或目录的时间。

如cat操作,而ls操作是不会更新的。


        对于文件:

    当修改mtime时,ctime必须随着改变.因为文件大小等都属性;有人说说atime也一定会改变,要想修改文件必须先访问;其实是不对的,不必访问文件就能修改其内容:如:#echo “This is a test !” >> /etc/issue,issue文件内容会变,但并没有访问文件,所以atime并没有改变.

     

    对于目录:

    访问一个目录其atime改变,mtime ,ctime不变;修改一个目录:在一个目录下touch一个文件,

mtime与ctime会改变,atime不一定会变;


可以通过stat来查看文件的mtime,ctime,atime等属性:stat filename

也可以通过ls命令来查看:

    ls -lc filename 列出文件的 ctime

    ls -lu filename 列出文件的 atime

    ls -l filename 列出文件的 mtime


从kernel2.6.29开,还默认集成了一个relatime的属性。这个功能我个人理解是为了解决atime的兼容性问题。因为在文件读操作很频繁的系统中,atime更新所带来的开销很大,所以很多SA都在挂装文件系统的时候使用noatime属性来停止更新atime。但是有些程序需要根据atime进行一些判断和操作,所以Linux就推出了一个relatime特性。