1.2.6. 时间戳

GNU/Linux 文件有三种类型的时间戳。

表 1.9. 时间戳类型列表

类型含义(历史上 Unix 的定义)
mtime文件修改时间(ls -1)
ctime文件状态修改时间 (ls -lc)
atime文件最后被访问的时间 (ls -lu)
[注意]注意

ctime 不是文件创建时间。

[注意]注意

atime在 GNU/Linux 系统上的真实值可能和历史上 Unix 的定义有所不同。

  • 覆盖一个文件,将会改变该文件所有的 mtime, ctime, 和 atime 属性。

  • 改变文件的所有者或者权限,将改变文件的 ctimeatime 属性。

  • 在历史上的 Unix 系统中,读取一个文件将改变文件的 atime 属性。

  • 读一个文件,将改变文件的 atime属性;在 GNU/Linux 系统上,这仅发生在其文件系统使用“strictatime”参数挂载的情况下。

  • 如果 GNU/Linux 系统的文件系统使用 “relatime“ 选项挂载,第一次读文件,或者随后读文件,将改变该文件的 atime 属性. (从 Linux 2.6.30 开始的默认行为)

  • 如果 GNU/Linux 系统的文件系统使用 “noatime“ 挂载,则读一个文件,不会改变这个文件的 atime 属性。

[注意]注意

为了在正常的使用场景中能够提升文件系统的读取效率,新增了 “noatime“ 和 “relatime“ 这两个加载选项。如使用了 “strictatime“ 选项,即使简单的文件读操作都伴随着更新 atime 属性这个耗时的写操作。但是 atime 属性除了 mbox(5) 文件以外却很少用到。详情请看 mount(8)。

使用 touch(1) 命令修改已存在文件的时间戳。

对于时间戳,ls 命令输出字段在非英语区域(“fr_FR.UTF-8”) 与旧的区域(“C”)不同。

  1. $ LANG=fr_FR.UTF-8 ls -l foo
  2. -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo
  3. $ LANG=C ls -l foo
  4. -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
[提示]提示

参考第 9.2.5 节 “定制时间和日期的显示” 自定义 “ls -l” 输出 。