Linux 文件时间戳(atime、mtime、ctime)

Linux 文件时间戳(atime、mtime、ctime)

1、介绍

  • atime(访问时间):这是文件最后一次被读取或执行的时间。每当文件内容被查看或文件被执行时,atime就会更新。
  • mtime(修改时间):当文件内容发生变化时,例如编辑或添加新内容,mtime就会更新。
  • ctime(变化时间):任何更改文件元数据的操作,如更改权限或所有权,都会更新ctime。值得注意的是,修改文件内容也会更新ctime。
项目 Access Time (atime) Modification Time (mtime) Change Time (ctime)
全称 Access Time Modification Time Change Time(或 Status Change Time)
核心含义 文件内容最后被读取/访问的时间 文件内容最后被修改并保存的时间 文件 inode 元数据(权限、属主、链接数等)最后变更的时间(内容修改也会触发)
触发更新操作 - cat、grep、vim 查看 - stat(通常会触发) - 任何读取内容的操作 - echo > 文件 - 编辑器保存 - cp 覆盖文件 - 修改内容(同时更新 mtime) - chmod、chown - mv 重命名 - touch(某些情况)
独立性 可单独更新,不影响其他两个 更新时 一定会同时更新 ctime 可单独更新(如只改权限),不影响 atime 和 mtime
查看命令 ls -lu stat 文件 ls -l(默认显示) stat 文件 ls -lc stat 文件

2、关键规则

1、内容修改(Modify):

  • → 同时更新 mtimectime
  • (因为内容变了,inode 也跟着变)
  • 通常也更新 atime(由于 relatime 优化,atime 被设为 >= mtime)

2、元数据修改(权限、属主、重命名等):

  • → 只更新 ctime

  • (不影响 mtime 和 atime)

    [root@VM-16-6-centos temptest]# chown root:root hi.txt 
    [root@VM-16-6-centos temptest]# stat hi.txt 
    File: ‘hi.txt’
    Size: 5               Blocks: 8          IO Block: 4096   regular file
    Device: fd01h/64769d    Inode: 1061746     Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2025-12-18 13:38:22.817999530 +0800
    Modify: 2025-12-18 13:38:21.884970673 +0800
    Change: 2025-12-18 13:42:13.587137249 +0800
    Birth: -

3、读取操作

使用 cat hi.txt 或其他读取文件的操作,更新 Access 时间。

  • → 只更新 atime

  • (现代系统常优化,减少更新)

    [root@VM-16-6-centos temptest]# cat c.txt 
    hi\n
    [root@VM-16-6-centos temptest]# stat hi.txt 
    File: ‘hi.txt’
    Size: 5               Blocks: 8          IO Block: 4096   regular file
    Device: fd01h/64769d    Inode: 1061746     Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2025-12-18 13:46:35.512295981 +0800
    Modify: 2025-12-18 13:38:21.884970673 +0800
    Change: 2025-12-18 13:42:13.587137249 +0800
    Birth: -

3、时间戳在实际应用中的意义

时间戳 典型应用场景 示例命令/工具 为什么重要
mtime - 清理旧文件/日志(最常用) - 增量备份 - 查找最近修改文件 find /path -type f -mtime +30 -delete 反映内容“新鲜度”,备份工具(如 rsync)默认依赖
atime - 监控文件访问(安全审计) - 清理很少访问的文件 find /path -type f -atime +30 可追踪读取行为,但常被优化禁用
ctime - 安全审计(检测权限/属主异常变更) - forensic 分析 find /path -type f -ctime +30 难伪造,记录系统级变化

常用工具:find(清理/查找)、rsync(备份)、ls -l/u/c(查看)。

3.1 群晖(Synology)NAS 实际应用示例

群晖基于 Linux,常用于自动清理旧文件/空文件夹(防止空间爆满,如下载、监控录像)。

任务计划表脚本(控制面板 → 任务计划表 → 用户定义脚本,运行用户 root):

# 设置路径(替换为你的共享文件夹)
PATH="/volume1/你的文件夹"

# 删除修改时间超过 30 天的文件(为什么用 mtime:最准反映内容过时)
find "$PATH" -type f -mtime +30 -delete

# 删除空文件夹(从深到浅)
find "$PATH" -type d -empty -delete

# 测试时先替换 -delete 为 -print 查看效果

结论

  1. Modify 与 Change 的关联:修改文件内容 → 同时更新 ModifyChange;修改文件元数据 → 只更新 Change
  2. Access 的特殊性:仅读取操作就会更新,部分系统会开启 noatime 挂载参数关闭此更新,以提升磁盘性能