用find查大文件需限定路径、加-xdev防跨分区、-type f确保普通文件、统一用大写单位如+100m,并结合du -h和sort -hr排序确认真大户,删前须用lsof检查占用。

直接用 find 查大文件是最高效的第一步,但必须加关键限制,否则容易卡死、误扫或结果不准。核心是:限定范围、排除干扰、精准筛选、再排序确认。
限定路径和文件类型,避免全盘扫描
别用 find / -size +1G 这种命令——它会扫 /proc、/sys、挂载点甚至 NFS 卷,轻则报错刷屏,重则拖垮低内存服务器。正确做法是:
- 只查目标分区,比如
find /var -xdev -type f -size +500M(-xdev防跨分区) - 明确只找普通文件,加
-type f,排除目录、设备文件、socket 等 - 想查日志类目录?换成
find /var/log -type f -size +100M,更聚焦也更安全
大小单位要写对,+1G ≠ +1000M
find 的 -size 参数认的是字节块,不是十进制 MB:
-
+1G表示大于 1024×1024×1024 字节(即 1 GiB),这是标准用法 -
+1000M实际约等于 1.024 GiB;而小写+1000m是指 1000 个 512 字节块 ≈ 512 KB,完全不是你要的大文件 - 建议统一用大写字母单位:
+100M、+2G,兼容性好且语义清晰
结合 du 和 sort 快速定位“真大户”
find 列出的文件可能太多,直接删风险高。加一层排序能快速识别真正占空间的几个:
- 查出文件后接
-exec du -h {} \; | sort -hr | head -10,例如:find /var/log -type f -size +50M -exec du -h {} \; 2>/dev/null | sort -hr | head -10 -
sort -hr中的h支持人类可读单位(如 2.3G、890M),r倒序,缺一不可 - 如果只想看路径不带大小,用
-ls替代:find /home -xdev -type f -size +200M -ls | head -10
删之前务必确认是否可删、是否被进程占用
很多空间没释放,是因为文件虽删了但进程还在写——inode 没释放。操作前请检查:
- 用
lsof +L1查已被删除但仍在占用空间的“幽灵文件” - 用
lsof /path/to/file看该文件是否被 tail、rsyslogd、Java 或数据库进程打开 - 确认无用且无占用 →
rm -f
是活跃日志但需腾空间 →truncate -s 0 /path/to/file(保留句柄,不中断写入)
只是清空内容 →> /path/to/file比echo >更干净











