首页/系统/Linux 运维命令速查/apt 版本固定:preferences 与 hold

apt 版本固定:preferences 与 hold

阻止软件被升级有两种手段:apt-mark hold 快速按住单个包;/etc/apt/preferences.d 按仓库/Pin 精细控制优先级,适合混合源环境。

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

apt 固定版本的两个办法

阻止某个包被自动升级有两条路:apt-mark hold 快速按住单个包,适合临时处理或个别关键包;/etc/apt/preferences.d 下的 Pin 规则可以按仓库与版本精细控制优先级,适合混合源的复杂环境。实践中常先用 hold 顶上,再收敛成规范化的 Pin 策略。

基本信息

快捷方式apt-mark hold / unhold 单个包
精细方式/etc/apt/preferences.d/*.pref 中的 Package、Pin、Pin-Priority
查看状态apt-mark showhold、apt-cache policy 包名
优先级含义大于 1000 强制该版本,990 只为常规安装提供偏好

典型使用场景

  • 关键中间件固定在小版本,避免自动升级打断业务
  • 混合官方源与第三方源时,防止从非预期源升级
  • 灰度升级期间只放开部分机器的版本
  • 排查「升级后行为变了」时锁定版本便于回退
  • 内网源与外部源并存时的版本收敛
  • 变更窗口之外冻结包,控制变更节奏

apt-mark 快法

apt-mark 快法
apt-mark showhold                      # 查看当前被 hold 的包
sudo apt-mark hold nginx               # 按住,不参与自动升级
sudo apt-mark unhold nginx             # 解除按住
apt list --upgradable                  # 被 hold 的包不会出现在升级列表

preferences 细法

preferences 细法
sudo tee /etc/apt/preferences.d/99-pin-nginx > /dev/null <<'EOF'
Package: nginx
Pin: version 1.24.*
Pin-Priority: 1001
EOF
apt-cache policy nginx                 # 验证候选版本符合预期

两种手段对照

手段粒度适用场景
apt-mark hold单个包临时冻结或个别关键包
preferences 的 Pin按包、版本、来源混合源环境的长期策略
Pin-Priority 1001强制使用指定版本可能带来降级,改动前评估
Pin-Priority 990偏好但非强制常规安装时的默认选择
apt-cache policy查询候选与已装版本修改策略后的验证入口
Pin-Priority 大于 1000 表示强制使用指定版本,可能触发降级;990 只让常规安装偏好它。改动策略后一定用 apt-cache policy 复核候选版本。
hold 只挡自动升级:手工 apt install 指定版本仍可能绕开它,相关约定要写进变更文档,否则冻结形同虚设。
preferences 里的优先级写错会让其它包意外降级,属于高影响误操作;改动后建议先在测试机跑一遍完整升级流程。
被 hold 的包在安全检查与补丁修复时也可能被一起挡住:定期用 apt-mark showhold 回顾清单,确认冻结范围仍然必要,别让冻结变成长期欠账。

易错点

  • 以为 hold 能挡住所有升级:手动指定版本安装仍会绕开,冻结并不彻底
  • Pin-Priority 数字写错:其它包被意外降级,排查方向完全跑偏
  • 改完策略不做 apt-cache policy 复核:候选版本与预期不符却无人发现
  • 混合源长期不做收敛:同一个包来自不同源,版本反复横跳

数据来源与参考

  • man 5 apt_preferences
  • man 8 apt-mark
  • Debian 官方文档:apt preferences

相关工具

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