使用Software Updater与运行apt-get update和apt-get upgrade相同吗?

看来这应该是真的,但我想确定。 谢谢!

简短的回答

不,他们不一样。 apt-get upgrade不会处理更改版本之间的依赖关系,因此如果某个包更改了依赖关系,它将不会升级(它将被“阻止”)。 有关详细信息,请参阅完整答案。

使用软件更新程序并使用sudo apt-get update ; sudo apt-get dist-upgrade 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不会升级它。

它几乎相同但不完全相同。 例如,当提供内核更新时,需要sudo apt-get update && sudo apt-get dist-upgrade来获取这些更新。

sudo apt-get update && sudo apt-get upgrade会告诉你一些软件包已被阻止。

使用软件更新程序可以使一切无缝,您不会看到任何阻碍。

有了apt , 分阶段更新 ( 由pabouk提到 )是使用Software Updater和命令行进行更新之间最显着的区别。

这些天, apt实用程序 – 当这个问题被发布时不存在但可能已包含在问题中 – 如果它有 –apt-get用于升级包的越来越受欢迎的替代方案。 它们是相似的: 相同的包 (也称为apt ) 提供了两者 ,并且所有东西都可以做,传统的apt-实用程序也可以,但在某些情况下你必须传递特殊的配置选项。 但aptapt-get更接近于软件更新程序。 与软件更新程序一样,当新版本的现有软件包将它们声明为依赖项时, sudo apt upgrade 能够安装新软件包 。

所以现在,如果他们想要自动安装新的依赖项,那么关注这种区别的用户可以运行sudo apt upgrade而不是sudo apt-get upgrade 。 因此,软件更新程序的function是稍微延迟一些更新, 以确定它们是否在野外是否稳定并且如果不是,则限制损坏,现在可能是使用软件更新程序和在命令行上更新之间的主要区别。

软件更新程序的此行为归因于分阶段更新策略 。 该策略 – 在软件更新程序中实现, 但在apt-get (或apt )中实现 – 是自该政策推出以来两种方法之间的一个主要区别,并且几年前pabouk对此进行了评论

还有另一个区别: apt-get不使用PhasedUpdates,因此有时软件更新程序显示的更新少于apt-get 。 请参阅为什么软件更新程序说没有可用的更新,但apt-get upgrade显示可用的更新? 。

pabouk 2015年 2月25日7:34

这可能始终是最重要的区别,因为当面对upgrade操作不愿意安装新软件包或卸载现有软件包时,可能总是运行sudo apt-get dist-upgrade 。 但是,从命令行更新时,分阶段更新的相对重要性随着apt增加而增加:

  • apt-get一样, apt命令将下载并安装更新,即使它们因为分阶段更新策略而被延迟,如果使用了软件更新程序。
  • apt-get 不同apt命令的upgrade操作安装以前未安装但需要作为新软件包版本的依赖项的新软件包。

除了 (a)更喜欢图形界面和(b)其桌面集成在更新可用时提供通知,主要的当前原因可能是使用软件更新程序,这是参与分阶段更新的最简单方法。