服务器跑了一段时间后,磁盘空间很容易被日志归档、备份压缩包、数据库临时文件、上传的媒体文件等大文件慢慢侵蚀。宝塔面板虽然提供了文件管理和磁盘信息查看功能,但默认的界面并不会递归汇总所有目录的大小,面对几百GB的磁盘时手动点开每个目录效率太低。其实只要把面板自带的文件排序和终端命令结合起来,就能快速实现一顿操作定位大文件垃圾。下面介绍具体做法。

一、面板文件管理配合大小排序
登录宝塔面板后,进入左侧文件菜单,默认会打开 /www 目录,这是多数网站数据的存放位置。文件列表顶部有名称、大小、修改时间等列,点击大小列可以让当前目录下的文件按体积排序。对于 /www/wwwroot 下单个上传包或压缩包,这个方法能很快看出谁占用了最多空间。
但这种排序有一个明显限制:它只统计当前层级,子目录不会递归汇总。例如 /www/wwwroot/site1 可能占用了30GB,但文件列表里只显示 site1 目录本身,大小列有时显示为 4KB 或空值。如果站点很多,仍然需要逐层进入目录才能找到真正的大文件。此时可以用终端命令补足这个短板。
顺带一提,宝塔面板首页的磁盘信息能展示整块磁盘的使用率,点开后可以看到每个挂载点的占用百分比,但它只到分区级别,无法定位具体文件。因此要做精细扫描,最直接的方式还是去面板的终端里执行命令。
二、find 命令一键列出大文件
宝塔面板左侧的终端功能可以执行Linux命令,直接用 root 身份登录。扫描大文件最常用的命令是 find,它支持按文件名、修改时间、文件大小等条件过滤。下面这条命令会从根目录开始查找大于100MB的文件,并按从大到小显示前20条。
# 扫描根目录下大于100MB的文件,按大小降序显示前20个
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk '{print $5, $9}' | sort -rh | head -20
这条命令中 -type f 表示只查找普通文件,-size +100M 表示体积大于100MB,-exec ls -lh {} \; 会用人类可读的格式显示文件大小,2>/dev/null 用来丢弃权限不足的报错信息。最后的管道排序和截取可以保证输出不会太长。
如果只想扫描网站目录,避免全盘扫描耗时太长,可以把 / 换成 /www 或 /www/wwwroot。比如扫描项目目录时更适合用下面的 du 命令,它能按目录汇总大小。
# 列出 /www/wwwroot 下各网站目录的占用大小 du -sh /www/wwwroot/* 2>/dev/null | sort -rh | head -20
du -sh 中的 s 表示汇总目录,h 表示人类可读单位,星号代表目录下每一项。结合 sort 和 head 就能快速看出哪个网站最占空间。这个命令特别适合多站点服务器,几下就能锁定目标。
三、ncdu 让磁盘分析变成交互式操作
如果觉得命令行输出不够直观,还可以在服务器上安装 ncdu,它提供一个类似文件管理器的交互界面,能逐级展开目录并显示每个子目录的占用大小。宝塔终端里执行安装命令即可,CentOS 和 Ubuntu 的包管理器命令略有不同。
# CentOS/RedHat 安装 yum install ncdu -y # Ubuntu/Debian 安装 apt update && apt install ncdu -y # 扫描 /www 目录 ncdu /www
运行 ncdu /www 后,终端会进入一个全屏界面,左侧是目录名,右侧是占用空间和百分比。按上下方向键移动,回车进入子目录,按 d 可以快速删除选中的文件或目录。相比 find 命令,ncdu 更适合需要边看边清理的场景,删除操作也有确认提示,相对安全。
不过 ncdu 扫描大目录时会占用一定 CPU 和磁盘 IO,如果服务器正在跑高负载业务,建议放到凌晨低峰期执行。扫描完成后按 q 退出,不会影响面板其他功能。
四、结合计划任务实现自动清理
找到大文件后,有些可以直接删除,有些则需要先备份再处理。宝塔面板的计划任务可以定时执行清理脚本,适合定期清理日志、过期备份这类可再生成的文件。例如网站日志每天都会增长,超过30天的日志通常可以删掉,可以在计划任务里添加 Shell 脚本。
# 每天清理 /www/wwwlogs 下修改时间超过30天的 .log 文件 find /www/wwwlogs -type f -name "*.log" -mtime +30 -delete
这条命令中的 -mtime +30 表示修改时间超过30天,-delete 会直接删除匹配到的文件。为了避免误删,可以先用不带 -delete 的命令生成清单,确认无误后再执行删除。下面这条命令会把超过200MB的文件路径写入 /root/bigfiles.txt。
# 先列出 /www 下超过200MB的文件并保存到清单
find /www -type f -size +200M -exec ls -lh {} \; 2>/dev/null | awk '{print $5, $9}' > /root/bigfiles.txt
需要注意的是,删除操作必须谨慎,尤其不要对 /usr、/lib、/bin 等系统目录使用 -delete。如果不确定文件是否还有用,可以只记录清单或者把文件移动到备份目录保留一段时间。日志清理后,如果磁盘仍然紧张,还要检查数据库 binlog、Docker 镜像、旧内核等隐藏占用,但这些不属于网站文件垃圾,需要单独处理。
以上就是利用宝塔面板扫描和清理服务器大文件垃圾的主要思路。核心方法是文件管理器做初筛,终端 find 和 du 做精确定位,ncdu 帮助交互分析,最后通过计划任务把清理动作自动化。把这套流程跑顺之后,服务器磁盘空间会稳定很多,也不用再担心半夜收到磁盘告警。