stat是唯一能一次性读取真实inode元数据的命令,用stat -c "%i %h"可精准提取inode号和硬链接数,硬链接数为0表明文件已被unlink但仍有进程打开,磁盘空间未释放。

直接用 stat,别绕路——它才是唯一能一次性读取真实 inode 元数据的命令。
查单个文件的 inode 号和硬链接数
默认 stat /path/to/file 输出字段多、顺序不固定,容易漏看 Links: 或误读 Inode:。硬链接数为 0 是“已删未释放”的关键信号,但得靠格式化输出才稳。
- 用
stat -c "%i %h" /etc/hosts→ 精准输出 inode 号和硬链接数(%i和%h) - 硬链接数为 0?说明文件已被
unlink(),但仍有进程打开,磁盘空间不会释放,df -h看不出异常 - 别信
ls -i单独输出的数字:它不带上下文,无法确认是否跨设备、是否真为同一 inode
批量提取 inode 信息时避免解析默认输出
stat 默认输出是给人看的,换行、缩进、空格不规则,脚本里直接 grep 或 awk 解析极易崩。必须用 -c 格式化。
-
stat -c "%n %i %s %y" *.log→ 安全展开通配符,含空格路径也不出错 - 时间戳字段要分清:
%y是 mtime(内容修改),%x是 atime(访问),%z是 ctime(元数据变更) - 路径含换行或特殊字符?改用
find /var/log -name "*.log" -print0 | xargs -0 stat -c "%n %i %y"
用 ls -i 快速扫目录,但别只看数字
ls -i 是最快路径,适合排查硬链接或发现重复 inode 分布,但它只给编号,没上下文。
-
ls -i /tmp输出是 “inode号 文件名”,每行一个;若某 inode 出现多次,说明存在硬链接 - 加
-l成ls -li才能看到权限、大小、所有者等对照项,否则纯数字列易被当成行号或大小 - 管道里慎用
ls -i | grep xxx:文件名含空格时字段错位,优先用find -printf
按 inode 号反查路径,find -inum 是唯一可靠方式
拿到 inode 号(比如从 lsof +L1 或 stat 输出里),想定位它在磁盘上的所有路径,只能靠 find -inum。
-
find / -inum 1234567 2>/dev/null→ 抑制权限错误,避免刷屏 - 同一个 inode 可能对应多个路径(硬链接),
find会全部列出;但不会返回已删除但仍被进程打开的文件(这类在/proc/PID/fd/下) -
-inum在 ext4/XFS 上可靠,但在 NFSv3 等网络文件系统上可能失效,因服务器端可做映射
真正容易被忽略的是:inode 号本身不带设备信息,stat 输出里的 Device: 字段必须一致,才能确认两个路径指向同一文件——跨挂载点的相同 inode 号毫无意义。


















