apt 锁定包版本是什么
apt-mark hold 让某个包不再参与自动升级:系统执行 apt upgrade 时该包保持当前版本不动。常见用途是升级期保护关键组件——数据库、内核、以及经过验证的中间件版本,避免一次批量升级把已验证的组合打乱。三种操作:hold 锁定、unhold 解锁、showhold 查看锁定清单。要注意 hold 只影响 apt 的自动升级决策,手工指定版本安装仍然可行,因此它并不是不可逾越的保护。
基本信息
| 适用平台 | deb 系:统信 UOS 桌面版、Debian、Ubuntu、麒麟部分分支 |
|---|---|
| 锁定 | apt-mark hold 包名 |
| 查看 | apt-mark showhold |
| 解锁 | apt-mark unhold 包名 |
| 常见对象 | 内核、数据库、经过验证的中间件版本 |
典型使用场景
- 数据库保护:升级期锁定数据库版本,避免自动升级打断业务
- 内核固定:锁定已验证的内核,防止自动升级后驱动不匹配
- 中间件版本管理:业务依赖特定版本的组件,锁定后统一升级
- 故障回退:回退到已验证版本并锁定,先稳定生产再找根因
- 迁移核对:换机器时对照 hold 清单,避免两台机器版本行为不一致
锁定、查看与解锁
锁定、查看与解锁
sudo apt-mark hold nginx # 锁定 nginx,不参与自动升级
apt-mark showhold # 查看所有被锁定的包
sudo apt-mark hold linux-image-generic linux-headers-generic # 锁定内核相关包
sudo apt-mark unhold nginx # 需要升级时先解锁
sudo apt upgrade # 之后再执行升级
apt-mark showmanual | head # 查看被手工安装标记的包(另一维度)
dpkg -l | grep '^hi' | head # 用包状态码确认哪些处于 hold 状态状态码与操作读法
| 项 | 含义 | 说明 |
|---|---|---|
| hold | 锁定,不自动升级 | apt upgrade 会跳过 |
| unhold | 解除锁定 | 恢复参与自动升级 |
| showhold | 列出锁定清单 | 换机器与巡检必查 |
| h(dpkg 状态) | 已被 hold | 作为交叉验证手段 |
| apt upgrade | 不卸载任何包 | 比 dist-upgrade 保守 |
| apt full-upgrade | 可能卸载/替换包 | 锁定的包仍可能被牵连变更 |
hold 只影响 apt 的自动升级决策;手工指定版本安装仍然可以进行,所以它不能替代变更管控。
被锁定的包不会随整机安全更新,补丁节奏要单独规划,否则长期不更新会形成安全缺口。