当前位置:首页>Linux>Linux的边角料与冷知识——文件的4个时间戳

Linux的边角料与冷知识——文件的4个时间戳

  • 2026-10-11 05:40:32
Linux的边角料与冷知识——文件的4个时间戳
在 Linux 系统中,我们经常使用 ls -l 查看文件信息,但是否经常看到这样的现象:明明才刚创建的文件,时间显示却可能“穿越”回了过去 N 年之久;或者,没有修改文件,但它显示的时间却偷偷变了?
这背后,是因为 Linux 的文件时间体系里藏着 4 个时间戳,而我们平常看到的,往往不一定是想要看到的那个。

0

1
经典的“时间戳”

传统 Unix (ext 2、ext 3)中有 3 个经典的时间戳:

  • atime:Acess Time,访问时间。当文件内容被如 cat、grep 等命令工具读取时会自动触发更新该时间;
  • mtime:Modify Time,内容修改时间。当文件内容被如 vim 、echo 重定向或者修改时,mtime 时间同样会被自动触发更新;
  • ctime:Change Time,状态变更时间。当文件元数据改变(如文件权限、所有者、文件大小、时间戳、硬链接数等)时自动更新。

    注意,这里的 C 是 Change,而不是 Create。修改文件内容(mtime 变化),一定会触发 ctime 变化;修改文件属性(ctime 变化),不一定触发 mtime 变化。 # 比如修改文件权限

0

2
缺席的第 4 者:crtime

除了上述经典的 3 个时间戳,Linux 还有一个隐藏时间戳,crtime(Create Time/Birth Time),即文件创建时间。

在 Unix 系统设计文件系统之初,为了节省磁盘空间,砍掉了创建时间,用户只能通过“最早的 mtime”来进行模糊推断。相比于 Windows NTFS 文件系统和 MacOS APFS 文件系统中显示定义文件“创建时间”,这种做法明显带来不便。从 ext 4 文件系统开始,Linux 系统 inode 节点也开始支持记录这个时间字段了。

但比较遗憾的是,一些经典的命令工具,比如 ls,为了历史兼容性,保证已经存在的庞大脚本正常运行,默认并不显示它。

那如何同时查看文件的这 4 个时间戳呢,使用 stat 命令,效果如下:

0

3
创建时间的使用

在排查问题或整理文件时,文件“创建时间"具有防篡改、方便排序和操作逻辑清晰的特点。

我们可以通过 touch 命令修改 mtime、atime,但 创建时间 crtime 的修改难度则呈指数级上升,需要修改文件系统底层结构,这对于系统分析取证非常有帮助。

另外,在对照片、视频、日志等文件进行排序时,按 crtime 排序比 mtime 排序,时间线更加清晰,不会出现时间跳跃的问题。

由于 ls 命令工具无法直接显示 crtime,当我们需要通过文件创建时间 crtime 排序时,需要借助 stat 工具,实现的方式如下:

# 文件按创建时间排序stat -C '%W %n' * | sort -n

0

4
总结

atime、mtime、ctime 和 crtime 是文件在时间维度上发生异动的忠实记录者,善用它们,在特定场合或关键时刻可能成为我们的救命稻草。

如果本文对你有帮助,请点击下方 点赞/收藏 给个 Star,谢谢佬!

END

纯净工具栈
软件在精不在多,
款款经心细琢磨。

最新文章

随机文章