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

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

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

评论

在较新的Ubuntu版本中,sudo apt full-upgrade会执行类似的操作。

#1 楼

我通常使用以下命令升级计算机:

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.


评论


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

– JimChristie
2012年12月20日下午6:38

dist-upgrade比升级更容易破坏系统。升级可确保您的系统保持完整。

–脑袋
2014年3月18日,1:18

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

– Henno
2014年4月4日在7:06



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

–肯尼
15年11月19日在13:54

在这里浪费时间的原因是什么?

–意大利PaleAle
18年6月11日,0:36

#2 楼

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



apt-get upgrade不会更改已安装的内容(仅版本),
apt-get dist-upgrade将根据需要安装或删除软件包以完成升级,

apt upgrade将自动安装但不会删除软件包。

评论


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

–斯蒂芬·安杰利科(Stephen Angelico)
2014年7月27日14:00

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

–muru
2014年7月27日14:22

apt和apt-get的相应手册页指定了我最初所说的内容。

–斯蒂芬·安杰利科(Stephen Angelico)
15年8月20日在4:27



apt safe-upgrade在我的系统上不是有效的操作。如果您的意思是能力安全升级,则不尽然。 apt-get upgrade将永远不会安装软件包,而apt upgrade和aptitude safe-upgrade将根据依赖关系安装新软件包。因此,aptitude safe-upgrade等同于apt升级,而不是apt-get升级。

–斯蒂芬·安杰利科(Stephen Angelico)
17年2月17日在22:33

@Timo如果apt升级“足够”,我们将没有其他选择。 apt-get upgrade和apt-get dist-upgrade / apt full-upgrade具有不同的用途。现在,如果大多数情况下apt升级对您来说足够了,很好,但是每个不同的命令都有其用处。

–斯蒂芬·安杰利科(Stephen Angelico)
20/09/1在11:31



#3 楼

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

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

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

评论


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

–ændrük
2012年11月8日19:51



升级也将永远不会添加需要作为依赖项的新软件包。来自man apt-get:“在任何情况下都不会删除当前已安装的软件包,或者尚未检索并安装尚未安装的软件包” @ændrük仅仅是因为某些“智能”并不意味着它将始终按照用户想要的去做(甚至是做某事)完全合理)。每当系统更新删除软件包时,最好在按Y之前先检查一下它在做什么。

– Eliah Kagan
2014年3月18日在1:06



#4 楼

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