ctime是文件元数据(如权限、所有者、链接数等Inode属性)最后一次变更的时间戳,非创建时间;修改内容或属性均会更新ctime,可用stat命令查看。

要查看文件的 Change Time(ctime),直接用 stat 命令即可。它反映的是文件元数据层面的变更,比如权限、所有者、链接数、大小、扩展属性等——这些都属于 Inode 级别的变动,不涉及文件内容本身。
Change Time 的本质是 Inode 状态变更时间
Change Time(ctime)不是“创建时间”,也不是“修改时间”,而是文件对应 Inode 被内核标记为“已更改”的时间戳。只要 Inode 中任何字段被写入(如 chmod、chown、ln、truncate、甚至硬链接增减),ctime 就会更新。
- Inode 变更触发 ctime 更新:权限改了、属主变了、链接数变化、文件被截断、ACL 或 SELinux 上下文更新
- 内容修改(如
echo >>)会同时更新 mtime 和 ctime - 仅读取或访问(
cat、ls)只影响 atime(若未禁用) - ctime 无法通过用户态命令“回退”,内核强制维护其单调递增性
用 stat 查看 ctime 的常用方式
stat 默认输出中,“Change:” 行就是 ctime:
stat example.txt
输出示例中关注这一行:
Change: 2026-04-28 15:22:07.345678901 +0800如需脚本友好格式(纯时间字符串):
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
- GNU 系统(CentOS/RHEL/Ubuntu):
stat -c '%z' example.txt - macOS / FreeBSD:
stat -f '%Sm' -t '%Y-%m-%d %H:%M:%S' example.txt
对比 ctime 和其他时间戳来定位 Inode 操作
当怀疑某个工具或脚本悄悄修改了文件属性时,可比对三者:
- mtime 不变,ctime 变 → 说明没动内容,但改了权限/属主/链接等(如
chmod 644) - atime 变,mtime 和 ctime 都不变 → 可能只是读取(且系统未启用
relatime或noatime) - 三个时间全变 → 很可能是编辑保存(如 vim 写入)、或
cp --preserve类操作
注意:touch -c 只更新 ctime(不创建文件),是专门用于测试 ctime 行为的可靠手段。
实际排查场景示例
比如你发现一个配置文件的权限被重置为 600,但没人手动执行 chmod:
- 先查当前 ctime:
stat -c '%z' config.conf - 再查最近系统日志:
journalctl --since "2026-04-28 15:00" | grep config.conf - 结合
inotifywait -m -e attrib config.conf实时监听 Inode 属性变更(需安装 inotify-tools)
这类追踪依赖的就是 ctime 的精确性和不可绕过性——它是内核在 Inode 层面留下的最忠实痕迹。

















