磁盘空间爆满一键清理无用日志脚本

为什么日志会撑爆磁盘空间?

服务器运行久了,系统日志(如 /var/log)、应用日志(如 Nginx、MySQL 日志)和临时文件会不断堆积。
如果不定期清理,很容易出现 磁盘空间爆满,导致服务无法写入数据。
手动逐个删除太麻烦,而且新手容易误删重要文件。
本文提供一个安全、可带参数的一键清理 Shell 脚本,你只需复制保存、赋予权限就能运行,适合 CentOS / Ubuntu 等主流 Linux 系统。

---

准备工作:先查看当前磁盘占用

在运行任何清理之前,先用以下命令确认哪些目录占用了大量空间:

df -h     # 查看各分区总体使用率
du -sh /var/log   # 检查日志目录具体大小

重点关注 /var/log、/tmp、/var/cache 等目录。
如果某个日志目录超过几 GB,就可以用我们的脚本来清理。

---

编写一键清理无用日志脚本

创建一个脚本文件 clean_logs.sh:

vim clean_logs.sh

粘贴以下内容(请根据实际环境微调目录和保留天数):

#!/bin/bash
# 一键清理无用日志和临时文件
# 安全模式:默认只列出待删除文件,加 --run 参数才真正删除

LOG_DIRS=(
    "/var/log"
    "/var/cache"
)
EXPIRE_DAYS=3   # 保留最近3天的日志

if [ "$1" == "--run" ]; then
    ACTION="delete"
else
    ACTION="list"
fi

echo "扫描待清理文件..."
for dir in "${LOG_DIRS[@]}"; do
    if [ -d "$dir" ]; then
        if [ "$ACTION" == "list" ]; then
            find "$dir" -type f -name "*.log" -mtime +$EXPIRE_DAYS 2>/dev/null
        else
            find "$dir" -type f -name "*.log" -mtime +$EXPIRE_DAYS -exec rm -f {} \; 2>/dev/null
            echo "已清理 $dir 中超过 $EXPIRE_DAYS 天的日志"
        fi
    fi
done

# 清理临时文件(超过2天未使用的临时文件)
if [ "$ACTION" == "delete" ]; then
    find /tmp -type f -atime +2 -delete 2>/dev/null
    echo "已清理 /tmp 中超过2天未访问的文件"
fi

if [ "$ACTION" == "list" ]; then
    echo "以上是待清理文件列表(共 ${#files[@]} 个)。如需真正删除,请执行:bash clean_logs.sh --run"
else
    echo "清理完成"
fi
说明:脚本默认先预览(只列出不删除),确保无误后再加 --run 实际执行。这种设计可以防止新手误删重要日志。

保存退出后,赋予执行权限:

chmod +x clean_logs.sh

---

执行脚本并设置定时任务

先模拟运行,查看会清理哪些文件:

./clean_logs.sh

确认没有问题后,真正执行清理:

./clean_logs.sh --run

如果你希望每周自动运行一次,可以添加到 crontab:

crontab -e

添加以下行(每周日凌晨3点执行):

0 3 * * 0 /path/to/clean_logs.sh --run >> /var/log/clean_logs.log 2>&1

---

避坑指南(新手必读)

  1. 不要用 rm -rf /var/log:直接删除整个日志目录可能导致日志系统报错。我们只删除超过保留天数的 .log 文件,不动目录结构。
  2. 先预览再执行:第一次运行时务必先用不带参数的脚本预览,确认不会误删正在写入的日志。
  3. 保留天数根据需求调整:对于审计要求严格的业务,建议保留30天;一般服务器保留3-7天即可。
  4. 日志被占用无法删除:如果某个日志正在被进程写入,rm 会成功但磁盘空间不会立即释放。需要先 systemctl restart rsyslog 或重启对应服务。
  5. 不要清理 /var/log/wtmp、/var/log/btmp 等特殊日志:这些文件记录了系统登录历史,通常应保留。我们的脚本只清理 *.log,不会误删它们。

---

效果验证:对比清理前后的磁盘占用

清理前后建议分别执行 df -h 对比,例如:

df -h

观察 / 分区的 已用 和 可用 数值。
如果从 98% 降到了 50%,说明脚本生效了。
更详细的验证可以用:

du -sh /var/log   # 再次查看日志目录大小

---

常见问题(FAQ)

Q:运行脚本提示 Permission denied?
A:记得先 chmod +x clean_logs.sh,或者用 bash clean_logs.sh 直接执行。

Q:我能不能一次性删除所有日志而不保留天数?
A:不建议。至少保留最近几天的日志,方便排查近期故障。你可以将 EXPIRE_DAYS 改为 0,但请谨慎。

Q:清理后空间没有明显减少?
A:查看是否还有磁盘占用大户(如 Docker 镜像、核心转储文件)。日志清理只是第一步,其他文件可能需要额外处理。

---

结语

通过这个一键清理脚本,你可以快速安全地释放被日志撑爆的磁盘空间。
关键是先预览再删除,并设置自动定时任务,让服务器永远保持干净。
如果你正在排查磁盘占满问题,建议先按本文步骤操作一遍,再根据自身环境微调脚本中的目录和保留天数。
遇到异常时请回看避坑指南部分。

分享到:
上一篇
负载均衡Nginx分发请求降低单服压力
下一篇
多PHP版本切换兼容老旧外贸程序
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意