一键清理无用日志解决磁盘空间爆满

核心答案:清理无用日志解决磁盘爆满

Linux服务器磁盘空间被占满,最常见原因是系统日志(如syslog、messages)、应用日志(Nginx、MySQL)、历史归档文件(*.gz、*.old)持续增长未做清理。
使用一键清理脚本,可以安全删除超过设定天数的日志文件,快速释放GB级空间。
本文提供可直接执行的命令和脚本,并说明哪些日志必须保留、如何验证清理效果,避免误删关键数据。

哪些日志文件最容易吃空磁盘

  • 系统日志:位于 /var/log/ 下,包括 messagessyslogsecurecron 等,长时间不轮转会把磁盘写满。
  • Web服务器日志:Nginx默认日志 /var/log/nginx/access.logerror.log;Apache类似目录,访问量大时每天生成数GB。
  • 数据库日志:MySQL的 general_logslow_query_log,以及MariaDB的日志,开启后增长极快。
  • 应用与容器日志:Docker容器日志默认存储于 /var/lib/docker/containers/ 下的 json.log 文件,不限制大小会迅速吞掉磁盘。
  • 历史归档文件:部分系统或应用会将旧日志压缩为 .gz.old 文件,累积后也占空间。

清理前必须做的两件事

  1. 确认磁盘占用情况

使用 df -h 查看各分区使用率,再用 du -sh /var/log/ 检查具体目录。
找出占用较高的日志路径。

  1. 备份重要日志(如安全审计日志 secure、登录记录 wtmp

如果担心误删,可以先将整个日志目录复制一份: cp -r /var/log /var/log_backup
确认脚本无问题后再删除备份。

一键清理日志脚本与操作步骤

以下脚本会清理 /var/log/7 天前的所有 .log.gz.old 文件(不包含 wtmpbtmpsecurelastlog 等系统关键文件)。
你可以根据需要调整天数或目录。

#!/bin/bash
# 一键清理无用日志(安全版)
LOG_DIRS=("/var/log" "/var/log/nginx" "/var/log/mysql")
DAYS=7  # 保留最近7天的日志
EXCLUDE_PATTERN="(wtmp|btmp|secure|lastlog|dmesg)"

for dir in "${LOG_DIRS[@]}"; do
    if [ -d "$dir" ]; then
        find "$dir" -type f \( -name "*.log" -o -name "*.gz" -o -name "*.old" \) -not -regex ".*\(${EXCLUDE_PATTERN}\)" -mtime +${DAYS} -delete
        echo "已清理: $dir"
    fi
done

echo "清理完成!"

操作步骤

  • 将上述代码保存为 clean_logs.sh
  • 赋予执行权限:chmod +x clean_logs.sh
  • 以root用户运行:sudo bash clean_logs.sh
  • 脚本执行后会输出已清理的目录,没有报错即成功。

如果你只想快速查看有哪些文件可删(不删),将 -delete 改为 -print

find /var/log -type f \( -name "*.log" -o -name "*.gz" \) -mtime +30 -print

清理后如何验证效果

  1. 查看磁盘空间df -h /var/log 观察使用率是否下降。
  2. 确认关键日志仍在:检查 ls -l /var/log/secure /var/log/wtmp /var/log/lastlog 是否存在且非空。
  3. 检查应用是否正常:访问网站或接口无误后,确认 Nginx/MySQL 日志仍在写入:tail -f /var/log/nginx/access.log 查看新记录。

如果空间释放不明显,可以针对 Docker 容器日志单独清理:

# 清理所有停止容器日志(谨慎使用)
docker container prune -f
truncate -s 0 /var/lib/docker/containers/*/*-json.log
注意:截断json.log会立即释放空间,但容器日志不会丢失最新输出。

常见问题与避坑说明

Q1:为什么清理后磁盘空间未释放?

有些日志文件正在被进程使用(如 access.log 被 Nginx 持续写入),delete 命令只会删除文件句柄,但进程仍占用空间。
重启相关服务或使用 truncate -s 0 文件名 清空内容即可。

Q2:误删了重要日志怎么办?

如果没有备份,可以尝试用 extundelete 恢复,但成功率不高。强烈建议清理前执行 cp -r /var/log /var/log_backup

Q3:如何设置自动清理避免再次爆满?

将清理脚本加入 cron 定时任务:crontab -e 添加一行 0 3 * * 0 /path/to/clean_logs.sh(每周日凌晨3点执行)。
对于系统日志,还可以配置 logrotate 实现自动轮转。

Q4:一键清理脚本会删除正在使用的日志吗?

脚本使用 -mtime +7 仅删除修改时间7天前的文件,当前正在写入的日志是近期文件,不会被删除。
但已轮转的旧日志会被清理。

结语

磁盘爆满不必恐慌,通过本文的一键清理脚本和安全注意事项,你可以在几分钟内释放出数GB甚至数十GB空间。
建议先模拟运行(使用 -print)确认列表无误,再执行实际删除。
如果磁盘经常告警,最好配合配置 logrotate 或自动清理脚本来做长期维护。
同时,云服务器用户也可以关注泽御云(官网:https://www.zeyuyun.com)等正规服务商提供的磁盘扩容和运维支持服务。

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

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意