博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux文件的三个时间详解
阅读量:4142 次
发布时间:2019-05-25

本文共 1378 字,大约阅读时间需要 4 分钟。

       转载地址:http://blog.csdn.net/u012948976/article/details/50503052

一、linux文件三个时间的查看

下使用命令stat获取文件的三个时间,如下

这里写图片描述

各时间的含义

时间名称 简称 中文名称 含义 linux 命令 备注
access time atime 访问时间 最后一次访问文件或目录的时间 ls -lu filename 注意,访问时间的更新并不是实时的,详见下一小节
modifytime mtime 修改时间 最后一次修改文件或目录的时间 ls -l filename 对文件内容修改一次便会更新该时间。
changetime ctime 改变时间 更改文件的属性的时间 ls -lc filename 比如使用chmod命令更改文件属性,或者执行其他命令时隐式的附带更改了文件的属性若文件大小等

二、文件访问时间的更新策略

有时候我们会发现,即是访问了文件,该文件的访问时间也不会变,如下,这里写图片描述

想要了解造成上述现象的原因,需回顾kernel更新文件访问时间的策略,其策略经过了三个发展阶段。

  1. 初始阶段 
    linux总是实时更新访问时间的,但这会涉及到大量的写磁盘操作,严重影响到linux性能。

  2. 第二阶段 
    考虑到1的缺陷,可以在挂载文件系统时使用noatime属性来停止更新atime。但这会对许多应用程序造成影响,比如邮箱,备份软件,时间同步工具…

  3. 第三阶段 
    综合1,2,现在的linux使用了折中方案,挂载文件系统时使用的默认属性为relatime。其更新策略为:当满足以下任一条件时才更新访问时间,

    • 访问时间早于修改时间或改变时间
    • 距离上次更新时间间隔大于24h

根据上述更新策略,当访问时间大于修改时间和改变时间时,且距离上次更新时间小于24h时,访问时间不再更新,这就是造成上述更新时间不变的原因。


三、访问时间早于修改时间的解释

有时候,我们会发现某一文件的访问时间甚至比修改时间还要早,如下所示, 
这里写图片描述

这是因为在修改文件的操作中,有的会访问到该文件,有的不会。

  • 修改文件示例1(同时访问该文件) 
    比如,使用命令vim file修改文件,同时也访问了该文件。所以,修改完后首先更新文件的修改时间,接着更新访问时间。由于此时的访问时间已经小于新的修改时间,所以更新访问时间到与修改时间相同。

  • 修改文件示例2(不访问) 
    使用命令echo "hello" >> file,此命令仅仅修改了文件,并没有访问,故仅更新修改时间,访问时间因为没变而晚于修改时间,此即上述现象产生的原因。


四、目录的三个时间

考虑到可以将目录类比为文件,目录下面的文件即目录的内容。所以,可以得到目录的三个时间的更新策略。

  • 新增、删除目录下的文件(touch dir_test/test.mdrm dir_test/test.md) 
    相当于修改目录的内容,故此时目录“dir_test”的修改时间会改变。不过还需注意以下几点:

    • 上述过程中,“dir_test”的访问时间不会改变。
    • 若修改文件test.md的内容,“dir_test”的修改时间也会改变。
    • 上述修改不会影响到更上一级目录时间的更新。
  • 查看目录(ll dir_test) 
    目录“dir_test”的访问时间会更新。


五、参考文章

[1]
[2] 
[3]

你可能感兴趣的文章
基于S5PV210的uboot移植中遇到的若干问题记录(一)DM9000网卡移植
查看>>
Openwrt源码下载与编译
查看>>
我和ip_conntrack不得不说的一些事
查看>>
Linux 查看端口使用情况
查看>>
文件隐藏
查看>>
两个linux内核rootkit--之二:adore-ng
查看>>
两个linux内核rootkit--之一:enyelkm
查看>>
关于linux栈的一个深层次的问题
查看>>
rootkit related
查看>>
配置文件的重要性------轻化操作
查看>>
又是缓存惹的祸!!!
查看>>
为什么要实现程序指令和程序数据的分离?
查看>>
我对C++ string和length方法的一个长期误解------从protobuf序列化说起(没处理好会引起数据丢失、反序列化失败哦!)
查看>>
一起来看看protobuf中容易引起bug的一个细节
查看>>
无protobuf协议情况下的反序列化------貌似无解, 其实有解!
查看>>
make -n(仅列出命令, 但不会执行)用于调试makefile
查看>>
makefile中“-“符号的使用
查看>>
go语言如何从终端逐行读取数据?------用bufio包
查看>>
go的值类型和引用类型------重要的概念
查看>>
求二叉树中结点的最大值(所有结点的值都是正整数)
查看>>