Answers:
不,他们不一样。apt-get upgrade
不能处理版本之间的依赖关系更改,因此,如果程序包更改了依赖关系,则不会升级(将“保留”)。有关更多详细信息,请参见详细答案。
使用Software Updater和使用sudo apt-get update ; sudo apt-get dist-upgrade
(请注意dist-
)几乎是等效的,只是一个人显然是GUI,另一个人是控制台应用程序,并且还有一些非常小的信息差异。
来自man apt-get
,
apt-get upgrade
:
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.
(我强调)
这意味着具有旧版本不需要的新依赖关系的软件包的新版本将不会使用此方法升级(除非已经安装了新的依赖关系)。这些将显示为“后退”。
apt-get dist-upgrade
:
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. The dist-upgrade
command may therefore 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.
(我强调)
这意味着使用此命令而不是upgrade
,可以升级具有新(或已删除)依赖项的软件包。
两者之间差异的一个很好的例子是何时发布了新的Linux内核。它打包在linux-image-generic
软件包中,该软件包始终取决于Linux内核的最新软件包。因为linux-image-generic
每次内核升级时更改的依赖关系都upgrade
不会升级。
apt-get upgrade
在需要时)apt-get
不能这样做吗?似乎两者之间还有其他根本不同的地方。
几乎相同,但不完全相同。例如,提供内核更新时,sudo apt-get update && sudo apt-get dist-upgrade
需要获取这些更新。
sudo apt-get update && sudo apt-get upgrade
会告诉您某些软件包已被保留。
使用Software Updater可以使一切变得无缝,并且您不会看到任何阻碍。
apt
可用的,分阶段的更新(由pabouk提到)正在更新之间与软件更新程序和命令行的最显着的区别。如今,该apt
实用程序(已发布该问题时不存在,但如果存在的话,很可能已包含在该问题中)apt-get
成为升级软件包的一种越来越受欢迎的替代方法。它们是相似的:同一包(也称为apt
)既提供,又提供所有apt
功能,传统apt-
实用程序也可以提供,尽管在某些情况下,您必须传递特殊的配置选项。但是apt
比apt-get
离软件更新器更近。与软件更新程序一样,当新版本的现有软件包将它们声明为依赖项时,它也能够安装新软件包。sudo apt upgrade
因此,如今,关注此区别的用户可以直接运行,sudo apt upgrade
而不是sudo apt-get upgrade
希望自动安装新的依赖项。因此,Software Updater的功能是稍微延迟一些更新,以确定它们在野外是否稳定,如果不稳定,则限制损坏,这现在可能是使用Software Updater和在命令行上进行更新之间的主要区别。
软件更新程序的此行为归因于分阶段更新策略。自从引入该策略以来,该策略(在Software Updater中实现,但未在apt-get
(或apt
)中实现)一直是两种方法之间的主要区别,而pabouk在几年前对此进行了评论:
还有另一个区别:
apt-get
不使用PhasedUpdates,因此有时Software Updater显示的更新少于apt-get
。请参阅为什么软件更新程序说没有可用的更新,但apt-get升级显示有可用的更新?。
这可能一直是最重要的区别,sudo apt-get dist-upgrade
因为面对该upgrade
操作不愿意安装新软件包或卸载现有软件包的情况,总是可以运行该软件包。但是,从命令行进行更新时,分阶段更新的相对重要性随着apt
以下因素而增加:
apt-get
,apt
即使使用软件更新程序,该命令也会下载并安装更新,即使由于分阶段更新策略而导致更新被延迟。apt-get
,该apt
命令的upgrade
操作将安装以前未安装但需要作为新软件包版本依赖项的新软件包。除了(a)偏爱图形界面和(b)其桌面集成在更新可用时提供通知外,当前的主要原因可能是使用Software Updater,这是参与分阶段更新的最简单方法。
apt-get
不使用PhasedUpdates,因此有时Software Updater显示的更新少于apt-get
。请参阅为什么软件更新程序说没有可用的更新,但apt-get升级显示有可用的更新?。