linux下文件时间戳

linux下文件时间戳

  linux下的时间戳有三个,Access(文件访问时间)、Modify(文件内容修改时间)、Change(文件修改时间,包括权限修改,内容修改)。

如何查看这三个时间

  • 使用ls命令
ls -lc filename #列出文件的 ctime (最后更改时间)
ls -lu filename #列出文件的 atime(最后存取时间)
ls -l filename  #列出文件的 mtime (最后修改时间)
  • 使用stat命令

    root@ubuntu:makefile_test# stat main.c
    File: ‘main.c’
    Size: 122 Blocks: 8 IO Block: 4096 regular file
    Device: 801h/2049d Inode: 2037475 Links: 1
    Access: (0777/-rwxrwxrwx) Uid: (65534/ nobody) Gid: (65534/ nogroup)
    Access: 2017-02-28 13:50:03.410188551 +0800
    Modify: 2017-02-28 13:50:02.982540013 +0800
    Change: 2017-02-28 13:50:02.978188564 +0800
    Birth: -

测试

  • chmod对时间戳的修改

    root@ubuntu:makefile_test# stat main.c
    File: ‘main.c’
    Size: 122 Blocks: 8 IO Block: 4096 regular file
    Device: 801h/2049d Inode: 2037475 Links: 1
    Access: (0777/-rwxrwxrwx) Uid: (65534/ nobody) Gid: (65534/ nogroup)
    Access: 2017-02-28 13:50:03.410188551 +0800
    Modify: 2017-02-28 13:50:02.982540013 +0800
    Change: 2017-02-28 13:50:02.978188564 +0800
    Birth: -
    root@ubuntu:makefile_test# chmod 666 main.c
    root@ubuntu:makefile_test# stat main.c
    File: ‘main.c’
    Size: 122 Blocks: 8 IO Block: 4096 regular file
    Device: 801h/2049d Inode: 2037475 Links: 1
    Access: (0666/-rw-rw-rw-) Uid: (65534/ nobody) Gid: (65534/ nogroup)
    Access: 2017-02-28 13:50:03.410188551 +0800
    Modify: 2017-02-28 13:50:02.982540013 +0800
    Change: 2017-02-28 14:04:40.062161972 +0800
    Birth: -

    可见,chmod修改了文件Change time。

  • touch对时间戳的修改

    root@ubuntu:makefile_test# touch main.c
    root@ubuntu:makefile_test# stat main.c
    File: ‘main.c’
    Size: 122 Blocks: 8 IO Block: 4096 regular file
    Device: 801h/2049d Inode: 2037475 Links: 1
    Access: (0666/-rw-rw-rw-) Uid: (65534/ nobody) Gid: (65534/ nogroup)
    Access: 2017-02-28 14:06:49.622158044 +0800
    Modify: 2017-02-28 14:06:49.622158044 +0800
    Change: 2017-02-28 14:06:49.622158044 +0800
    Birth: -

    可见,touch把三个时间都修改了

  • 最后看看恼人的Access time在什么时候修改

    root@ubuntu:makefile_test# vim main.c
    root@ubuntu:makefile_test# stat main.c
    File: ‘main.c’
    Size: 124 Blocks: 8 IO Block: 4096 regular file
    Device: 801h/2049d Inode: 2037475 Links: 1
    Access: (0666/-rw-rw-rw-) Uid: (65534/ nobody) Gid: (65534/ nogroup)
    Access: 2017-02-28 14:13:36.730145701 +0800
    Modify: 2017-02-28 14:13:43.914145483 +0800
    Change: 2017-02-28 14:13:43.914145483 +0800
    Birth: -
    root@ubuntu:makefile_test# vi main.c
    root@ubuntu:makefile_test# stat main.c
    File: ‘main.c’
    Size: 124 Blocks: 8 IO Block: 4096 regular file
    Device: 801h/2049d Inode: 2037475 Links: 1
    Access: (0666/-rw-rw-rw-) Uid: (65534/ nobody) Gid: (65534/ nogroup)
    Access: 2017-02-28 14:14:14.782144547 +0800
    Modify: 2017-02-28 14:13:43.914145483 +0800
    Change: 2017-02-28 14:13:43.914145483 +0800
    Birth: -
    root@ubuntu:makefile_test# vi main.c
    root@ubuntu:makefile_test# stat main.c
    File: ‘main.c’
    Size: 124 Blocks: 8 IO Block: 4096 regular file
    Device: 801h/2049d Inode: 2037475 Links: 1
    Access: (0666/-rw-rw-rw-) Uid: (65534/ nobody) Gid: (65534/ nogroup)
    Access: 2017-02-28 14:14:14.782144547 +0800
    Modify: 2017-02-28 14:13:43.914145483 +0800
    Change: 2017-02-28 14:13:43.914145483 +0800
    Birth: -

    第一次vi,修改了文件内容,结果是3个时间都改了。第二次,只是单单打开再关闭,Access时间改了,第三次,再次单单打开再关闭,Access时间没改

为什么打开了文件Access时间没改呢?
  首先我怀疑了缓存的影响,于是我通过命令sync; echo 3 > /proc/sys/vm/drop_caches清空缓存,但是结果是一样的,打开文件,Access时间依然没改。
  然后google了一下(注意用英文描述搜),发现man mount里面对relatime、noraletime、strictatime可以看到缘故。下面简要描述下,什么情况会更新Access time。
  linux2.6.30开始,mount默认是relatime的,Access time会在文件内容被修改后更新,以及被修改后的下一次访问时更新,距上一次访问时间超过一天会更新。这里和上面的测试也是相符的。

参考:
http://stackoverflow.com/questions/19551139/access-time-does-not-change-after-a-file-is-opened

发布了159 篇原创文章 · 获赞 81 · 访问量 63万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览