Linux查找大文件

Linux查找大文件

引言

服务器磁盘爆满时,df先看哪个分区满,再用du一层层往下钻,找到吃掉空间的大目录和大文件。很多人只会df -h,却定位不到具体是哪个文件,这里讲完整排查链路。

第一步看分区占用

df -h

看Use%和挂载点,确认是/、/data还是/var满,别在没满的分区里瞎找。

第二步定位大目录

du -sh /* 2>/dev/null | sort -rh | head

du -sh统计每个一级目录大小,sort -rh按大小倒序,head取前几名,快速锁定大头目录,再逐层深入:

du -sh /var/* 2>/dev/null | sort -rh | head

第三步找超过100M的单文件

find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null

-size +100M表示大于100MB,2>/dev/null丢弃无权限报错,直接列出大文件路径和大小。

常见膨胀位置

  • /var/log:日志没轮转,单个日志几个G;
  • /tmp:临时文件没清理;
  • Docker:/var/lib/docker镜像和容器层堆积;
  • 网站上传目录、数据库binlog。

处理建议

  • 日志优先清空而不是删文件(> log.log),避免占用文件句柄不释放;
  • Docker用docker system prune清理悬空镜像;
  • 删之前确认文件没被进程占用,lsof | grep 文件名;
  • 不要直接rm正在写入的日志,用truncate -s 0截断。

注意事项

  • du统计含磁盘占用,find看文件真实大小,两者结合;
  • 根目录全盘find慢,先缩小到df定位的分区;
  • 系统目录(/usr、/lib)别乱删,只清理业务数据和日志。

总结

df -h定位满的分区,du -sh逐层排序找大目录,find -size找大文件,先看日志和Docker,清空用truncate别rm占用文件。按分区→目录→文件三层下钻,几分钟就能找到磁盘元凶。


emer 发布于  2026-10-19 07:18