为什么使用 apt-get upgrade 而不是 apt-get dist-upgrade?

jim*_*tie 359 upgrade dist-upgrade

我通常apt-get update && apt-get upgrade用来运行我的更新和升级而不是 GUI,因为它似乎运行得更快。

但是,我最近注意到我经常收到一条消息,说我的一个升级被阻止了。然后我通常运行dist-upgrade它通过它并且它工作正常。据我所知,在阅读这个问题及其答案后,会dist-upgrade做所有相同的事情,然后做一些事情。

所以,我的问题是:为什么要使用apt-get upgrade?为什么不一直使用apt-get dist-upgrade?为什么apt-get upgrade还要存在?

rdu*_*ain 488

我通常使用以下方法升级我的机器:

sudo apt-get update && time sudo apt-get dist-upgrade
Run Code Online (Sandbox Code Playgroud)

以下是摘录自man apt-get使用升级遵循规则:在任何情况下都不会删除当前安装的软件包,或者检索和安装尚未安装的软件包。如果这对您很重要,请使用apt-get upgrade. 如果您希望事情“正常工作”,您可能希望apt-get dist-upgrade确保解决依赖关系。

要详细说明为什么要升级而不是dist-upgrade,如果您是系统管理员,则需要可预测性。您可能正在使用高级功能,例如apt 固定或从PPA集合中提取(也许您有一个内部 PPA),使用各种自动化来检查您的系统和可用升级,而不是总是急切地升级所有可用包。当 apt 执行非脚本行为时,您会感到非常沮丧,特别是如果这会导致生产服务停机。

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)

  • 感谢您不仅总结了两者之间的差异,还解释了一个可能比另一个更好的情况。这正是我正在寻找的。 (55认同)
  • `dist-upgrade` 比 `upgrade` 更容易破坏东西。`upgrade` 确保您的系统保持完整。 (11认同)
  • dist-upgrade 更有可能解决包版本冲突的问题,如果您对采用压路机方法感到满意(即您没有在盒子上运行关键任务生产软件) (5认同)
  • 在这里使用`time`的原因是什么? (5认同)

Ste*_*ico 151

我知道这个问题已经回答了并且已经有一年了,但我觉得这需要说。Ubuntu的14.04和更高(和Debian杰西和以后,对于那些从谷歌发现此)使用APT 1.0,这允许该命令apt,而不是apt-getapt-cache用于一些操作。

  • apt-get upgrade 不会更改已安装的内容(仅限版本),
  • apt-get dist-upgrade 将根据需要安装或删除软件包以完成升级,
  • apt upgrade 将自动安装但不会删除软件包。
  • apt full-upgrade执行与 相同的功能apt-get dist-upgrade


Jan*_*ary 8

upgrade选项仅安装系统上已安装的软件包的新版本(是的,内核更新属于它们)。

但是,有时更新会更改依赖项:例如,包的新版本将不再依赖于您已安装的库,或者需要安装其他库。该upgrade选项永远不会删除您不再实际需要的已安装软件包。

但是,该dist-upgrade选项可以“智能地”处理依赖项系统中的更改。这包括删除不再需要的包或解决由于依赖项更改而出现的包之间的冲突。

  • 虽然这是准确的,但我认为它不能回答问题。如果我们有一个“智能”选项可以处理依赖项更改并消除混乱,为什么不总是使用它呢? (6认同)
  • `upgrade` 也永远不会*添加* * 成为* 需要的新包作为依赖项。来自 [`man apt-get`](http://manpages.ubuntu.com/manpages/precise/en/man8/apt-get.8.html):“在任何情况下都不会删除当前已安装的软件包,或未删除的软件包已经安装检索并安装”@ændrük 仅仅因为某些东西是“智能的”并不意味着它总是会做用户想要的(或者甚至是完全合理的)。每当系统更新*删除*一个包时,最好在按 Y 之前查看它在做什么。 (2认同)