在 CentOS 上做“脚本化 cleanup”通常分为几类:系统更新与旧包清理、日志清理、临时文件清理、磁盘占用分析、可选的服务/用户清理。下面给你一个可直接用的 Bash 脚本模板,并解释每部分在做什么、注意事项。
保存为 centos_cleanup.sh:
#!/bin/bash
# centos_cleanup.sh
# 适用于 CentOS 7 / 8 / Stream
set -e
echo "==> 清理 yum/dnf 缓存"
if command -v dnf >/dev/null 2>&1; then
dnf clean all
else
yum clean all
fi
echo "==> 删除旧内核(保留最新 2 个)"
if command -v dnf >/dev/null 2>&1; then
dnf remove -y $(dnf repoquery --installonly --latest-limit=-2 -q)
else
package-cleanup --oldkernels --count=2 -y
fi
echo "==> 清理日志"
journalctl --vacuum-time=7d
find /var/log -type f -name "*.log" -mtime +7 -delete
find /var/log -type f -name "*.gz" -delete
echo "==> 清理临时文件"
rm -rf /tmp/*
rm -rf /var/tmp/*
echo "==> 清理 Docker(如已安装)"
if command -v docker >/dev/null 2>&1; then
docker system prune -af
fi
echo "==> 磁盘使用情况"
df -h
echo "==> Cleanup 完成"
赋予执行权限:
chmod +x centos_cleanup.sh
sudo ./centos_cleanup.sh
yum clean alldnf clean all旧内核会占 /boot,容易导致更新失败。
journalctl --vacuum-size=500M
journalctl --vacuum-time=7d
du -x -h / | sort -rh | head -20
每周日凌晨跑一次:
sudo crontab -e
0 3 * * 0 /root/centos_cleanup.sh >> /var/log/cleanup.log 2>&1
✅ 建议:
❌ 不建议自动删除:
/var/lib/mysql如果你告诉我:
我可以帮你定制一个更安全的 cleanup 脚本。