在 Linux 文件系统中,文件的时间戳属性是文件元数据的重要组成部分,用于记录文件的访问和修改时间。以下是主要的时间戳属性及其详细说明:
atime (Access Time)cat、less、grep 等命令读取文件内容。read() 系统调用访问文件。bash
stat -c %x 文件名 # 或使用 `ls -lu`atime 可能影响性能(可通过挂载选项 noatime 或 relatime 禁用或优化)。mtime (Modification Time)vi、echo 等修改文件内容。write() 系统调用写入文件。bash
stat -c %y 文件名 # 或使用 `ls -l`rsync)依赖 mtime 判断文件是否需要同步。ctime (Change Time)chmod)、所有者(chown)。bash
stat -c %z 文件名 # 或使用 `ls -lc`ctime 不可通过用户操作直接修改,由内核维护。crtime (Birth Time / Creation Time)bash
debugfs -R 'stat 文件inode号' /dev/sdX # 需root权限stat 命令不显示 crtime,需借助工具(如 debugfs 或第三方工具 statx)。dtime (Deletion Time)touch 命令:
bash
touch -a 文件名 # 仅更新 atime
touch -m 文件名 # 仅更新 mtime
touch -t 202401011200 文件名 # 指定时间(格式:[[CC]YY]MMDDhhmm[.ss])utimensat 系统调用:程序可精确设置纳秒级时间戳。noatime:完全禁用 atime 更新,提升性能。relatime(默认):仅在 atime 早于 mtime/ctime 时更新,平衡性能与兼容性。
bash
mount -o remount,relatime / # 重新挂载根目录rsync -a 保留 mtime 和 atime。ctime 追踪文件元数据变更。crtime 帮助确定文件创建时间(如取证分析)。$ stat 文件名
File: 文件名
Size: 1024 Blocks: 8 IO Block: 4096 regular file
Access: 2024-01-01 12:00:00.000000000 +0800 # atime
Modify: 2024-01-02 12:00:00.000000000 +0800 # mtime
Change: 2024-01-03 12:00:00.000000000 +0800 # ctime
| 属性 | 全称 | 触发条件 | 查看命令 |
|---|---|---|---|
atime |
Access Time | 读取文件 | ls -lu / stat |
mtime |
Modification Time | 修改文件内容 | ls -l / stat |
ctime |
Change Time | 修改元数据或内容 | ls -lc / stat |
crtime |
Creation Time | 文件创建(仅部分文件系统) | debugfs |
通过合理管理时间戳,可以优化系统性能并满足特定业务需求(如日志轮转、增量备份等)。