执行sudo apt update
结束于
Reading package lists... Done
Building dependency tree
Reading state information... Done
2 packages can be upgraded. Run 'apt list --upgradable' to see them.
执行apt list --upgradable
给了我
Listing... Done
onionshare/bionic,bionic 2.2.ppa1-1 all [upgradable from: 2.1-1]
ring-all/unknown 20190927.2.c2af011~dfsg1-1 amd64 [upgradable from: 20190629.2.c07ef23~dfsg1-1]
但执行sudo apt upgrade
不会升级可升级的软件包:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
- 这是为什么?可能是未满足依赖关系?
- 我可以(手动)升级列出的软件包吗?如果可以,如何升级?
更新: 看这个Pastebin以获得完整的成绩单。
答案1
在这种情况下,“可升级包”实际上不可升级,因为它们具有未满足的依赖关系。
重现:尝试更新有问题的特定软件包(参见如何在 Ubuntu 中更新特定软件包) 执行sudo apt-get install --only-upgrade <packagename>
。如果任何软件包有未满足的依赖关系,则升级将失败,原因是
E: Unable to correct problems, you have held broken packages.
升级这些软件包需要解决未满足的依赖关系。有关信息可以在“添加 PPA 后如何解决未满足的依赖关系?” 的答案和“修复无法纠正的问题,您持有损坏的包裹”。
答案2
您可以运行以下命令行来升级所有可升级的包及其依赖项:
sudo apt-get dist-upgrade
答案3
您的案例中缺少的软件包名称不一定与本例中的相同。但这显示了如何解决问题。无论您在输出中看到什么名称,该技术都有效。因此,请将实际文件名(如 ubuntu-advantage-tools 或 libnfsidmap1)替换为您的计算机显示需要升级的任何名称。
所有这些命令都需要以 root 身份运行。我们通过使用 sudo 在终端中更改用户来实现这一点,而无需实际以 root 身份登录会话。为此,请键入:
sudo su
...并在提示时输入您的 root 密码。 su 部分将切换用户。如果输入后没有其他内容,则默认切换到 root。现在您有权限彻底搞砸计算机,因此请谨慎使用“root”!
否则,您必须在所有这些命令前分别输入 sudo。一些 Linux 纯粹主义者认为 sudo su 是错误的,但我向您保证,这与为每个命令反复输入 sudo 完全相同。
跑步:
apt update
进而
apt upgrade
...你可能会得到如下输出:
1 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
...显示有八个包未升级。
其他更新相关的命令可能会提供如下消息:
The following packages have been kept back: evolution evolution-common evolution-plugin-bogofilter evolution-plugin-pstimport evolution-plugins libevolution libnfsidmap1 ubuntu-advantage-tools
您需要修复这些列出的软件包,它们可能缺少依赖项,导致无法轻松升级。没有人想到在 apt upgrade 中包含一个子程序来自动处理这些问题。所以我们只能自己动手。
要列出软件包,您应该运行:
apt list --upgradable
然后您应该手动安装那些列出的包。
apt install evolution evolution-common evolution-plugin-bogofilter evolution-plugin-pstimport evolution-plugins libevolution libnfsidmap1
请注意,您只需输入所有软件包的名称,并在名称之间留一个空格,而不必对每个软件包单独运行 apt install。您可以直接从终端中复制此列表,该列表来自之前未升级的输出。在终端中处理内容时,您必须右键单击并选择“复制”或“粘贴”。Ctrl C 和 Ctrl V 键盘命令在终端输出上不起作用。
当然,完成所有这些操作可能仍无法解决所有问题。您可能会得到如下输出:
6 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
或者
2 packages can be upgraded. Run 'apt list --upgradable' to see them.
然后您可以运行:
apt-get --with-new-pkgs upgrade
...显示剩余的包。这将输出类似
The following packages have been kept back: libnfsidmap1 ubuntu-advantage-tools
然后,你只需要手动单独安装它们,因为某些不合理的原因。就我而言,我输入了:
apt install ubuntu-advantage-tools
和
apt install libnfsidmap1
再次强调,这里安装的内容的名称应该替换为您的计算机所称的未升级的内容。
这应该可以解决之前使用 list 命令时无法安装的其余两个问题。运行 apt update 然后 apt upgrade 应该会输出:
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
完毕!
您可能还想运行:
sudo apt-get --with-new-pkgs upgrade
进而
sudo apt autoremove
正如我在其他地方看到的建议。但仅凭这一点并不能解决我的问题。
答案4
我建议运行:
sudo apt-get upgrade
这对我有用。它会告诉你有多少个包裹已升级,有多少是新的已安装,有多少删除,以及有多少人没有升级(被阻止)。
我有一些包裹被扣留了,所以读完之后这个帖子,它提供了多种解决方案,我运行了以下命令来安装保留的软件包:
sudo apt-get --with-new-pkgs upgrade
这还将包括不再需要包并且可以删除。根据输出的说明,我运行了以下命令来删除它们:
sudo apt autoremove
最后,我再次运行了第一个代码,只是为了确保一切都清楚,并会得到输出“0 升级,0 新安装,0 删除和 0 未升级”。