linux中ctime、mtime、atime的区别

目录

改变时间(ctime)与修改时间(mtime)的区别在于一个改变的是文件的索引节点(inode)属性,一个改变的是文件内容本身。例如,chmod a-w myfile 会改变 inode,是改变时间;而 echo foo >> myfile 则修改了文件内容,是修改时间。

访问时间(atime)是文件最后一次被读取的时间,阅读文件会更新 atime,但改变时间和修改时间不变。

根据 man 手册:

  • st_atime: 最后一次数据被访问的时间。由 creat(), mknod(), pipe(), utime(), read() 等函数改变。
  • st_mtime: 最后一次数据被修改的时间。由 creat(), mknod(), pipe(), utime(), write() 等函数改变。
  • st_ctime: 最后一次 inode 状态被改变的时间。由 chmod(), chown(), creat(), link(), mknod(), pipe(), unlink(), utime(), write() 等函数改变。

查看文件的三个时间

ls 命令可以查看文件的不同时间戳:

ls -l filename    # 列出 mtime
ls -lc filename   # 列出 ctime
ls -lu filename   # 列出 atime

注意:ls 显示的是 mtime。touch 命令会改变这三个时间。

关于 atime 的更新

atime 不一定会在访问文件后被修改,这取决于文件系统的挂载选项。使用 ext3 文件系统时,如果挂载时使用了 noatime 参数,就不会更新 atime 信息。这是为了减少文件系统的修改,提高读取性能。这三个时间戳都存放在 inode 中,如果 mtime 或 atime 被修改,inode 必然要改变,随之 ctime 也会改变。

#linux-admin