查最大文件最可靠方式是du+find组合:du -ah | sort -hr定位,find -type f -size +阈值精准筛选,二者互补;ls -ls仅限当前目录且不反映真实磁盘占用,易漏关键大文件。

直接查最大的文件,du + find 是最可靠的方式;ls -lS 只能看当前目录,且不递归、不处理硬链接、不反映真实磁盘占用,容易漏掉真正吃空间的文件。
用 find 找出整个系统中最大的文件(慎用)
全盘扫描开销大、耗时长,且可能因权限不足中断。建议限定路径,比如只查 /var、/home 或 /tmp:
-
find /var -type f -size +100M -exec ls -lh {} \;:列出所有大于 100MB 的文件,带可读大小和路径 - 加
2>/dev/null忽略权限错误:find /var -type f -size +100M -exec ls -lh {} \; 2>/dev/null - 若要严格按大小排序取前 10:
find /var -type f -printf '%s %p\n' 2>/dev/null | sort -nr | head -10 | awk '{print $2}' | xargs -r ls -lh
注意:-printf '%s %p\n' 输出的是字节数,sort -n 按数值排,-r 倒序;awk 提取路径再用 ls -lh 补充可读格式。
用 du 配合 sort 查当前目录下最大文件(推荐日常用)
du 天然支持统计文件(不只是目录),但默认不显示单个文件——得加 -a:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
-
du -ah . | sort -hr | head -20:列出当前目录及子目录下所有文件+目录,按大小倒序取前 20 -
du -ah --max-depth=1 . | sort -hr | head -10:只查当前层(不含深层嵌套),更快更聚焦 - 如果只想看文件(排除目录),加
grep -v '/$':du -ah . | grep -v '/$' | sort -hr | head -10
关键点:-h 和 sort -h 必须配套,否则 1K、234M、2G 会被当字符串排序,结果错乱。
为什么不用 ls -lS?
ls -lS 看起来简单,但它只做三件事:列出当前目录项、按 ls 输出里的 size 字段排序、不递归、不统计硬链接真实占用、且 size 是逻辑大小(不是磁盘块占用)。典型坑:
- 一个 2GB 的稀疏文件(
dd if=/dev/zero of=sparse bs=1G seek=1 count=0)用ls -l显示 0 字节,du -h才反映实际磁盘占用 - 日志轮转后残留的已删除但进程仍打开的文件,
ls根本看不到,du也统计不到,只有lsof + /proc/*/fd能揪出来 -
ls -lS不处理符号链接目标,du -L才能穿透软链算源文件大小
真正吃空间的大文件常藏在哪?
别一上来就扫全盘。先用 df -h 看哪个挂载点快满了,再针对性查:
-
df -h | grep '9[0-9]%\|100%':快速定位高使用率分区 - 对应分区下优先查:
/var/log(尤其journald、nginx、mysql日志)、/var/spool(邮件队列、打印缓存)、/root或/home/*下的临时包/镜像/数据库 dump - 查完记得确认是否被进程占用:
lsof +L1 /var/log看是否有已删但仍 open 的日志文件
最大文件往往不在显眼路径,而是在服务默认数据目录深处,或者被重命名隐藏(如 .old、.bak、~ 结尾)——find 的 -name 或 -regex 配合更有效。










