使用 ubuntu 的更新命令 sudo apt upgrade -y 时总是会升级所有的包,但是有些包是不能或不便升级的,如 GPU 驱动程序等,升级后可能会导致无法使用。有时升级某些软件后会导致系统重启失败等。本篇介绍如何抑制某些包不升级。

update & upgrade

当使用一段时间后,或需要更新某个软件包时,总会运行如下的命令,检查更新:

1
sudo apt update

当运行上面的命令后,会提示我们有多少包需要更新,使用如下命令,可以查看详细信息:

1
sudo apt list --upgradable

当我们想要升级罗列的所有软件包时,我们可以使用如下命令:

1
sudo apt upgrade -y

当我们想要只升级某一个软件包时,我们可以使用如下命令:

1
2
3
sudo apt install --only-upgrade [packagename]
# or
sudo apt install [packagename]

但是,如果我们需要升级的软件比较多,但又不是所有软件都想要升级,那么我们不能够使用 sudo apt upgrade,但使用 sudo apt install --only-upgrade [packagename] 又有些繁琐,我们可以采用下面的方法。

apt-mark

apt-mark 可以对软件包进行设置安装标记,如手动(manual)、自动(auto)、不安装(hold)等。以 vim 为例,我们可以如下设置:

1
2
3
4
5
6
7
8
# vim 自动升级
sudo apt-mark auto vim
# vim 手动升级,即当手动 apt update, apt upgrade 时会升级
sudo apt-mark manual vim
# vim 不升级,只有当 apt update 且 apt install vim 时才会升级。hold 会组织软件自动升级
sudo apt-mark hold vim
# 取消阻止升级
sudo apt-mark unhold vim

查看所有软件的标记状态:

1
2
3
4
5
6
7
8
# 查看自动升级的软件包
sudo apt-mark showauto
# 查看手动升级的软件包
sudo apt-mark showmanual
# 查看不升级的软件包
sudo apt-mark showhold
# 查看所有软件包状态
sudo dpkg --get-selections

当我们把不想要自动升级的软件设置为 hold 状态时,这是我们就可以方向的使用如下命令升级想要升级的软件了:

1
2
sudo apt update
sudo apt upgrade -y

此时,在使用如下命令查看,发现 hold 状态的软件虽然列出来了,但是没有被升级:

1
sudo apt list --upgradable

参考文献

  1. 如何使用apt-get升级单个软件包?
  2. ubuntu保留特定软件不更新的方法
  3. ubuntu阻止软件包升级(指定的软件包不升级)
  4. 在 Ubuntu 中使用 apt 命令列出可升级的软件包