问题描述
看起来这应该是真的,但我想确定一下。谢谢!
最佳答案
简答
不,它们不一样。 apt-get upgrade
不处理版本之间不断变化的依赖关系,所以如果一个包改变了依赖关系,它不会被升级(它将是 “held back”)。有关更多详细信息,请参阅长答案。
使用软件更新程序和使用 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.
(我强调)
这意味着具有旧版本中不需要的新依赖项的较新版本包将不会使用此方法升级(除非已经安装了新依赖项)。这些将显示为 “Held back”。
-
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
不会升级它。
次佳答案
它几乎相同,但不完全相同。例如,当提供内核更新时,需要 sudo apt-get update && sudo apt-get dist-upgrade
来获取这些更新。
sudo apt-get update && sudo apt-get upgrade
会告诉你一些包被阻止了。
使用软件更新程序使一切变得无缝,您不会看到任何阻碍。
第三种答案
在 apt
可用的情况下,phased updates ( mentioned by pabouk ) 是使用软件更新程序和命令行进行更新之间最显著的区别。
如今,apt
实用程序——在发布此问题时为 didn’t exist,但如果有的话,很可能会包含在问题中——越来越流行替代 apt-get
来升级软件包。它们很相似: same package (也称为 apt
) provides both 和 apt
可以做的一切,传统的 apt-
实用程序也可以,尽管在某些情况下您必须传递特殊的配置选项。但是 apt
比 apt-get
更接近软件更新程序。与软件更新程序一样,当现有包的新版本将它们声明为依赖项时,sudo apt upgrade
就是 capable of installing new packages。
所以现在,如果用户希望自动安装新的依赖项,那么关心这种区别的用户可以只运行 sudo apt upgrade
而不是 sudo apt-get upgrade
。因此,软件更新程序稍微延迟某些更新的功能(to determine if they are stable 处于正常状态并限制损坏(如果不是),现在可能是使用软件更新程序和在 命令行 上更新之间的主要区别。
软件更新程序的这种行为是由于 phased updates policy 。自几年前 the policy was introduced 和 pabouk commented 以来,该策略 – 在软件更新程序中实现但不在 apt-get
(或 apt
)中实现 – 一直是这两种方法之间的主要区别:
There is another difference:
apt-get
does not use PhasedUpdates so sometimes Software Updater shows less updates thanapt-get
. See Why Does Software Updater Say No updates Available, but apt-get upgrade Shows updates available?.
这可能一直是最显著的区别,因为当面对 upgrade
操作不愿意安装新软件包或卸载现有软件包时,始终可以运行 sudo apt-get dist-upgrade
。但是,从 命令行 更新时,分阶段更新的相对重要性随 apt
增加:
-
与
apt-get
一样,apt
命令将下载和安装更新,即使如果使用软件更新程序,它们会因分阶段更新策略而延迟。 -
但与
apt-get
不同,apt
命令的upgrade
操作将安装以前未安装但需要作为新软件包版本的依赖项的新软件包。
除了 (a) 更喜欢图形界面和 (b) 其桌面集成在更新可用时提供通知之外,目前使用软件更新程序的主要原因是它是参与分阶段更新的最简单方法。