apt-mark hold 是 Debian/Ubuntu 中锁定软件包禁止自动更新的最直接可靠方式,通过标记 APT 内部状态实现,命令包括 hold、showhold、unhold,影响 apt upgrade 等命令但不阻止手动安装指定版本。

在 Linux 系统中,尤其是 Debian 和 Ubuntu 发行版,使用 apt-mark hold 是锁定软件包、禁止其被自动更新的最直接、最可靠方式。它不修改源配置、不依赖优先级规则,而是通过 APT 内部状态标记实现精准控制。
核心命令就三个:
- 锁定包:
sudo apt-mark hold - 查看已锁包:
apt-mark showhold(无需 sudo) - 解除锁定:
sudo apt-mark unhold
例如,防止 Nginx 和内核镜像升级:
sudo apt-mark hold nginx linux-image-generic linux-headers-generic
执行后,这些包将从 apt upgrade、apt full-upgrade 和 apt-get dist-upgrade 的升级列表中完全跳过,但不影响其他包的正常更新和依赖安装。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
需要特别注意的几点:
- 它只作用于
apt系列升级命令,不阻止手动指定版本安装,比如sudo apt install nginx=1.24.0-1ubuntu1仍会成功,且自动解除 hold 状态 -
apt-mark hold修改的是/var/lib/apt/extended_states文件,属于 APT 原生机制,比底层dpkg --set-selections更稳定、不易被覆盖 - 对于 Ubuntu LTS 系统,
unattended-upgrades可能绕过 hold —— 若需彻底隔离,应同步配置/etc/apt/apt.conf.d/50unattended-upgrades,在Unattended-Upgrade::Package-Blacklist中显式加入包名,并关闭自动重启等行为
验证是否生效:
- 运行
apt list --upgradable,确认目标包未出现在输出中 - 执行模拟升级:
apt upgrade --dry-run | grep -E "^(nginx|linux-image)",应无升级提示
不复杂但容易忽略。










