stat是linux中直接读取inode元数据查看文件底层属性的核心工具,提供八进制/符号权限、所有者、所属组、三类时间戳(access/modify/change)、inode号、硬链接数、设备号等真实字段,并支持-c定制输出、-f查文件系统统计、-l跟随软链。

stat命令是Linux中查看文件真实底层属性的核心工具,它直接读取inode元数据,不是对ls的简单增强,而是唯一能一次性拿到磁盘上原始字段的方式。权限相关的关键信息——比如八进制权限、符号权限、所有者、所属组,都原样来自文件系统,不经过推算。
看懂三类时间戳,避免误判文件状态
Access、Modify、Change三个时间字段常被混淆,但它们反映的是完全不同的操作:
- Access:最后一次读取内容的时间(如cat、grep),但受relatime或noatime挂载选项影响,可能长期不变
- Modify:最后一次修改文件“内容”的时间(如echo追加、vim保存),最能反映数据是否更新
- Change:最后一次修改“元数据”的时间(如chmod、chown、mv重命名),比Modify更敏感,不能等同于内容变更
用-c定制输出,精准提取权限与归属信息
默认输出冗长且不易解析,-c选项可直接提取结构化字段,适合排查和脚本调用:
Python Linux版 为 Python.org 官方提供的 Python 3.14.6 Linux/Unix 源码包,适合在Linux/Unix环境中安装、运行 Python 代码并学习函数、模块和脚本开发。
- stat -c "%n %a %A %U:%G" /etc/hosts → 输出文件名、八进制权限(如644)、符号权限(如-rw-r--r--)、所有者:组名
- stat -c "%i %h %s" /var/log/syslog → 输出inode号、硬链接数、字节大小,可用于识别已删未释放文件(Links为0)
- 批量处理安全可靠:stat -c "%n %a %U" *.conf 或配合find:find /etc -name "*.conf" -print0 | xargs -0 stat -c "%n %a %U"
查inode与权限关联的底层细节
权限不仅体现在Access字段,还和inode、硬链接、设备号等共同构成文件身份:
- Inode编号是文件在文件系统内的唯一标识,同一inode的不同硬链接共享权限和时间戳
- Links值为1表示常规文件;若为0,说明文件已被rm删除,但仍有进程打开它(常见于日志轮转场景)
- Device字段显示所在分区设备号,结合Inode可定位文件物理位置,辅助排查跨设备mv失败等问题
区分文件与文件系统级权限上下文
stat的-f选项用于查看整个挂载点的权限环境,和单个文件无关,但对权限问题排查很关键:
- stat -f / 显示根文件系统的总inode数、剩余inode数、可用块数等
- 当出现“Permission denied”却权限看似正常时,需检查df -i确认inode是否耗尽——stat -f能提供比df更底层的设备级统计
- -L选项可跟随符号链接解析目标文件的真正权限,避免因软链遮蔽导致误判










