首页/系统/Linux 运维命令速查/包管理器缓存与磁盘占用治理

包管理器缓存与磁盘占用治理

/var/cache 下长期积累的包缓存(dnf/yum/apt)能吃掉数 GB:了解清理命令与安全边界,定期回收。

Linux 运维命令速查系统更新于 2026-10-13

包缓存为什么会占满磁盘

/var/cache 下的包缓存是长期占用空间的隐形大户:APT 把下载过的 deb 放在 /var/cache/apt/archives,RHEL 系把 rpm 与元数据放在 /var/cache/dnf(旧版 /var/cache/yum)。清理命令本身很短,难点在安全边界 —— apt-get autoremove 会删掉系统判定为不再被依赖的包,旧内核清理删过头会失去回退能力。这条把两系的清理动作与风险边界放在一起对照。

基本信息

适用平台Debian/Ubuntu 与 RHEL/CentOS/Rocky/Alma
权限要求root
缓存路径/var/cache/apt/archives、/var/cache/dnf、/var/cache/yum
安全档位clean 类安全;autoremove 与旧内核清理需先预览
预览手段apt-get autoremove --dry-run、dnf autoremove --assumeno

典型使用场景

  • 容量告警时先量化缓存占用,回收其中最无风险的部分
  • 编译、装机留下大量开发依赖(-dev/-devel 包),交付前清理
  • 多次内核升级后 /boot 或根分区被旧内核占满,需要按保留策略删除
  • 制作镜像、迁移前做基线清理,缩小镜像体积
  • 排查“空间显示够但写入失败”:确认缓存目录属主与权限是否被改动

两系清理动作

两系清理动作
du -sh /var/cache/apt/archives /var/cache/dnf 2>/dev/null   # 先量化占用,再决定清不清
apt-get clean                  # Debian/Ubuntu:删掉全部已下载的 deb,最安全
apt-get autoclean              # 只删已从仓库下线、重下不到的 deb
apt-get autoremove --dry-run | head -n 30   # 先预览要删哪些包,务必先看
dnf autoremove --assumeno      # RHEL 系预览:打印事务后自动答否
dnf clean all                  # 清元数据与包缓存(换源、元数据损坏时用)
ls /boot | grep -c vmlinuz     # 删内核前先数一下现存内核版本数量

清理动作的安全边界

动作删掉什么边界与注意
apt-get clean全部已下载的 deb最安全,代价只是下次重下
apt-get autoclean仓库已下线、无法再下载的 deb安全,收益取决于仓库变动
apt-get autoremove判定为无依赖的包(可能包含内核)必须先 --dry-run;服务器上不要顺手加 --purge
旧内核清理多余内核与 /boot 下的镜像文件至少保留当前使用的一版加一版可回退
dnf clean all元数据与包缓存换源排障正确;弱网机房重下成本高
autoremove 的依赖判断基于当前元数据:第三方源被移除或包名变更后,可能把仍在用的组件判成孤儿。生产机执行前放在维护窗口,并确保有快照或回滚手段。
缓存清理的收益常被高估:真正吃掉磁盘的通常是日志、容器数据与业务文件,包缓存一般只能回收几百 MB 到几 GB,它是治理动作之一而不是终点。

易错点

  • 把 clean 当成容量告警的解法:先看 /var/log、容器数据目录与业务数据,否则清完很快又满
  • apt-get autoremove -y --purge 一把梭:可能连驱动与配置一起删掉,恢复过程远比执行麻烦(先 --dry-run 看清单)
  • 旧内核删到只剩一个:新内核出问题时无法回退启动,至少保留当前版本加一个备选
  • 用 rm -rf 手工删缓存目录:残留的锁文件与半截下载会让下次安装报错,统一用包管理器自己的 clean 子命令

数据来源与参考

  • man 8 dnf(clean)
  • man 8 apt-get(clean/autoremove)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌