目录时间

目录时间

目录时间戳的类型

  • mtime (Modification Time): 内容修改时间。对于目录来说,“内容”指的是目录条目列表(即文件名列表及其对应的 inode 信息)。

  • ctime (Status Change Time): 状态变更时间。当目录的元数据(如权限、所有者、链接数等)或目录条目列表发生变化时更新。

  • atime (Access Time): 最后访问时间。目录被读取(例如列出文件)时更新(取决于挂载选项 noatime 或 relatime)。

  • btime(Brith Time): 目录创建时间

什么情况下目录的 mtime 会变?

目录的 mtime 只有在目录条目列表发生变化时才会更新,具体包括:

  • 创建新文件或子目录

  • 删除文件或子目录

  • 重命名文件或子目录

  • 移动文件到该目录(从一个目录移动到另一个目录)

在这些情况下,目录的“内容”(即条目列表)被修改了,所以 mtime 会更新。

修改目录内文件的内容时,会发生什么?

当你修改一个已存在文件的内容时(例如编辑文本文件、向日志文件追加内容):

  • 该文件的 mtime 和 ctime 会更新。

  • 其父目录的条目列表没有变化(文件还是那个文件,inode 通常也不变),因此父目录的 mtime 保持不变。

  • 但是,父目录的 ctime 会更新,因为文件的状态(包括大小、链接数、内容等元数据)发生了变化,这被记录在目录所引用的 inode 信息中,属于目录元数据的“间接”变化,从而触发 ctime 更新。

一般mtime变化ctime都会

例外:

  • 使用 utimensat() 系统调用直接修改 mtime

  • 恢复备份时保留原始时间戳

# 目录时间

## 目录时间戳的类型

- mtime (Modification Time): 内容修改时间。对于目录来说,“内容”指的是目录条目列表(即文件名列表及其对应的 inode 信息)。
- ctime (Status Change Time): 状态变更时间。当目录的元数据(如权限、所有者、链接数等)或目录条目列表发生变化时更新。
- atime (Access Time): 最后访问时间。目录被读取(例如列出文件)时更新(取决于挂载选项 noatime 或 relatime)。
- btime(Brith Time): 目录创建时间

## 什么情况下目录的 mtime 会变?

目录的 mtime 只有在目录条目列表发生变化时才会更新,具体包括:

- 创建新文件或子目录
- 删除文件或子目录
- 重命名文件或子目录
- 移动文件到该目录(从一个目录移动到另一个目录)

在这些情况下,目录的“内容”(即条目列表)被修改了,所以 mtime 会更新。

## 修改目录内文件的内容时,会发生什么?

当你修改一个已存在文件的内容时(例如编辑文本文件、向日志文件追加内容):

- 该文件的 mtime 和 ctime 会更新。
- 其父目录的条目列表没有变化(文件还是那个文件,inode 通常也不变),因此父目录的 mtime 保持不变。
- 但是,父目录的 ctime 会更新,因为文件的状态(包括大小、链接数、内容等元数据)发生了变化,这被记录在目录所引用的 inode 信息中,属于目录元数据的“间接”变化,从而触发 ctime 更新。

## 一般mtime变化ctime都会

例外:

- 使用 utimensat() 系统调用直接修改 mtime
- 恢复备份时保留原始时间戳