为何touch命令会修改ctime?文件未改动却变更mtime的疑问
Touch命令时间戳疑问解答
操作示例
# 查看main.c初始时间戳 stat main.c Access: 2023-12-14 23:43:08.299761676 +0800 Modify: 2023-12-14 23:43:08.274761678 +0800 Change: 2023-12-14 23:43:08.274761678 +0800 Birth: - # 执行touch命令 touch main.c # 再次查看时间戳,三个时间都发生了变化 stat main.c Access: 2023-12-14 23:43:37.956758479 +0800 Modify: 2023-12-14 23:43:37.893758486 +0800 Change: 2023-12-14 23:43:37.893758486 +0800 Birth: - # 使用-a选项时,atime和ctime会改变 # 使用-m选项时,atime、mtime、ctime都会改变
疑问点
- 为何touch命令会同时修改ctime?
根据GNU官方文档描述:
touch changes the access and/or modification timestamps of the specified files.
(仅提到了atime和mtime)选项说明:
-a. 仅修改访问时间戳
-m. 仅修改修改时间戳
文档只说明touch修改atime和/或mtime,但实际执行后ctime也发生了变化,对此感到困惑。
- 执行touch命令后main.c内容未改动,但mtime却发生了变更?
解答
1. 关于ctime被修改的原因
ctime(变更时间)记录的是文件元数据发生变化的时间,这里的元数据包括文件的权限、所有者、时间戳(atime/mtime)等属性。当touch命令修改atime或mtime时,本质上是修改了文件的元数据,操作系统会自动更新ctime来记录这次元数据的变更——这是文件系统的底层机制,和touch命令的功能无关,属于必然的附带结果。
GNU文档描述的是touch的核心功能目标,即主动修改atime和/或mtime,而ctime的更新是操作系统的自动行为,因此文档不会特意提及。
2. 关于mtime无内容变更却被修改的原因
mtime(修改时间)的定义是文件内容最后被修改的时间,但touch命令的设计初衷就是允许用户手动调整文件的时间戳,无论文件内容是否发生变化。比如你需要让某个文件的时间戳与其他文件保持一致,或者让程序认为该文件是最新编辑的,都可以通过touch命令直接修改mtime,这是touch命令的标准用法,属于预期行为。
内容的提问来源于stack exchange,提问作者hhx
相关产品推荐
相关产品推荐

