专栏首页嘉为科技的专栏Linux | 文件的时间属性

Linux | 文件的时间属性

在我们进行系统运维的时候,会需要去查看系统下文件的一些时间属性,如创建时间、修改时间等,比如查看一个应用的配置文件的修改时间,用于初步判断该文件是否被篡改过。那么本文就针对Linux系统下的文件的时间属性来做一个介绍。

文件的时间属性

在Linux系统下,文件的时间属性主要分为三种:

访问时间 atime:

也就是Access time。读一次文件的内容,该文件的atime就会更新。比如常见的使用more、cat对该文件进行查看时,其atime将更新。

修改时间 mtime:

也就是Modify time。对该文件进行内容上的修改,该文件的mtime就会更新。比如常见的使用vi、vim对文件进行修改后保存,其mtime将更新。

文件属性变更时间 ctime:

也就是Change time。对该文件的属性状态进行修改,改文件的ctime就会更新。比如文件名、内容、大小、权限、所属组等改变时,其ctime将更新。

ll命令查看文件时间属性

使用ll或ls -l命令查看的就是mtime:

使用ll --time=atime或ls -lu查看的就是atime:

使用ll --time=ctime或ls -lc查看的就是ctime:

当然,我们还可以使用stat命令来同时查看文件的三种时间属性:

触发更新时间的几个命令效果

使用cat命令来触发其atime更新:

使用vi修改来触发其mtime更新:

在这里我们可以看到该文件的mtime和ctime都被更新了,而且是ctime紧接着mtime更新,几乎是同一时刻。那是因为使用vi修改保存时,理所当然的mtime更新,随后由于文件大小发生变化,触发ctime更新。

使用chmod来触发其ctime更新:

简单总结下,能正常触发修改上述3种时间属性的命令和效果:

  • cat、less、more等只读文件,不修改文件的操作,只会修改atime的值。
  • chmod、chown等修改文件权限、所有者,所属组的操作,会修改atime和ctime的值。
  • vi等修改文件内容的操作,会修改atime、ctime、mtime的值。(实际操作中,出现过atime不变的情况)

利用时间属性的常见操作

结合find命令查找特定时间要求的文件,例如查询最近24小时内修改过的文件:find /data -mtime 24

通过查看atime来判断是否该文件被查看、访问过,没有多大意义,因为任何一个操作都可能引起atime的变更,而且一个文件创建后至少要被读取才算有用吧。

通过查看mtime来判断是否该文件被修改过,其实也不算准确,因为mtime除了正常修改文件会更新外,也可以被特意进行修改到一个虚假的时间点里,如使用touch命令。

比如使用touch命令把时间修改到3天前,从下图中我们可以看到atime和mtime都被修改到了3天前:

也可以修改到特定的时间点上:

不过从上面两个修改可以看出,ctime是没有被修改的。

那么是否可以通过ctime来判断该文件是否被修改过呢?也不行!因为这个时间也是可以被更新的,还是使用touch命令,如touch -c和touch -a,不过可以看出touch -c将修改3个时间,touch -a只修改了atime和ctime。

对于时间属性的系统优化

默认情况下,系统每次访问、修改、创建磁盘里的文件的时候,都会更新文件的atime,导致系统会有部分资源消耗在此,从而使得系统开销增加。如果我们能让系统不对atime进行记录更新,那么可以在某个程度上让系统得到一定的优化,参考操作如下:

echo -ne

"

proc /proc proc noatime,defaults 0 0

"

>>/etc/fstab

sudo mount -a

总结

简单回顾一下,我们从3种时间属性的开始引入;并介绍借由ll命令查看文件的时间属性;再演示触发更新时间的几个命令的效果;分享利用时间属性的一般常见操作;最后提供时间属性的系统优化的操作给大家参考。以上是本文对进行系统运维时,查看Linux系统下文件的时间属性的分享,希望对大家有帮助。

作者:何立

本文分享自微信公众号 - 嘉为科技(canway_service),作者:何立

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CMDB到底如何建设?

    随着自动化运维的火热,CMDB建设项目不断的涌现,正是因为CMDB就是自动化运维的基石。关于CMDB的概念、定位、价值、与周边的关系、企业面临的痛点等,这里不做...

    嘉为科技
  • 一个时代的终结:为什么是时候放弃ITOM四大巨头了?这对IT领导者来说意味着什么?

    2018年7月,Broadcom宣布了收购CA Technologies的计划,收购额近190亿美元。虽然分析师对于芯片制造商收购企业级软件公司这件事是否值得还...

    嘉为科技
  • CMDB到底如何建设?

    随着自动化运维的火热,CMDB建设项目不断的涌现,正是因为CMDB就是自动化运维的基石。关于CMDB的概念、定位、价值、与周边的关系、企业面临的痛点等,这里不做...

    嘉为科技
  • Java是怎么加载类的

    Java的类加载机制是最容易被忽略的知识,不管是基础,还是往高级开发进阶,都需要了解类的加载机制。

    PhoenixZheng
  • JUnit 5和Selenium基础(三)

    在这一部分教程中,将介绍JUnit 5的其他功能,这些功能将通过并行运行测试,配置测试顺序和创建参数化测试来帮助减少测试的执行时间。还将介绍如何利用Seleni...

    八音弦
  • PHP的自动加载机制[2]

    一、autoload机制概述 在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来...

    公众号php_pachong
  • php类的自动载入(lazy load)

    类的自动载入 一、require时代(手动载入): 在一些以前的项目,或者是一些小型的项目里面,一般来说文件的载入一般有两种办法: a.require b.in...

    NateHuang
  • R语言建立回归分析,并利用VIF查看共线性问题的例子

    使用R对内置longley数据集进行回归分析,如果以GNP.deflator作为因变量y,问这个数据集是否存在多重共线性问题?应该选择哪些变量参与回归? 答: ...

    小莹莹
  • Java基础——Synchronized

    方法锁 synchronized修饰普通方法,不可以是静态方法,锁对象默认是this

    羊羽shine
  • 数据库中的 “行式存储”和“列式存储”

    传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行...

    一个会写诗的程序员

扫码关注云+社区

领取腾讯云代金券