stat是唯一能一次性读取真实inode元数据的命令,ls -i仅显示编号,df -i仅统计总量;用stat -c "%i %h"可精准提取inode号和硬链接数,%i表示inode,%h表示硬链接数。

直接用 stat,别绕路——它才是唯一能一次性读取真实 inode 元数据的命令,ls -i 只给编号,df -i 只管总量,都不够。
查单个文件的 inode 编号和硬链接数
这是最常用场景:确认文件是否被硬链接、判断是否“已删未释放”。默认输出字段多且顺序不固定,容易漏看关键项。
-
stat /etc/hosts会显示完整元数据,但 Inode 和 Links 字段藏在中间,得手动找 - 更可靠的做法是用格式化输出:
stat -c "%i %h" /etc/hosts→ 直接得到 inode 号和硬链接数(%i 表示 inode,%h 表示硬链接数) - 如果硬链接数为 0,说明文件已被
unlink(),但仍有进程打开着,磁盘空间不会释放,df -h看不出异常,但lsof +L1能揪出它
区分 atime/mtime/ctime,避免误判“文件被改了”
三个时间戳含义完全不同,尤其 ctime 常被当成“创建时间”,实际根本不是。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
Access(atime):最后一次读取内容的时间,但受挂载选项影响 —— 多数系统默认启用relatime,普通cat不刷新它;只有超过 24 小时未更新,或写操作触发时才更新 -
Modify(mtime):内容最后一次变更,echo >> file或保存 vim 会触发它,适合监控数据是否真正变动 -
Change(ctime):元数据变更时间,chmod、chown、重命名、甚至硬链接增减都会改它,比 mtime 更敏感,不能用来判断内容是否修改
批量提取结构化字段,别 parse 默认输出
默认输出是给人看的,换行、空格、字段对齐都不可靠,脚本里直接解析极易崩。用 -c 才是正解。
-
stat -c "%n %i %s %y" *.log→ 安全展开通配符,输出文件名、inode、大小、mtime(ISO 格式),含空格路径也不出错 - 配合
find更稳妥:find /var/log -name "*.log" -print0 | xargs -0 stat -c "%n %i %y",规避路径含换行或特殊字符的问题 - 注意:
%y是 mtime,%x是 atime,%z是 ctime;时间格式可加%y后缀如%y(完整)、%y(仅日期)
查文件系统级 inode 总量与剩余量,-f 和 -L 不能混用
想确认是不是 inode 耗尽,不能只看 df -i 的百分比——小分区默认 inode 数少,100% 可能只是因为总共就几万个。
-
stat -f /输出里的Inodes:和Inodes Free:是 superblock 原始值,差值就是真实已用数,比df -i的四舍五入更准 -
stat -f和stat -L互斥:-L是解析符号链接目标,-f是查文件系统,同时用会报错 - 不同文件系统字段名略有差异:ext4 显示
Inodes Free:,xfs 可能是free inodes,但数值含义一致
真正麻烦的点在于:一个 inode 被占用 ≠ 文件可见;进程持有已删除文件句柄时,stat 查不到路径,df -i 却显示满,必须结合 lsof +L1 或 /proc/*/fd 手动翻找。这个细节,90% 的排查会跳过去。










