stat 命令可直接准确获取文件的 atime(最后访问时间)和 mtime(最后修改时间),默认输出中 Access 和 Modify 行即对应二者;GNU 系统可用 stat -c '%x' 和 '%y' 提取,macOS 需用 stat -f 配合 -t。

用 stat 命令能直接、准确地查出文件的最后访问时间(atime)和最后修改时间(mtime),不需要拼接多个命令,也不依赖 ls 的格式限制。
直接查看 atime 和 mtime 的标准输出
stat 默认输出中就包含三类时间,其中:
- Access: 就是最后访问时间(atime)——文件内容被读取(如 cat、less、head)或元数据被 stat 自身读取时更新
- Modify: 就是最后修改时间(mtime)——文件内容被写入(如 echo >、cp、vim 保存)时更新
运行命令:stat filename
输出示例中这两行就是你要的时间:
Modify: 2026-04-16 14:05:33.987654321 +0800
提取纯时间字符串(适合脚本使用)
GNU 系统(Ubuntu/CentOS 等)可用格式化选项只输出时间:
- 只取 atime(可读格式):
stat -c '%x' filename - 只取 mtime(可读格式):
stat -c '%y' filename - 若要去掉纳秒和时区,只要年月日时分秒:
stat -c '%y' filename | cut -d. -f1
注意:macOS 或 Alpine(BusyBox)不支持 -c,需改用 stat -f '%Sa' -t '%Y-%m-%d %H:%M:%S' filename(atime)或 %Sm(mtime)。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
区分 atime/mtime/ctime,避免常见误解
这三个时间容易混淆,但含义明确:
-
atime ≠ 打开文件的动作:只是内核记录的“上次读取内容”时间;某些挂载选项(如
noatime)会禁用它,此时 atime 不再更新 - mtime 是内容变更的可靠指标:只要文件内容真正被写入(哪怕只改一个字节),mtime 就更新;ls -l 默认显示的就是 mtime
- ctime 不是创建时间:它是“状态变更时间”,比如 chmod、chown、重命名、硬链接数变化都会触发 ctime 更新
批量查看多个文件的 atime 和 mtime
避免用 stat *(空格/特殊字符会出错),推荐安全写法:
- 当前目录所有普通文件(含空格名):
for f in *; do [ -f "$f" ] && printf "%-20s | atime: %s | mtime: %s\n" "$f" "$(stat -c '%x' "$f" 2>/dev/null)" "$(stat -c '%y' "$f" 2>/dev/null)"; done - 按 mtime 降序排列(最新修改的在前):
find . -maxdepth 1 -type f -printf '%T@ %T+ %p\n' | sort -nr | head -10
(%T@是 Unix 时间戳,排序更准;%T+是带纳秒的可读时间)










