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


302

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

但是,最近我注意到,我经常收到一条消息,说我的一项升级被推迟了。然后,我通常dist-upgrade会运行它,并且运行正常。据我阅读此问题及其答案后的判断,我会dist-upgrade做所有相同的事情,然后再做一些事情。

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


1
在较新的Ubuntu版本中,sudo apt full-upgrade执行类似的操作。
亚伦·弗兰克

Answers:


410

我通常使用以下方式升级计算机:

sudo apt-get update && time sudo apt-get dist-upgrade

以下是摘录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.

44
感谢您不仅总结了两者之间的差异,而且还解释了一种情况可能比另一种情况更好的情况。这正是我想要的。
jimchristie 2012年

10
dist-upgrade比坏东西更容易摔坏upgradeupgrade确保您的系统保持完整。
Braiam

5
如果您愿意采用压路机方法(即,包装盒上没有运行关键任务的生产软件),则dist-upgrade更有可能解决软件包版本冲突的问题
Henno 2014年

1
关于“ apt-get升级”的一个小问题是指“没有删除当前安装的软件包或添加了新软件包”的事实:现有软件包也会相应地进行升级。例如oldA取决于oldB。是否将oldA和oldB都升级?如果newA依赖于oldB而不是newB,在升级过程中这两个怎么办?两者都未升级或都已升级,这可能会使newA无法运行,因为oldB丢失了吗?
肯尼

2
time在这里使用的原因是什么?
ItalyPaleAle18年

128

我知道这个问题已经回答并且已经一岁了,但是我觉得这个需要说。Ubuntu 14.04和更高版本(以及从Google找到这些的Debian Jessie和更高版本)使用APT 1.0,它允许使用命令apt代替apt-getapt-cache进行某些操作。

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

@muru感谢您的编辑和有关完全升级的说明。我主要使用Debian 7(APT 1.0之前的版本),并且只玩过Debian Jessie和Ubuntu 14.04。
Stephen Angelico 2014年

别客气。作为jessie经常使用14.04的人,我首先从您的回答中学到了这个新实用程序!
muru

您有描述来源apt upgrade吗?我想出的一切都暗示着apt upgrade与相同apt-get upgrade。例如,apt help upgrade在我的系统输出中:"apt upgrade" is equivalent to "sudo apt-get upgrade"
Jon Bentley

1
有关的手册页aptapt-get指定了我最初所说的内容。
史蒂芬·安杰利科

1
apt safe-upgrade在我的系统上不是有效的操作。如果您的意思是aptitude safe-upgrade,则不是。apt-get upgrade永远不会安装软件包,而apt upgradeaptitude safe-upgrade作为依赖的需求将安装新的软件包。所以aptitude safe-upgrade等于apt upgrade,不是apt-get upgrade
斯蒂芬·安吉利科

7

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

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

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


5
尽管这是正确的,但我认为它不能解决问题。如果我们有一个“智能”选项可以处理依赖项更改并消除混乱,那么为什么不总是使用它呢?
ændrük

1
upgrade也绝不会添加新的软件包成为需要与依赖。来自man apt-get:“在任何情况下都不会删除当前已安装的软件包,或者会检索并安装尚未安装的软件包” @ændrük 。任何时候,系统更新删除一个包,这是很好看在什么它按Y.这样做之前
利雅卡根

2

用户可能已经依赖于隐式安装的软件包,因为其他(明确安装的)软件包对它们的依赖性。因此,包装系统无法意识到用户/管理员希望保留某些功能,否则可能会通过dist升级将其删除。


-4

对于Win-Home用户而言,始终“ dist-upgrade”应该不是问题,但是如果您正在运行复杂的系统,则最好“绝对(不要)更改正在运行的系统” ...即使“应该”没有问题,“可能”出现问题-怎么会把你拒之门外! 应该是拥有权利2决定权的人;-)


3
Should not be a problem for Win-Home Users to always "dist-upgrade"..这是为什么 ?
heemayl

1
好吧,假设您设置了一个ubuntu服务器,这是一个用于生产环境的工作站:当您始终自动进行dist-up升级时,您可能无法控制,遇到问题时-即使您没有时间解决问题。那一刻,自动dist升级完成。某些配置可能需要“人工”触摸端口。这就是我几次经历。当您仅在Win-Home之类的“家庭”平台上工作时,默认情况下,用户未启用控制更新的权限。因此,您可能不会打扰您。
考夫曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.