在 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 |
通过合理管理时间戳,可以优化系统性能并满足特定业务需求(如日志轮转、增量备份等)。