yum clean all 会把所有缓存一次性清掉,既包括元数据,也包括 .rpm 包,不过一般并不建议动不动就这么做;更常用、也更实在的做法,其实是 yum clean packages(只删除 .rpm 包,保留元数据,后续操作会更快)和 yum clean metadata(只刷新元数据,适合软件源有变动,或者出现相关错误提示时使用)。清理完成后,最好马上执行 yum makecache,把缓存重新建起来。

yum clean all 能清掉所有缓存,但多数时候没必要——它会连元数据一起删,下次 yum install 或 yum search 就得重新下载,拖慢操作速度。真正该做的,是按需清理。
只删 rpm 包缓存,保留元数据
yum clean packages 是最常被低估的命令。它只清掉 /var/cache/yum/*/packages/ 下已下载但未安装的 .rpm 文件,而 repodata/ 里的元数据完好无损。这样既释放磁盘空间(通常占缓存 80% 以上),又不影响后续依赖解析和搜索速度。
- 适用场景:磁盘空间告急,但不想等几分钟重建元数据
- 注意:keepcache=1(默认)才会有包缓存;若设为 0,此命令无效果
- 查看占用:运行 du -sh /var/cache/yum/*/packages 确认实际大小
只刷新元数据,不碰 rpm 包
yum clean metadata 适合源地址变更、镜像同步延迟或遇到 Cannot retrieve metalink for repository 错误时。它删的是 repodata/ 目录下的 repomd.xml、primary.xml.gz 等索引文件,强制 yum 下次运行时重新拉取最新仓库结构。
- 常见错误现象:yum list available 显示旧版本,yum update 找不到新包
- 不要混用:yum clean metadata 后立即执行 yum makecache,否则后续命令会卡在“retrieving”阶段
- 避免在批量部署脚本里无条件调用——元数据重建需网络 IO,可能超时失败
手动删缓存前必须确认的三件事
直接rm -rf /var/cache/yum/* 看似彻底,但风险明显:
- yum 进程正在写缓存时执行,可能破坏目录结构,导致后续 yum 报 IOError: [Errno 2] No such file or directory
- 某些插件(如 fastestmirror)依赖 timedhosts 文件,删了会影响镜像选择逻辑
- /var/cache/yum 下可能有非空子目录(如 plugins/),rm -rf 会一并清除插件状态
- 正确做法:先停掉所有 yum 进程(ps aux | grep yum),再用 yum clean all,最后检查 ls -la /var/cache/yum 是否只剩空目录结构
清理后不重建缓存,等于白清
yum clean all 或 yum clean metadata 执行完,如果不跟 yum makecache,首次 yum install 会卡住十几秒到几分钟,且无法显示进度条。这不是 bug,而是 yum 默认行为:它边下载边构建缓存,期间不响应 Ctrl+C。
- 生产环境建议:清理后立刻跑 yum makecache --quiet(加 --quiet 避免刷屏)
- 若网络不稳定,可加 --setopt=metadata_expire=0 强制跳过本地过期检查
- 注意:yum repolist 也会触发缓存重建,但输出更冗长,不如 makecache 干净
真正关键的不是“清得干净”,而是“清得及时且可控”。/var/cache/yum 里元数据比 rpm 包更重——它决定你能看到什么包、依赖是否能解出来。盲目 clean all 看似省事,实则把缓存机制的优势全抹掉了。