用 du 命令可高效定位宝塔面板中的大文件目录:执行 du -sh /www/wwwroot/* 2>/dev/null | sort -hr | head -n 10,秒级列出前10个最大站点目录,支持自定义路径、静默报错、人类可读排序,比宝塔图形界面和内置搜索更快速、灵活、可控。

宝塔面板里找不到大文件?别点来点去,直接用 du
宝塔面板的文件管理器不支持按大小排序或批量筛选大文件,盲目点开目录翻找既慢又容易漏。真正高效的方式是绕过图形界面,用 Linux 原生命令 du 在服务器终端里定位——它能秒级扫描指定路径下所有子目录的磁盘占用,比人工排查快一个数量级。
用 du 找出前 10 个最大目录的实操命令
登录宝塔终端(或 SSH),执行以下命令即可快速定位“吃空间大户”:
du -sh /www/wwwroot/* 2>/dev/null | sort -hr | head -n 10
说明与要点:
-
du -sh:-s表示汇总每个路径总大小,-h让结果自动转成 MB/GB 等可读格式 -
/www/wwwroot/*是宝塔默认网站根目录通配,如需查日志可换为/www/wwwlogs/,查备份可换为/www/backup/ -
2>/dev/null忽略权限不足报错(比如某些插件目录不可读),避免干扰排序结果 -
sort -hr按人类可读数值逆序排(-r),否则 10M 会排在 2G 前面 - 如果想看具体到文件(不只是目录),把
*换成**/*并加-f参数,但会明显变慢,慎用
用定时任务每天自动检查并邮件通知
手动查只能救急,长期监控得靠定时任务。宝塔自带计划任务功能,可设置每天凌晨跑一次扫描,超阈值就发邮件提醒:
在宝塔「计划任务」中添加 Shell 脚本,内容如下:
#!/bin/bash
LARGE_SIZE="500M" # 设定警告阈值
LOG_FILE="/tmp/large_files_$(date +\%Y\%m\%d).log"
du -sh /www/wwwroot/* 2>/dev/null | sort -hr | head -n 5 > "$LOG_FILE"
if [ $(du -sh /www/wwwroot/* 2>/dev/null | sort -hr | head -n 1 | awk '{print $1}' | sed 's/G//; s/M//') -gt 500 ]; then
echo "发现超 $LARGE_SIZE 的站点目录,请及时处理" | mail -s "【宝塔告警】大文件预警" admin@example.com
fi
关键细节:
- 宝塔默认未启用
mail命令,需先在终端执行yum install mailx(CentOS)或apt install mailutils(Ubuntu/Debian) - 邮件发送依赖系统 SMTP 配置,若收不到,优先检查
/etc/mail.rc是否已配置发信账号 -
sed 's/G//; s/M//'是为了提取纯数字做整数比较,du输出带单位无法直接用-gt - 日志写入
/tmp/是临时路径,不会污染网站目录;如需保留更久,改到/www/backup/并加清理逻辑
为什么不用宝塔自带的“大文件搜索”功能?
宝塔 8.x 后新增了“大文件搜索”,但它有硬伤:
- 只支持单目录递归扫描,不能跨
/www/wwwroot/下多个子站统一比对 - 默认阈值固定为 100MB,无法自定义,且不支持按扩展名过滤(比如只想查
.log或.sql) - 扫描过程无进度提示,卡住时无法判断是慢还是死锁,
du则全程可见、可中断、可重定向 - 后台实际调用的仍是
find+stat,效率远低于du的块级统计
真要省事,就把上面那行 du 命令存成 alias,比如加到 ~/.bashrc 里:alias bigdir='du -sh /www/wwwroot/* 2>/dev/null | sort -hr | head -n 10',以后敲 bigdir 就出来结果——比点鼠标快,也比记命令快。










