正确命令需加 -type f -xdev 2>/dev/null:-type f 排除目录等非文件项,-xdev 防跨分区误入虚拟文件系统,2>/dev/null 屏蔽权限错误;-size +100M 表示严格大于100 MiB,单位大小写敏感,MB 等写法非法。

直接执行 find / -size +100M 会出错
这条命令几乎必然卡住、刷屏报错,甚至触发 OOM Killer。根本原因有两个:-size 对目录也生效(目录“大小”只是元数据,毫无意义),而且 find / 会钻进 /proc、/sys 这类虚拟文件系统——比如 /proc/kcore 显示几百 GB,但它根本不占磁盘空间。
必须加的参数:
-
-type f:只匹配普通文件,跳过目录、设备、符号链接 -
-xdev:不跨挂载点,避免误入/boot、/mnt/nas或容器 overlay 分区 -
2>/dev/null:屏蔽权限不足导致的Permission denied报错,让结果干净可读
find 的 -size 单位和符号不能写错
+100M 表示“严格大于 100 MiB”(即 100 × 1024 × 1024 字节),不是 ≥100MB。单位大小写敏感,只认:b(512 字节块)、c(字节)、k(KiB)、M(MiB)、G(GiB);MB、mb、B 全都不合法。
想查“≥100MB”的文件,别硬凑 +100M,改用 +99M 更稳妥——否则 100.1 MiB 的文件会被漏掉。
查完怎么知道哪个最大?find 本身不排序
find 只能过滤,不能排序。光输出一堆路径,看不出谁吃空间最多。真正定位“隐形巨无霸”,得靠 du 和 sort 配合:
- 查当前目录下前 10 个最大文件:
du -h * 2>/dev/null | sort -hr | head -n 10 - 查
/var下最大文件并按大小列清楚:find /var -xdev -type f -exec ls -lh {} \; 2>/dev/null | sort -rh -k5 | head -n 10(-k5指ls -lh输出的第 5 列,即大小字段)
注意:-exec ls -lh {} \; 在大量文件时性能较差,优先用 -printf(如支持):find /var -xdev -type f -size +100M -printf '%s %p\n' | sort -nr | head -n 10
别急着 -delete,先确认路径再操作
误删 /var/log/journal/ 或 Docker 日志是高频事故。永远先用 -print 或 -ls 预览结果,确认路径无误再加 -delete。
另外,搜索本身很占 I/O,尽量避开业务高峰期;如果目标明确(比如只查日志),就缩小范围:find /var/log -xdev -type f -name "*.log" -size +100M,比全盘扫快得多也安全得多。
最常被忽略的是 -xdev 和 -type f 的组合——少了任何一个,结果都不可信。


















