1.从命令看时间
在linux下,我们可以去查看一个文件的三个时间,比如:对于test.c文件我们可以查看时间,使用命令
stat查看
stat test.c
在这里我们得到以下信息。
通过上述信息,我们可以看到有许多信息,接下来,对于这三个时间,我们进行一番讲解。
2.深入理解三个时间
atime(Access time):当我们去访问这个文件,这个时间会被改变,时间就是最后一次我们访问的时间,例如:我们使用cat或者more来读取这个文件。
mtime(Modify time):这里所说的就是文件内容最后的修改时间,不涉及权限。
ctime(Change time):这里所说的改变是改变inode中的信息,比如说文件的权限,所有者,所有组等等信息。
我们首先来创建三个文件
在这里,默认情况下,我们所显示出来的时间是系统的mtime。
如果想要查看atime和ctime,可以这样操作:
这样,我们就可以通过上述的两条命令来查看ctime和atime。(由于上述文件只进行了创建,所以这个时候,三个文件的三个时间都是一样的)
接下来,我们对三个时间的改变进行验证。
首先我们对first.txt改变mtime,只需要修改文件内容就好了
然后我们对于first文件,我们进行操作,cat访问它,查看它的atime
所以,可以知道atime的性质了
接下来,验证一下ctime。通过last.txt验证
3.关于三个时间之间的联系
其实如果当你把这三种都进行一次测试以后,就会发现一些联系,就是当你去做一些操作,改变了一个时间以后,也可能影响到了另外的时间。
比如说我们这么来看。
从这点,我可以这样推测,我在给last.txt当中添加文件的时候,mtime发生了变化,这个时候inode当中的信息size也发生了变化,所以ctime也会改变。
接下来我们测试修改ctime,查看其他是否修改我们测试last.txt
最后我们测试修改atime
通过上述步骤我们就对三个时间之间的关系有了一些了解。
另外。在练习的步骤中我发现一个问题,就是对于atime当你more一次以后,更新了时间,再次进行more,这个时间是不会更新的。
这个行为经过搜素说明是和内核的行为有关,atime更新少,使得性能更加高效。
4.touch命令和三个时间的关系
这个命令就是touch
touch有两个功能,一个是用来创建新的文件,另外的一个功能就是把已经存在的文件时间变为系统当前的时间,把数据原封不动的保存下来。
-a:或--time=atime或--time=access或--time=use 只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。
首先touch -a
所以可以看到 -a主要是更改的atime,当atime改变以后,文件的状态发生了改变,所以ctime也发生了改变。
然后是touch -m
这个时候的修改了mtime。
为什么ctime都发生了改变呢?
其实这个很好解释当我们对这个文件touch以后无论怎么样,都改变了这个文件的inode的信息,所以,ctime在touch以后是肯定要改变的。
另外的touch -t和touch -d可以改变两个时间到一个指定的时间,只不过格式的要求是不同的。
5.总结
所以最后关于改变时间的总结,
当你读取文件,只会改变atime
当你变更文件内容,会改变ctime和mtime
当你改变了权限与inode的其他相关属性,会改变ctime
我们通过touch可以修改三个时间。只要修改了,ctime是一直会变的。