Debian 包被 hold 不升级?
`apt list | grep hold` 能看到 hold 标记的包不参与升级。本文给出查 hold、解除、验证升级的固定顺序,以及为何不该长期留 hold。
简短答案
被 hold 的包在 apt upgrade/apt full-upgrade 中会整体跳过,现象是「其它包在动、它就纹丝不动」。处理三步:apt list | grep hold 找全 → sudo apt-mark unhold <包> 逐个解除 → 重跑 sudo apt full-upgrade。解除前记得为什么当初 hold 的——多半是为了钉住某版本,解除前先评估下游影响。
现象对照
| 现象 | 判断 |
|---|---|
| 单包不动 | 该包被 hold |
| 一片包被 hold | 人为批量钉版或升级中途中断 |
| 解除后仍不动 | 该包已是最新版或依赖被另一个 hold 包卡住 |
排查步骤
apt list --installed 2>/dev/null | grep hold
sudo apt-mark unhold <包名>
sudo apt update
sudo apt full-upgrade
批量场景把 unhold 包名拼一行执行;解除后仍有卡住的包,多半是依赖它的包还在 hold,按 apt-cache depends 查依赖关系逐个解开。hold 机制在 Debian 13.7 DVD 与 网络安装版 上完全一致,Debian 发行条目 有说明。
操作小结
- 先
apt list | grep hold找全所有 hold 包 - 解除前评估当初为何钉版
- 批量解除一次拼完,别逐个点
full-upgrade验证,看是否还有连带 hold