apt-get update && apt-get upgrade
而不是GUI来运行我的更新和升级,因为它似乎运行得更快。 但是,最近我注意到我经常收到一条消息,说我的一项升级被推迟了。然后,我通常运行
dist-upgrade
来运行它,并且工作正常。据我阅读此问题及其答案后的判断,dist-upgrade
会执行所有相同的操作,然后执行某些操作。 所以,我的问题是:为什么要全部使用
apt-get upgrade
?为什么不一直使用apt-get dist-upgrade
?为什么apt-get 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-get
和apt-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
评论
在较新的Ubuntu版本中,sudo apt full-upgrade会执行类似的操作。