什么是“dist-upgrade”,为什么它比“upgrade”升级更多?

Ric*_*uez 487 apt

我想知道为什么upgrade有时不想升级系统的某些部分,而dist-upgrade确实如此。这是运行后的示例apt-get upgrade

apt-get upgrade

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Run Code Online (Sandbox Code Playgroud)

apt-get dist-upgrade

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-3.0.0-13 linux-headers-3.0.0-13-generic
  linux-image-3.0.0-13-generic
The following packages will be upgraded:
  linux-generic linux-headers-generic linux-image-generic
3 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 48.5 MB of archives.
After this operation, 215 MB of additional disk space will be used.
Do you want to continue [Y/n]?
Run Code Online (Sandbox Code Playgroud)

换句话说,为什么不能由upgrade?

jco*_*ado 393

apt-get手册

upgrade
   upgrade is used to install the newest versions of all packages
   currently installed on the system from the sources enumerated in
   /etc/apt/sources.list. Packages currently installed with new
   versions available are retrieved and upgraded; under no
   circumstances are currently installed packages removed, or packages
   not already installed retrieved and installed. New versions of
   currently installed packages that cannot be upgraded without
   changing the install status of another package will be left at
   their current version. An update must be performed first so that
   apt-get knows that new versions of packages are available.

dist-upgrade
   dist-upgrade in addition to performing the function of upgrade,
   also intelligently handles changing dependencies with new versions
   of packages; apt-get has a "smart" conflict resolution system, and
   it will attempt to upgrade the most important packages at the
   expense of less important ones if necessary. So, dist-upgrade
   command may remove some packages. The /etc/apt/sources.list file
   contains a list of locations from which to retrieve desired package
   files. See also apt_preferences(5) for a mechanism for overriding
   the general settings for individual packages.
Run Code Online (Sandbox Code Playgroud)

apt使用 14.04 以后可用的更新工具:

full-upgrade
   full-upgrade performs the function of upgrade but may also remove
   installed packages if that is required in order to resolve a
   package conflict.
Run Code Online (Sandbox Code Playgroud)

你的具体情况,我明白了,例如,linux-headers是由双方提供了一个虚拟包linux-headers-3.0.0-12,并linux-headers-3.0.0-13和这听起来像那种软件包安装和删除所处理的dist-upgrade,而不是通过upgrade

  • @nobar 你没有看到,因为它是 `apt` 的一个选项,而不是 `apt-get`... :-) 试试 `man apt`。 (21认同)
  • @Zboson 是的,14.04 不是在 2011 年发布的,而是在 2014 年 4 月......看到模式了吗? (6认同)
  • 在 14.04.1 下,我没有将 `full-upgrade` 视为 `apt-get` 的选项。 (5认同)

pab*_*mme 169

apt-get upgrade仅限于用较新版本替换包的情况,但不需要添加或删除包。例如,新版本的 Firefox 应该可以使用apt-get upgrade.

但是apt-get upgrade,当更新版本需要添加或删除时,将拒绝工作。例如,当您linux-image-3.2.0-10-generic安装并linux-image-3.2.0-11-generic出现内核时,linux-image-generic软件包会更新以依赖于较新的版本。为了安装新内核,您需要运行apt-get dist-upgrade.

请注意 anapt-get upgrade将如何说内核包已经是held back. 这就是使用apt-get dist-upgrade.

  • 图形实用程序“update-manager”不直接使用“apt-get”;相反,它与一个名为“aptdaemon”的后端一起工作。`update-manager` 的标准功能是 `apt-get` 的 `upgrade` 和 `dist-upgrade` 模式的混合:它可以添加但不能删除包 - 它在删除时调用“部分升级”工具必需的。使用命令行时,请使用 `apt-get upgrade`。如果您看到它报告软件包已被“阻止”,请运行 `apt-get dist-upgrade` 以获取剩余的更新。 (15认同)
  • 完美的!:D 还有两个问题...... Ubuntu 中的图形更新管理器使用了什么?什么是推荐的? (3认同)

psu*_*usi 38

基本上升级只会将现有包从一个版本升级到另一个版本。它不会安装或删除软件包,即使升级其他软件包需要这样做。在内核更新的情况下,升级 linux-generic 包需要安装新的 linux-3.0.0-13-generic 包,并且因为 upgrade 拒绝安装或删除包,它拒绝升级 linux-generic。

有时包之间的各种不兼容需要删除一些包才能升级其他包,这也需要 dist-upgrade。内核更新总是需要 dist-upgrade,因为它们是如何处理的。每次都创建一个全新的内核包,而不是更新内核包,并且更新内核元包以依赖于新内核包而不是旧内核包。这样做是为了让您保留旧内核版本,以便在引导新内核时出现问题时,您可以从引导菜单中选择旧内核并恢复。

  • 最好的要点。不过,如何保留某个包? (2认同)

dav*_*id6 14

apt-get upgrade命令通常只会为当前安装的软件包安装更新(或修复)。例如,通常会使用此命令安装Mozilla Firefox的新版本。

但是apt-get upgrade一般安装新版本,其中的重大变化(包括去除包或GRUB更新是必需的)。例如,当新的 Linux 内核(linux-image-3.xx-xx-generic 等)可用时,将不会安装该软件包。

为了安装新内核,您需要运行apt-get dist-upgrade. 运行时会通知您apt-get upgrade,因为它会说某些包已被阻止。这是您要使用的提示:apt-get dist-upgrade

  • 这是误导。`dist-upgrade` 不会升级到新版本,除非 `sources.list` 已相应修改(即使如此,这也不是 Ubuntu 支持的升级方式)。当使用 `dist-upgrade` 安装新内核时,这不是*新版本的 Ubuntu*。这只是一个*新包。*此外,“或需要 GRUB 更新”的说法是错误的。`sudo apt-get upgrade` 完全有能力在必须更新 GRUB 的情况下升级包,只要不删除包并安装新包。`update-grub` 一如既往地自动运行。 (13认同)
  • 你应该写下你自己的答案,因为这不会增加我的清晰度。 (3认同)
  • 除了 Eliah 提到的,重要的一点是 `apt-get upgrade` 不会删除或添加包。如果对包的修复需要新包,则更新将被阻止。[pablomme 的回答](http://askubuntu.com/a/99039/43660),你修改为不太准确,更好,我建议读者去那个。 (3认同)
  • 更正:`apt-get upgrade` 永远不会*安装*或*删除*任何包。内核升级被打包为新包,因此,`apt-get upgrade` 永远不会升级内核。内核升级会进行“重大”更改(例如 GRUB 配置)这一事实并不是 `upgrade` 和 `dist-upgrade` 之间存在差异的原因。 (2认同)

jay*_*h R 10

简短回答那些想要确切点的人

apt-get update

  • update 命令用最新的可用版本更新软件包列表
  • 它不会升级已安装的软件包,只是用新版本更新软件包列表
  • 升级需要运行升级命令

apt-get upgrade

  • 将已安装的软件包更新到最新可用版本
  • 它将仅将已安装的软件包升级到最新版本
  • 如果缺少依赖项,则将保留当前版本而不进行任何升级

apt-get dist-upgrade

  • 将已安装的软件包更新到具有所需依赖项的最新可用版本
  • 它将自动安装所需的附加软件包和依赖项,并删除已安装的软件包以进行明确的升级

apt-get full-upgrade

  • full-upgrade 执行升级功能,但如果需要解决软件包冲突,也可能删除已安装的软件包。

apt-get do-release-upgrade

  • 它可以升级 ubuntu 的发行版本,例如如果您想将 ubuntu 18.04 升级到 20.04,我们可以运行 do-release-upgrade
  • 要使用此命令,系统必须首先完全升级。为此,您应该首先运行 sudo apt-get Upgrade,然后运行 ​​sudo apt-get dist-upgrade

参考: https: //linuxhint.com/apt_get_upgrade_dist_upgrade/# :~:text=Unlike%20apt%2Dget%20upgrade%20command,sudo%20apt%2Dget%20dist%2Dupgrade