跳到主要内容

Linux 查找大文件和大目录:find、du、sort 与 lsof 排查

· 阅读需 2 分钟
Apache王也道长
软件开发者与技术作者

磁盘空间突然不足时,通常需要先定位占用空间较大的文件。Linux 可以组合使用 finddusort,快速找出指定目录中的大文件。

查找大于 800 MB 的文件

进入需要排查的目录后执行:

find . -type f -size +800M -print0 | xargs -0 du -h | sort -hr

参数说明:

  • .:从当前目录开始递归查找。
  • -type f:只查找普通文件,不包含目录。
  • -size +800M:筛选大于 800 MB 的文件。
  • -print0xargs -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

日志、数据库文件和容器数据应通过对应程序的清理或轮转机制处理,避免直接删除导致服务异常。

本文阅读量:--

总访问量 -- · 访客数 --