zoukankan      html  css  js  c++  java
  • Linux文件时间详解ctime、mtime、atime【转】

      本文转载自:http://blog.csdn.net/doiido/article/details/43792561

        Linux系统文件有三个主要的时间属性,分别是 ctime(change time), atime(access time), mtime(modify time)。这三个时间很容易混淆,准备深入了解linux的童鞋请区分这三者的区别


    atime:Access time, 是在读取文件或者执行文件时更改,即文件最后一次被读取的时间。
    说明: st_atime
               Time when file data was last accessed. Changed by  the
               following   functions:   creat(),   mknod(),   pipe(),
               utime(2), and read(2).

    mtime:Modified time, 是在写入文件时随文件内容的更改而更改,是指文件内容最后一次被修改的时间。
    说明: st_mtime
               Time when data was last modified. Changed by the  fol-
               lowing  functions:  creat(), mknod(), pipe(), utime(),
               and write(2).

    ctime:Change time, 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态最后一次被改变的时间。
    说明: st_ctime
               Time when file status was last changed. Changed by the
               following   functions:   chmod(),   chown(),  creat(),
               link(2),  mknod(),  pipe(),  unlink(2),  utime(),  and
               write().
      很多人把它理解成create time,包括很多误导人的书籍也是这么写。实际上ctime是指change time。


    注意:
    1、修改是文本本身的内容发生了变化(mtime)
          改变是文件的索引节点发生了改变(ctime)
    2、如果修改了文件内容,则同时更新ctime和mtime
    3、如果只改变了文件索引节点,比如修改权限,则只是改变了ctime

    4、如果使用ext3文件系统的时候,在mount的时候使用了noatime参数则不会更新atime的信息,即访问文件之后atime不会被修改,而这个不代表真实情况

    小知识:这三个 time stamp 都放在 inode 中。若mtime,atime修改, inode 就一定会改,相应的inode改了,那ctime 也就跟着要改了,之所以在mount option中使用 noatime, 就是不想 file system 做太多的修改, 从而改善读取性能.



    查看文件的 atime、ctime 和 mtime。
    # ls -lc filename         列出文件的 ctime
    # ls -lu filename         列出文件的 atime
    # ls -l  filename          列出文件的 mtime 



    例子
    1: # echo "Hello World" >> myfile      atime不变,同时改变了ctime和mtime
    2: # cat myfile             ctime和mtime不变,只改变atime
           # ls myfile                     ctime和mtime以及atime都不改变
    3: # chmod u+x myfile             mtime和atime不变,只改变ctime
    4: # mv myfile ../                     mtime和atime不变,只改变ctime


    其他扩展:
    relatime属性

    从kernel2.6.29开始,默认集成了一个 relatime的属性。使用这个特性来挂装文件系统后,只有当mtime比atime更新的时候,才会更新atime。

    使用场景:
    在文件读操作很频繁的系统中,atime更新所带来的开销很大,所以在挂装文件系统的时候使用noatime属性来停止更新atime。但是有些程序需要根据atime进行一些判断和操作,这个时候relatime特性就派上用场了。其实在事实上,这个时候atime和mtime已经是同一个time,所以可以理解这个选项就是为了实现对atime的兼容才推出的,并不是一个新的时间属性。
    使用方法: # mount -o relatime /dir ##挂载目录的时候加relatime参数

  • 相关阅读:
    SQL语法:查询此表有另外一个表没有的数据
    .NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践
    win7 64 安装Oracle 11G 、使用PLSQL进行连接 标准实践
    json 筛选数据 $.grep过滤数据
    bootstrap table 行号 显示行号 添加行号 bootstrap-table 行号
    ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践
    JS中判断JSON数据是否存在某字段的方法 JavaScript中判断json中是否有某个字段
    json 数字key json 数字作为主键
    ajax 跨域 headers JavaScript ajax 跨域请求 +设置headers 实践
    扩展:gridview 空数据时显示表头
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/5792386.html
Copyright © 2011-2022 走看看