首页/系统/信创系统运维速查/apt 锁定包版本(hold)
命令与包管理65 条

apt 锁定包版本(hold)

生产不允许某软件被自动升级:apt-mark hold 锁住、unhold 解锁、showhold 查看;升级期保护内核与数据库的常用手段。

信创系统运维速查系统更新于 2026-10-13

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 的自动升级决策;手工指定版本安装仍然可以进行,所以它不能替代变更管控。
被锁定的包不会随整机安全更新,补丁节奏要单独规划,否则长期不更新会形成安全缺口。

易错点

  • hold 的包在整机安全升级时不会更新,补丁节奏若不同步规划,会留下长期未修补的组件。
  • 换机器迁移时忘记检查 hold 列表,两台机器版本行为不一致,排查时找不到原因。
  • 用 full-upgrade 假定锁定包绝对安全,部分升级仍会牵连依赖变化,执行前先看变更清单。
  • 锁定了包但没记录原因,后续接手的人不知道为何锁、什么时候能解锁。
  • 把 hold 当成禁止任何变更的手段,实际手工指定版本仍可覆盖,管控需要靠流程而非单条命令。

数据来源与参考

  • apt-mark 手册
  • Debian 版本管理文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌