Linux 系统维护(尤其是 Debian/Ubuntu 体系)中,我们经常面临一个矛盾:既希望通过 apt upgrade 获取最新的安全补丁,又担心某些核心组件(如 PHP、Nginx 或特定驱动)在升级后因为版本不兼容而导致业务崩溃。这时候, apt-mark就是你的“定海神针”。

1.什么是 apt-mark?

apt-mark 是 APT 工具集中的一个实用程序,它允许用户手动更改软件包的“标记”状态。通过这些标记,你可以告诉系统哪些包需要保持现状,哪些包是手动安装的,从而精细化地管理软件包的生命周期。

2.核心功能:锁定版本 (Hold)

这是 apt-mark 最常用的场景。当一个软件包被打上 hold 标记后,无论仓库里有多少更新, apt upgrade 都会跳过它。

基本操作:

# 锁定单个软件包
sudo apt-mark hold php8.2
# 锁定一系列相关的软件包(支持通配符)
sudo apt-mark hold php8.2*
# 解除锁定
sudo apt-mark unhold php8.2

3.自动与手动标记 (Auto/Manual)

APT 会区分包是“你主动要装的”还是“作为依赖被带进来的”。

  • auto:标记为自动安装。如果没有任何手动安装的包依赖它,它会被 apt autoremove 清理掉。
  • manual:标记为手动安装。即使没有其他包依赖它,系统也会保留它。
# 将包标记为手动安装,防止被自动清理
sudo apt-mark manual libssl-dev
# 将包标记为自动安装,以便后续清理冗余
sudo apt-mark auto some-unused-library

4.实战案例

可以一次性锁定所有 PHP 8.2 组件:

sudo apt-mark hold php8.2*

在 PVE 虚拟机中,如果你直通了硬件,有时特定的旧内核版本更稳定。你可以锁定当前运行的内核:

sudo apt-mark hold linux-image-$(uname -r)

查看锁定了哪些包?

apt-mark showhold

5.总结

指令作用描述
hold锁定版本,禁止自动更新
unhold解除锁定,恢复正常更新
manual设置为“用户主动安装”,防止误删
auto设置为“系统自动安装”,允许被清理
showhold列出所有处于锁定状态的软件包

如果在升级,不想某个软件升级,一定要记得提前锁定。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注