如何通过apt-get降级软件包?

如何通过apt-get将软件包降级到旧版本?
其他工具也可以接受,但首选apt-get
6个回答

如果您有版本号或目标发布,请使用apt-get来选择特定版本或目标发布。更多详细信息可在apt-get的手册页面中找到,也可以通过在终端输入"man apt-get"来访问。
要运行的命令是:
sudo apt-get install = 或者
sudo apt-get -t= install 这可以用来将软件包降级到特定版本。
需要注意的是,当使用目标发布(选项-t)时,发布优先级必须大于1000才能允许降级(请参阅man 5 apt_preferences),否则将保留当前安装的版本。
评论中指出了这一点。
  • apt-cache showpkg <package-name>列出所有可用的版本。(感谢Sparhawk)
  • apt-mark hold <package-name>将软件包保持在当前版本,防止自动升级。(感谢Luís de Sousa)

7我发现aptitudeapt-get更好地降级了依赖关系。 - krispy
10apt-cache policy <package-name> 显示已安装和可用版本。 - Michael Lawton
39如果showpkg没有显示您感兴趣的版本呢? - demongolem
1根据@demongolem的jozxyqk评论,我想将我的bash降级到4.4.18-2ubuntu1版本;但是aptitudeapt-get都拒绝这样做,因为它们认为没有这个版本。你找到了解决办法吗? - Naghi
请注意,如果您使用“-y”进行此操作,可能需要添加“--allow-downgrades”。 - alfalfasprout

使用:

apt-get install «pkg»=«version»

或者:

sudo aptitude install «pkg»=«version»

在哪里:

  • «pkg» 是软件包的名称。
  • «version» 是版本号。

5当我输入apt-get install pkg=version时,apt-get会建议删除几乎一半已安装的软件包,这显然不是我想要做的。 - Dfr
4正如得到更多投票的答案所指出的那样,这似乎是aptitudeapt-get表现更好的关键情况之一。在我的情况下,apt-get坚决拒绝了降级请求,而aptitude指出还有其他依赖于较新版本的软件包(因此需要同时降级)。 - sxc731
3提示:运行apt list -a <pkg>以查看可用的版本。 - Nero Vanbiervliet

如果您使用ppa升级了软件,可以使用ppa-purge来降级。首先,您需要使用以下代码安装ppa-purge:
sudo apt-get install ppa-purge 然后,您可以使用以下命令删除ppa:
sudo ppa-purge ppa:user/ppa-name 这将自动将软件降级到与Ubuntu一起提供的原始版本。

2这个解决方案在需要降级的依赖包时简直无与伦比。谢谢! - and
2是的,这是对我来说在从kubuntu-ppa/backports降级KDE/Plasma桌面环境时最好的解决方案 - 我注意到一个问题是PPA的.list文件不能被注释掉,所以ppa-purge能够引用所有需要被清除的文件。一开始花了我一分钟才弄明白为什么它不起作用。希望这能帮助其他人! - AveryFreeman

依我看,你應該先卸載或清除該套件,像這樣:
sudo apt-get remove <package>

或者

sudo apt-get purge <package>

然后,您可以下载您想安装并保存在文件夹中的版本,比如说在“下载”文件夹中保存为“abc.deb”。打开终端,使用“cd”命令进入该文件夹,并使用“dpkg”命令安装先前的版本。
sudo dpkg -i abc.deb

或者,如果你想降级通过PPA更新的软件包,可以使用一个叫做“ppa-purge”的小工具。
参考这个帖子:http://www.webupd8.org/2009/12/remove-ppa-repositories-via-command.html

6卸载一个软件包可能会导致许多依赖的软件一并被移除,从而导致系统无法使用。不过,ppapurge听起来很有趣。 - type
15你能解释一下为什么你认为我们应该先卸载软件包(作为一个单独的步骤),然后再安装它们的旧版本吗? - Eliah Kagan
http://permalink.gmane.org/gmane.comp.sysutils.puppet.devel/23219 - temoto
1@temoto 那个链接是用于降级整个发行版的,从"不稳定" -> "测试" -> "稳定",而不是用于降级单个软件包。 - Braiam

要降级,你需要执行类似的命令。
 sudo apt-get install pkg_name=version

在你的终端中执行。
version的位置上,填入你想要降级到的先前版本。

2至少对于依赖于需要降级的软件包的linux-generic来说,它无法正常工作。我得到了https://paste.ubuntu.com/p/NWSmf2ZwTy/。 - mymedia
在安装所需软件包的特定版本之前,可能需要清除一些依赖软件包... - m13r

这个问题很旧,但是谷歌把我带到了这里,我没有找到简单的解决方案,不需要手动传递版本信息就可以将一堆软件包降级到旧版本。
所以也许其他需要这个解决方案的人也会觉得我的解决方案有用。
有一个叫做apt-show-versions的工具可以显示已安装的版本。要安装它:
$ sudo apt install apt-show-versions

确保 APT 的缓存是最新的:
$ sudo apt-show-versions -i

你可以通过微调正则表达式来轻松降级所有所需的软件包,但这里是简单的方法:
$ sudo apt-get install $(apt-show-versions \
   | grep -P 'newer than version in archive' \
   | awk -F: '{print $1"/'$(lsb_release -cs)'"}')

你应该安装lsb-release以供后续使用。

1或者自动降级到最新安装的版本:sudo apt-get install -V $(apt-show-versions | grep -F 'newer than version in archive' | awk -F: '{print $1"/'$(lsb_release -cs)'"}')。我更喜欢在这里使用-F来进行grep - jarno
1谢谢,这非常有帮助! - Zulakis
@jarno 谢谢你的咒语;我调整了它,使其适用于在同一平台上有多个架构版本的软件包(例如 libc6):sudo apt-get install -V $(apt-show-versions | grep -F 'newer than version in archive' | awk -F' ' '{print $1"/'$(lsb_release -cs)'"}')(只需将 awk 的分隔符从冒号改为空格)。 - Reuben Thomas