Linux 查找大文件和大目录:find、du、sort 与 lsof 排查
· 阅读需 2 分钟
磁盘空间突然不足时,通常需要先定位占用空间较大的文件。Linux 可以组合使用 find、du 和 sort,快速找出指定目录中的大文件。
查找大于 800 MB 的文件
进入需要排查的目录后执行:
find . -type f -size +800M -print0 | xargs -0 du -h | sort -hr
参数说明:
.:从当前目录开始递归查找。-type f:只查找普通文件,不包含目录。-size +800M:筛选大于 800 MB 的文件。-print0与xargs -0:正确处理文件名中的空格、中文和特殊字符。du -h:以 KB、MB、GB 等易读格式显示实际占用空间。sort -hr:按照容量从大到小排序。
在指定目录中查找
例如查找 /var 下大于 1 GB 的文件:
sudo find /var -type f -size +1G -print0 | xargs -0 du -h | sort -hr
如果只需要文件路径和逻辑大小,可以直接使用 find:
find /var -type f -size +1G -printf '%s %p\n' 2>/dev/null | sort -nr
其中 %s 表示文件字节数,%p 表示完整路径。
查看目录占用空间
有时空间并不是被单个大文件占满,而是某个目录中积累了大量小文件。可以先统计一级子目录:
du -h --max-depth=1 /var 2>/dev/null | sort -hr
确认较大的目录后,再进入该目录继续执行相同命令。
常见问题
出现 Permission denied
普通用户无法读取部分系统目录,可以使用 sudo,或者隐藏无权限访问的错误信息:
find / -type f -size +1G 2>/dev/null
找到文件后能否直接删除
不要看到大文件就立即执行 rm。应先用 ls -lh 文件路径 确认文件用途,并检查它是否正在被进程使用:
lsof /path/to/large-file
日志、数据库文件和容器数据应通过对应程序的清理或轮转机制处理,避免直接删除导致服务异常。