这个场景要解决什么
服务器空间告急时,先用一条命令把大文件揪出来:find 按大小阈值筛选,把字节数和路径一起输出,交给 sort 从大到小排,再用 head 看前几名。关键在于用 -xdev 把扫描限制在当前文件系统内,避免顺着挂载点翻到网络存储或其它磁盘上,那样既慢又会把总量算得没有意义。
基本信息
| 适用场景 | 磁盘使用率告警,需要快速找出占空间的大文件 |
|---|---|
| 核心命令 | find 加 -size、-xdev、-type f,再交给 sort -rn 与 head |
| 关键选项 | -size +500M 阈值、-xdev 不跨文件系统、-printf 自定义输出、-mtime 限制时间 |
| 口径提醒 | find 按文件大小统计,与 du 的实际占用口径不完全一致 |
典型使用场景
- 磁盘告警处置:快速找出占空间最多的文件,判断能否直接清理
- 清理前评估:确认是日志、转储文件还是镜像包在吃空间
- 定期盘点:把大文件清单纳入巡检脚本,观察增长趋势
- 异常定位:某个服务写出了超大 core 文件或异常临时文件
- 与 du 交叉核对:目录汇总与文件清单对不上时,两边都看一遍
常用示例
常用示例
find /data -xdev -type f -size +500M -printf '%s %p\n' 2>/dev/null | sort -rn | head -20
find / -xdev -type f -size +1G 2>/dev/null | head -20
find /var -xdev -type f -size +100M -mtime -1 -exec ls -lh {} + # 只看最近一天新增的大文件
du -x -h --max-depth=1 / | sort -h | tail -20 # 按目录汇总对照大小写法
| 写法 | 含义 |
|---|---|
| -size +500M | 大于 500 MiB 的文件 |
| -size -100k | 小于 100 KiB 的文件 |
| -size 1G | 向上取整后恰好为 1 GiB,实际很少命中 |
| -size +1048576c | 以字节为单位精确表达阈值 |
| -empty | 空文件或空目录 |
-printf 里的 %s 是字节数、%p 是路径。直接输出字节数再交给 sort -rn 排序,比先用 ls 看格式化后的大小准得多;-printf 是 GNU find 的扩展,其它实现可以用 -exec ls -l {} + 替代。
-xdev 只在本文件系统内查找。不加它时 find 会跨进挂载点,扫到网络存储上可能几分钟都出不来,统计出来的总量也会混入别的盘。
删除大文件前先确认没被进程占用:对路径执行 lsof,有输出说明句柄还在,这时删掉目录项空间也不会释放,需要重启对应服务。