🎉 查找大文件:du|find|sort
在 Linux 中查找大文件,核心思路是 “遍历文件系统 + 按大小排序” 。与查找大目录(侧重汇总统计)不同,查找大文件更关注单个文件的体量。
这里为你整理了几种最实用的命令,按推荐优先级排列。
📋 核心命令速查表
| 使用场景 | 推荐命令(复制即用) | 说明 |
|---|---|---|
| 最常用(全盘扫描前N大) | sudo find / -type f -exec du -h {} + 2>/dev/null \| sort -rh \| head -20 |
万能组合,列出全盘最大的20个文件。 |
| 按大小阈值过滤 | sudo find / -type f -size +1G -exec ls -lh {} \; 2>/dev/null |
只找大于1GB的文件,快速定位“巨型文件”。 |
| 当前目录下查找 | du -ah . \| sort -rh \| head -20 |
快速查看当前目录(含子目录)中最大的文件和文件夹,操作最轻量。 |
| 交互式图形探索 | sudo ncdu -x / |
强烈推荐!可视化界面,方向键下钻,按d可直接删除。 |
| 仅文件名(超快速) | sudo find / -type f -size +500M 2>/dev/null |
只列出路径,不显示大小,速度极快,适合先“捞”再细查。 |
-
实战命令详解
1. 黄金组合:find + du + sort(全盘扫描)
这是最标准的万能命令,能递归遍历整个根目录,并按照文件大小从大到小排序。
# 查找系统中最顶级的 20 个大文件 sudo find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -20-
-exec du -h {} + :对找到的每个文件执行du -h获取大小。 -
2>/dev/null:屏蔽权限不足(如/proc)的报错,保持输出干净。 -
sort -rh:-r 降序(大的在前),-h识别人类可读单位(K/M/G)。
进阶优化:若只想查
/var 或/home,把/换成对应路径即可。2. 按阈值过滤:只查巨型文件
如果你知道系统里可能有超大日志(比如超过1G),用
-size直接过滤效率更高:# 查找大于 1GB 的文件,并显示详细信息 sudo find / -type f -size +1G -exec ls -lh {} \; 2>/dev/null # 查找大于 500MB 的文件(只列路径) sudo find / -type f -size +500M 2>/dev/null-size +1G 支持c(字节)、k(KB)、M(MB)、G(GB)。
3. 限定当前目录:最快下钻
如果磁盘告警发生在特定挂载点(比如
/home满了),没必要扫全盘:# 查看 /home 下最大的前 15 个文件(包含子目录) sudo du -ah /home | sort -rh | head -15注意:
du -a 会同时列出文件和目录,如果你只想看文件,可以加 grep -v "/$" 去掉目录行。4. 交互式神器:ncdu
如果在生产环境,强烈建议安装
ncdu。它扫描后生成一个可交互的树形列表,按大小排序,进入大文件夹就像浏览文件管理器一样直观。# 安装(若无) # Ubuntu: sudo apt install ncdu # CentOS: sudo yum install ncdu # 扫描根目录(-x 限制只扫当前分区,避免进入 /proc 卡死) sudo ncdu -x /扫描完成后,按
n 可按文件名排序,按s 按大小排序,按d直接删除选中的大文件。 -
-
高级巡检技巧
-
1. 排除无关目录(避免报错和卡顿)
扫描根目录时,
/proc、/sys、/dev 是虚拟文件系统,不仅占空间(显示为0)还容易报错。使用-path排除:sudo find / -type f -size +100M -not -path "/proc/*" -not -path "/sys/*" -exec ls -lh {} \; 2>/dev/null-
2. 查找占用空间但已被删除的文件
有时候
df 显示磁盘满,但du 却找不到大文件,很可能是有进程正在写入一个已删除的文件。# 查看被删除但仍被进程占用的文件(这些文件仍在占用磁盘空间) sudo lsof | grep deleted或者查看
/proc下的文件描述符:sudo ls -l /proc/*/fd/* 2>/dev/null | grep deleted-
3. 按文件类型排查
如果怀疑是核心转储文件(
core)或压缩包占满空间:# 查找所有 .core 或 .tar.gz 文件并排序 sudo find / -type f \( -name "*.core" -o -name "*.tar.gz" \) -exec du -h {} + 2>/dev/null | sort -rh -
⚠️ 避坑指南
- 务必加
sudo:否则普通用户看不到/root、其他用户家目录及系统关键目录,会遗漏真正的大文件。 - 避开业务高峰期:
find / -exec du会消耗大量磁盘 I/O,建议在低峰期执行。 - 确认文件后可删除:删除前务必确认文件用途(如老的 Tomcat 日志、数据库备份),用
ls -lh 看修改时间,或用file命令看文件类型,避免误删系统库文件。
一句话总结:日常巡检优先用 du -ah /path | sort -rh | head -20 快速看当前目录;若全盘排查,直接用 sudo find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -20 一键搞定。若需要交互式深度分析,直接上 ncdu。
阅读:194
发布时间: