CentOS服务器磁盘空间告急,用什么垃圾清理脚本?

对于长期运行的 CentOS 服务器而言,系统日积月累产生的日志文件、临时文件、软件缓存等会逐渐占用大量磁盘空间,甚至影响系统性能,手动清理不仅繁琐,而且容易遗漏,创建一个自动化、可定制的清理垃圾脚本,是系统管理员一项高效且必要的日常维护工作。

CentOS服务器磁盘空间告急,用什么垃圾清理脚本?

识别主要的垃圾来源

在编写脚本之前,我们首先需要明确 CentOS 系统中常见的“垃圾”文件分布在何处,主要可以分为以下几类:

  • 软件包缓存:使用 yumdnf 安装软件后,下载的安装包会保留在 /var/cache/yum//var/cache/dnf/ 目录下。
  • 系统日志:日志文件位于 /var/log/ 目录下,如 messages, secure, cron 等,以及 systemd 的日志,它们会无限制地增长。
  • 临时文件:系统和应用程序产生的临时文件存放在 /tmp/var/tmp 目录中。
  • 旧内核:系统更新后,旧的内核版本默认不会被删除,占用着 /boot 分区的宝贵空间。
  • 孤立软件包:曾作为依赖被安装,但现在其主应用已卸载,这些包就成了“孤儿”。

构建清理脚本:分步解析

一个健壮的清理脚本应当具备功能模块化、执行安全的特点,下面我们将逐一构建脚本的各个功能模块。

清理软件包缓存

这是最安全、最直接的清理步骤,Yum/DNF 提供了内置的清理命令。

echo "正在清理 Yum/DNF 缓存..."
dnf clean all 2>/dev/null || yum clean all
echo "Yum/DNF 缓存清理完毕。"

脚本中同时兼容 dnf (CentOS 8+) 和 yum (CentOS 7),并使用 2>/dev/null 抑制可能出现的错误信息,使输出更干净。

清理系统日志

对于传统的日志文件,我们可以删除超过一定天数的日志,对于 systemd 日志,使用 journalctl 是最佳选择。

echo "正在清理超过 30 天的系统日志..."
find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} ;
echo "传统日志清理完毕。"
echo "正在限制 systemd 日志大小..."
journalctl --vacuum-size=100M
echo "systemd 日志限制完毕。"

这里,我们删除了30天前修改过的 .log 文件,并将 systemd 日志总大小限制在 100MB。-mtime +30 是一个精准的时间过滤器。

CentOS服务器磁盘空间告急,用什么垃圾清理脚本?

清理旧的内核

保留当前正在使用的内核和上一版本作为备份,删除其余所有旧内核,是释放 /boot 空间的有效手段。

echo "正在清理旧的内核..."
# 安装 yum-utils 工具(如果尚未安装)
if ! command -v package-cleanup &> /dev/null; then
    dnf install -y yum-utils || yum install -y yum-utils
fi
# 保留最新的两个内核
package-cleanup --oldkernels --count=2 -y
echo "旧内核清理完毕。"

package-cleanupyum-utils 提供的一个强大工具,--count=2 表示保留两个最新的内核版本。

清理临时文件

/tmp 目录下的文件通常可以安全删除,特别是那些长时间未被访问的。

echo "正在清理超过 7 天的临时文件..."
find /tmp -type f -atime +7 -delete
find /var/tmp -type f -atime +7 -delete
echo "临时文件清理完毕。"

-atime +7 表示删除7天前未被访问过的文件,相比 -mtime(修改时间)在某些场景下更安全。

完整脚本与使用指南

将以上模块整合,并加入一些安全提示和日志输出,就形成了一个完整的清理脚本。

#!/bin/bash
# CentOS 系统垃圾清理脚本
# 建议在执行前备份重要数据
set -e # 遇到错误立即退出
echo "=========== 开始系统垃圾清理 ==========="
# 1. 清理软件包缓存
echo "步骤 1/4: 清理软件包缓存..."
dnf clean all 2>/dev/null || yum clean all
echo "✔ 软件包缓存清理完毕。"
# 2. 清理系统日志
echo "步骤 2/4: 清理系统日志..."
find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} ;
journalctl --vacuum-size=100M
echo "✔ 系统日志清理完毕。"
# 3. 清理旧的内核
echo "步骤 3/4: 清理旧的内核..."
if ! command -v package-cleanup &> /dev/null; then
    dnf install -y yum-utils || yum install -y yum-utils
fi
package-cleanup --oldkernels --count=2 -y
echo "✔ 旧内核清理完毕。"
# 4. 清理临时文件
echo "步骤 4/4: 清理临时文件..."
find /tmp -type f -atime +7 -delete
find /var/tmp -type f -atime +7 -delete
echo "✔ 临时文件清理完毕。"
echo "=========== 垃圾清理任务完成 ==========="

使用方法:

CentOS服务器磁盘空间告急,用什么垃圾清理脚本?

  1. 将以上代码保存为 cleanup.sh
  2. 赋予执行权限:chmod +x cleanup.sh
  3. 以 root 权限执行:sudo ./cleanup.sh

为了方便管理,我们可以将上述清理策略归纳为下表:

清理目标 主要目录/工具 核心命令示例 清理策略
软件包缓存 /var/cache/yum, /var/cache/dnf dnf clean all 删除所有缓存
系统日志 /var/log, journalctl find ... -mtime +30, journalctl --vacuum-size=100M 删除30天前的日志,限制总大小
旧的内核 /boot package-cleanup --oldkernels --count=2 保留最新的2个内核
临时文件 /tmp, /var/tmp find ... -atime +7 -delete 删除7天前未访问的文件

相关问答FAQs

Q1: 运行这个清理脚本安全吗?我需要注意什么?
A1: 该脚本中的命令都是系统维护中的标准操作,总体上是安全的,但任何自动化删除操作都存在潜在风险,请务必注意以下几点:

  • 备份: 在首次在任何生产服务器上运行前,请确保已对重要数据进行备份。
  • 测试: 建议先在测试环境中运行脚本,观察其行为和结果是否符合预期。
  • 理解命令: 请确保您理解脚本中每一个 rmfind -delete 命令的作用,不要盲目运行来源不明的脚本。
  • 检查日志文件: 某些应用程序可能对日志文件的路径和保留策略有特殊要求,清理前请确认。

Q2: 我应该多久运行一次这个脚本?可以自动运行吗?
A2: 运行频率取决于服务器的使用情况和磁盘容量。

  • 对于生产服务器: 如果服务器日志增长快或磁盘空间紧张,可以设置为每周或每两周运行一次。
  • 对于个人或开发环境: 一个月运行一次通常就足够了。
    您可以通过 cron 任务来实现自动化,以 root 用户编辑 crontab:sudo crontab -e,然后添加一行,在每周日凌晨3点自动运行脚本:
    0 3 * * 0 /path/to/your/cleanup.sh > /var/log/cleanup.log 2>&1
    这样,脚本就会在后台定期执行,并将输出日志重定向到 /var/log/cleanup.log 文件中以供查验。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-10 17:33
下一篇 2025-10-10 17:36

相关推荐

  • 如何应对复杂MapReduce任务中的高难度场景?

    基于您提供的关键词“复杂mapreduce”和“复杂场景”,我可以为您生成一段摘要。,,本研究深入探讨了在复杂场景下,使用MapReduce编程模型处理大规模数据集的挑战。分析了复杂mapreduce任务的执行流程,并针对特定复杂场景提出了优化策略,以提高数据处理的效率和准确性。

    2024-08-07
    008
  • 服务器与客户端如何互联_客户端与插件

    服务器与客户端通过互联网协议互联,客户端发送请求,服务器响应。插件是扩展客户端功能的小程序,可增强用户体验和交互性。

    2024-07-03
    0011
  • CentOS防火墙如何设置才能开放1194端口?

    在CentOS系统中管理网络端口是服务器运维的一项基本技能,尤其是在部署需要特定网络通信的应用时,1194端口作为OpenVPN服务的默认端口,其开放过程涉及操作系统层面的防火墙配置,有时还需要考虑网络服务提供商层面的安全策略,本文将详细、系统地介绍如何在CentOS(特别是7及以上版本)上安全、有效地开放11……

    2025-10-12
    002
  • CentOS如何基于端口号设置策略路由指定网关?

    在拥有多个网络连接的服务器环境中,传统的基于目标地址的路由决策往往无法满足复杂的业务需求,我们可能希望将所有Web流量(HTTP/HTTPS)引导至一个带宽更高但成本也较高的线路,而将其他所有流量(如SSH、数据库同步)通过一个稳定且廉价的线路,这时,策略路由便成为了一个强大的解决方案,它允许网络管理员根据数据……

    2025-10-13
    003

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信