apt-mark hold 是 apt 工具中用于锁定软件包版本、防止其被自动升级的命令。1. 通过 sudo apt-mark hold 包名 可锁定指定包;2. 使用 apt-mark showhold 可查看当前锁定的包;3. 执行 sudo apt-mark unhold 包名 可解除锁定。需要注意的是,锁定仅阻止自动升级,手动安装仍可覆盖;某些依赖复杂的场景可能引发升级冲突,建议定期检查锁定列表并评估影响范围。常见适用场景包括:生产与测试环境版本需保持一致、依赖特定版本避免兼容问题、或官方推送不稳定版本时临时锁定。

有时候你升级Debian系统的时候,某些软件更新后反而出问题。这时候你想固定某个版本不让它更新,最常用的方法就是用 apt-mark hold。

什么是 apt-mark hold?
apt-mark hold 是 APT 包管理工具提供的一个命令,用来“锁定”某个软件包的当前版本,防止它在执行 apt upgrade 或 apt full-upgrade 时被自动升级。

它的原理很简单:当你对某个包执行了这个命令,APT 就会把这个包标记为“保持状态”,除非你手动解除这个标记,否则系统不会更新它。
怎么使用 apt-mark hold?
操作其实非常简单,只需要几个命令就能搞定:

-
锁定某个包:
sudo apt-mark hold 包名
-
查看当前被锁定的包:
apt-mark showhold
-
取消锁定:
sudo apt-mark unhold 包名
举个例子,假设你正在用 nginx 1.18,但官方源更新到了 1.20,而你发现新版启动有问题,不想让它自动升级,就可以这样做:
sudo apt-mark hold nginx
这样以后执行 apt upgrade 的时候,nginx 就不会被升级了。
使用时需要注意哪些地方?
虽然这个功能很好用,但也有几个小细节容易忽略:
- 锁定只是阻止自动升级,并不影响你手动安装新版本
- 如果你运行的是
apt install 包名,即使这个包被 hold 了,也会自动解除 hold 并安装最新版 - 某些依赖关系复杂的场景下,hold 一个包可能会导致其他包无法升级或安装,需要特别留意提示信息
所以建议:
- 只锁定确实有必要保留旧版本的包
- 定期检查有哪些包被 hold,避免遗漏
- 升级前最好先看一眼有没有冲突或影响范围
什么时候适合用这个功能?
常见的使用场景包括:
- 测试环境和生产环境版本不一致,怕升级后行为变化
- 某个服务依赖特定版本,升级后出现兼容性问题
- 官方仓库推送了一个不稳定版本,想等修复后再更新
比如你用了某个 Python 库,开发的应用只兼容 3.8,但系统默认要升级到 3.9,这时候 hold 掉相关包就很实用。
基本上就这些,操作不复杂但很容易忽略一些副作用,用的时候多注意一下提示信息就行。










