在linux下使用stat命令可以详细查看一个文件的相关属性,今天就其中的三个时间点属性(atime,ctime,mtime)来重点详谈!
先来解释这三个与文件有关的时间点属性:
Access time(atime):access time是文档最后一次被读取的时间。因此阅读一个文档会更新它的access时间,但它的modify时间和change时间并 没有变化。cat、more 、less、grep、tail、head、vi、vim、nano、touch这些命令都会修改文件的acces间。
Modifiy time(mtime):Modifiy time是文件内容被修改的时间,文件本身的内容被修改,这个时间就会被修改
Change time( ctime):change time是文档的索引节点(inode)发生了改变,(通过chmod、chown命令修改一次文件属性)。(比如文件更名、写入文件、位置、用户属性、组属性、权限值、内容、链接设置等随 Inode 的内容更改而更改的)
附图如下:
1
通过touch命令新建文件ftime ,再利用stat命令查看文件详细信息 箭头所指就是我们所说的三个时间点。通过cat命令查看文件内容,可以发现只有Access(Access time)发生了变化,而其他的两个时间点均未发生变化。因为cat是访问文件内容,这个时间点记录的最后一次访问时间。
2
用chmod(修改文件权限命令)改变文件的权限 ,可以发现Change(Change time)改变了,而其它两个均没有变化,因为我们改变了文件状态--权限,这个时间点记录的是inode索引点(记录文件属性-权限,位置等)。
3
那么ls所显示的时间是什么呢?此时用ls -l 查看文件可以发现,显示时间是创建文件时间,也是到目前为止,没有被改变的时间。那就是Modifiy time(mtime)。因为还没有修改文件内容,所有这个时间没改变
4
使用vim编辑器来改写ftime的内容,可以发现三个时间都发生了变化。--分析原因:更改文件的内容即会更改 mtime 和 ctime,(但是文件的 ctime 可能会在 mtime 未发生任何变化时更改 - 在权限更改,但是文件内容没有变化的情况下)Ctime改变原因必然是访问了该文件,所以Access时间会发生改变,Change发生改变的原因---改写了文件内容那么此文件的inode结点所存储的文件信息必然发生改变,所以这个时间发生了改变。
二
而touch命令可以改变文件的时间,具体内容可以用man命令查看touch的帮助文档,如下图:可以发现它的作用除了新建文件外还可以-----将每个文件的访问时间和修改时间改为当前时间。
用touch命令修改ftime文件,因为ftime已经创建了,那么此时将更新文件时间为当前时间:可以发现三个时间都发生了改变。
当然也可以通过修改touch命令的参数来修改文件时间比如-m -t选项:可以发现通过-t改变了atime和mtime时间,ctime时间并没有变化。