linux文件时间参数atime,ctime,mtime

来源:互联网 发布:上汽集团 知乎 编辑:程序博客网 时间:2024/05/16 09:15

linux时间参数

Access(atime):访问时间,指文件最后一次被访问的时间;
Modify(mtime):修改时间,指文件内容最后一次被修改的时间。这里的文件内容指文件内的数据;
Change(ctime):状态修改时间,指文件的属性状态一次被修改的时,比如文件权限、所有者、大小等;

查看文件时间戳命令stat

[root@cloudhost ~]# stat a  File: ‘a’  Size: 0           Blocks: 0          IO Block: 4096   regular empty fileDevice: fd01h/64769d    Inode: 1557836     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2017-09-13 15:07:15.034441767 +0800  #文件访问时间(ctime)Modify: 2017-09-13 15:07:15.034441767 +0800  #文件内容修改时间(mtime)Change: 2017-09-13 15:07:15.034441767 +0800  #文件元数据修改时间(ctime) Birth: -

尝试使用

[root@cloudhost ~]# stat a  File: ‘a’  Size: 0           Blocks: 0          IO Block: 4096   regular empty fileDevice: fd01h/64769d    Inode: 1557836     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2017-09-13 15:07:15.034441767 +0800Modify: 2017-09-13 15:07:15.034441767 +0800Change: 2017-09-13 15:07:15.034441767 +0800 Birth: -[root@cloudhost ~]# cat a   #查看a文件,其他查看命令类似[root@cloudhost ~]# stat a  File: ‘a’  Size: 0           Blocks: 0          IO Block: 4096   regular empty fileDevice: fd01h/64769d    Inode: 1557836     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2017-09-13 15:07:39.892069721 +0800  #访问时间发生改变Modify: 2017-09-13 15:07:15.034441767 +0800Change: 2017-09-13 15:07:15.034441767 +0800 Birth: -

当再次查看时。。。

[root@cloudhost ~]# cat a[root@cloudhost ~]# stat a  File: ‘a’  Size: 0           Blocks: 0          IO Block: 4096   regular empty fileDevice: fd01h/64769d    Inode: 1557836     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2017-09-13 15:07:39.892069721 +0800   #访问时间不变Modify: 2017-09-13 15:07:15.034441767 +0800Change: 2017-09-13 15:07:15.034441767 +0800 Birth: -

说好的最后一次访问时间呢?
通过echo命令在a里加数据…

[root@cloudhost ~]# echo 'welcome to echo '> a[root@cloudhost ~]# stat a  File: ‘a’  Size: 17          Blocks: 8          IO Block: 4096   regular fileDevice: fd01h/64769d    Inode: 1557836     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2017-09-13 15:07:39.892069721 +0800Modify: 2017-09-13 15:14:23.372029181 +0800   #修改文件内容,mtime改变Change: 2017-09-13 15:14:23.372029181 +0800   #文件size(属性)改变,ctime改变 Birth: -

再次查看文件。。。

[root@cloudhost ~]# cat awelcome to echo [root@cloudhost ~]# stat a  File: ‘a’  Size: 17          Blocks: 8          IO Block: 4096   regular fileDevice: fd01h/64769d    Inode: 1557836     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2017-09-13 15:16:45.867896895 +0800   #访问的时间改变Modify: 2017-09-13 15:14:23.372029181 +0800Change: 2017-09-13 15:14:23.372029181 +0800 Birth: -

好吧好吧,为什么会发生这么奇怪的情况。。。

其实
- 当atime > mtime时,访问文件,文件访问时间不变。
- 当atime = mtime时,访问文件,文件访问时间更新。

Linux文件系统的设计正是这么做的,atime(accesstime)不更新是有一些历史原因的,在2.6内核以前,我们每次访问文件,atime都会更新。后来OS发现更新atime的开销很大,尤其是读频繁的环境。所以后来mount退出了一个noatime的选项,来禁止更新atime,再后来为了兼容atime,又增加了一个兼容的选项relaime,只有在mtime(modify time)大于等于atime(Access time)时,才会更新access time,后来这也成为了很多系统的默认设置。所以,这个访问时间atime有时候并不靠谱。

程序员思维图,如下
enter description here

那我们需要修改文件的时间参数应该怎么做呢?
touch命令可以帮到我们,touch命令除了我们常见的创建一堆新文件外,还可以修改时间戳。。。

touch

-a:或–time=atime或–time=access或–time=use 只更改存取时间;
-c:文件不存在时创建文件,修改文件的三个时间到当前时间
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或–time=mtime或–time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
–help:在线帮助;
–version:显示版本信息。

使用方式简单,故不再赘述

参考链接
http://blog.csdn.net/LLZK_/article/details/53932580

原创粉丝点击