stat 命令直接读取 inode 表获取文件或文件系统真实元数据,比 ls -l 更全面精确;支持自定义格式(-c)、文件系统级查看(-f)、符号链接跟随(-l),但不显示 birth time,nfs 下部分字段可能不可靠。

直接用 stat 命令就能看到文件或文件系统的底层元数据,它比 ls -l 更全面、更精确,不依赖目录项解析,而是读取磁盘 inode 表的真实字段。
查看单个文件的完整元数据
执行 stat 文件名,例如:
stat /etc/hosts
输出中关键字段包括:
- Inode:该文件在文件系统中的唯一编号
- Links:硬链接数量,为 0 表示文件已被删除但仍有进程打开
- Access / Modify / Change:分别对应 atime(读取内容)、mtime(修改内容)、ctime(元数据变更),注意 ctime 不是创建时间
- Access: (0644/-rw-r--r--):括号内左侧是八进制权限(首位 0 表示无 setuid/setgid/sticky;若为 04755 则含 setuid),右侧是符号表示
- IO Block 和 Blocks:I/O 块大小(通常 4096)与实际占用块数,二者相乘不一定等于 Size(稀疏文件或对齐填充会导致差异)
- Device:设备号(十六进制和十进制),配合 Inode 可唯一标识一个文件
如果括号内两部分权限不一致(如 (0644/-rwxr-xr-x)),说明存在 ACL 或扩展属性,需用 getfacl 进一步确认。
用 -c 自定义格式快速提取关键信息
默认输出冗长,日常排查推荐精简字段。常用组合有:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 只看文件名、大小、修改时间和 inode:
stat -c "%n %s bytes %y %i" /var/log/syslog
- 查权限(八进制)和所有者:
stat -c "%a %U:%G" /tmp/test.txt
- 输出纳秒级时间戳供脚本处理:
stat -c "%X %Y %Z" file.txt # 分别对应 atime/mtime/ctime 的 Unix 秒数
常用转义符:
%n(文件名)、%i(inode)、%s(字节大小)、%y(mtime,ISO 格式)、%x(atime)、%z(ctime)、%a(八进制权限)、%U(用户名)、%G(组名)
查看文件系统级状态(不是单个文件)
加 -f 参数可获取挂载点的整体信息:
stat -f /home
输出包含:
- Type:文件系统类型(如 ext4、xfs)
- Blocks:总块数、可用块数、非 root 用户可用块数
- Files:inode 总数、可用 inode 数、已用百分比(IUse%)
- Name length:最大文件名长度
这相当于 df -i 的增强版,但 df -i 更直观显示使用率,stat -f 则提供更多底层参数,适合脚本调用或深度排查。
注意事项与常见误区
-
stat默认不显示 birth time(创建时间),即使 ext4/xfs 支持,多数发行版仍返回-;真要查需用debugfs(ext4)或xfs_db(xfs) -
stat本身不能修改时间戳,但可配合touch验证:先stat file记录原始值,再touch -m -d "2025-01-01" file修改,最后stat file确认 ctime 是否同步更新 - 符号链接默认显示链接自身信息;加
-L才跟随并显示目标文件元数据 - 在 NFS 等网络文件系统上,部分字段(如 inode、device)可能不可靠,因服务端做了映射转换
不复杂但容易忽略










