Linux中Ansible批量清理无用缓存需按发行版精准执行:RHEL/CentOS 7用yum clean all,8+用dnf clean all,Debian/Ubuntu用apt clean;清理后必须执行makecache重建元数据,并可扩展清理旧内核、日志及临时文件。

Linux 中用 Ansible 批量清理系统无用缓存包,核心是区分“缓存包”类型并按发行版精准执行:YUM/DNF 系统清理 yum clean all 或 dnf clean all,同时可选清理旧内核、临时文件、日志等冗余内容。不能只靠一条命令硬清,需结合包管理器状态、保留策略和幂等性控制。
识别系统类型并选择对应清理命令
不同发行版使用不同包管理器,Ansible 需动态判断:
- RHEL/CentOS 7、AlmaLinux 8 之前:用
yum clean all - RHEL/CentOS 8+、Rocky/Alma 8+、Fedora:用
dnf clean all - Ubuntu/Debian:用
apt-get clean(清/var/cache/apt/archives/)或apt-get autoclean(只删过期包)
Playbook 中可用 ansible_facts['pkg_mgr'] 或 ansible_distribution_major_version 判断,避免写死命令。
清理 YUM/DNF 缓存并重建元数据
仅运行 clean 不够,后续必须 makecache 或 makecache --refresh,否则下次 yum install 会失败:
-
推荐写法(幂等安全):
- name: 清理 YUM 缓存并重建<br> yum:<br> state: latest<br> name: "*"<br> update_cache: true<br> cache_valid_time: 3600
该方式自动触发clean+makecache,且cache_valid_time控制刷新频率。 -
显式分步(更可控):
先command: dnf clean all,再command: dnf makecache --refresh,加ignore_errors: false确保第二步不跳过。
批量卸载旧内核(释放 /boot 空间)
CentOS/RHEL 系统长期不清理会导致 /boot 满,引发升级失败。Ansible 可统一保留最新 2 个内核,删除其余:
- 用
package模块查已安装内核:command: rpm -q kernel | sort -V,注册结果后取倒数第 3 个及更早的包名 - 或直接用
dnf自带策略(RHEL 8+):dnf remove --oldinstallonly --setopt installonly_limit=2 kernel - 生产环境建议加
when: ansible_distribution in ['RedHat', 'CentOS', 'AlmaLinux']限定范围
扩展清理:日志、临时文件与残留包
真正“无用缓存”不止包缓存,还包括:
-
/var/log/journal/:用systemd-journalctl --vacuum-size=200M限制日志体积 -
/tmp和/var/tmp:用file模块设置state: absent配合find模块筛选 7 天前文件 - 已卸载但残留的
.rpmnew/.rpmsave配置文件:用find /etc -name "*.rpmnew" -delete - DNF 的
/var/lib/dnf/history/过长历史:可定期dnf history rollback --assumeyes 0清空(慎用,建议先备份)
所有清理操作建议加 changed_when: false 或 check_mode: no 明确标识非变更型任务,避免误判状态。











