apt 完全升级与 apt 升级冗余

Net*_*ear 10 apt package-management dist-upgrade

这可能是一个可能的错误,但它已经困扰了我几天了。

apt-get upgrade和之间的区别apt-get dist-upgrade现在已经众所周知且已经确立,即升级安装/升级而dist-upgrade能够安装/删除/升级如果软件包删除恰好是安装或升级另一个软件包所必需的。使用类似的东西可以很容易地发现包的差异

(以下是一种快速而肮脏的方法,需要在终端中输入 sudo 密码以进行复制粘贴。此外,由于我自己修补了几个软件包和驱动程序,我需要保留功能,因此我将 OR 包含在在awk提取只有那些安装和那些要升级,而不是那些被列为必须保持回来,但下面应该工作,即使这些行不存在于你的apt upgrade输出):

$echo -e 'n' | sudo apt-get dist-upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' | awk '
BEGIN {RS=" ";} {print $0}
' | grep . > apt_get_dist_list

$echo -e 'n' | sudo apt-get upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' |  awk '
BEGIN {RS=" ";} {print $0}
' | grep . > apt_get_upgrade_list
Run Code Online (Sandbox Code Playgroud)

当我将两个输出与:

$diff apt_get_dist_list apt_get_upgrade_list | grep -E '<|>'
Run Code Online (Sandbox Code Playgroud)

就我而言,我得到以下信息:

< gir1.2-nm-1.0
< libcpupower2
< linux-kbuild-5.2
< blueman
< linux-cpupower
< linux-headers-amd64
< linux-image-amd64
< pdf-parser
Run Code Online (Sandbox Code Playgroud)

这使得差别相当明显,尤其是考虑的存在linux-header-*linux-image-*apt-get dist-upgrade

现在,如果我对apt upgrade和重复相同的过程apt full-upgrade

$echo -e 'n' | sudo apt upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' | awk '
BEGIN {RS=" ";} {print $0}
' | grep . > apt_upgrade_list

$echo -e 'n' | sudo apt full-upgrade | awk '
/be installed|be upgraded/{f=1;next}; /not upgraded|kept back/{f=0}f' | awk '
BEGIN {RS=" ";} {print $0}
' | grep . > apt_fullupgrade_list
Run Code Online (Sandbox Code Playgroud)

并比较:

 $diff apt_get_dist_list apt_fullupgrade_list | grep -E '<|>'
Run Code Online (Sandbox Code Playgroud)

我一无所获,正如预期的那样,因为apt full-upgradeapt-get dist-upgrade旨在以完全相同的方式行事,但是当我比较时:

$diff apt_get_upgrade_list apt_upgrade_list | grep -E '<|>'
Run Code Online (Sandbox Code Playgroud)

我得到与比较时相同的输出apt-get upgrade with apt-get dist-upgrade

> gir1.2-nm-1.0
> libcpupower2
> linux-kbuild-5.2
> blueman
> linux-cpupower
> linux-headers-amd64
> linux-image-amd64
> pdf-parser
Run Code Online (Sandbox Code Playgroud)

我能得出的唯一结论是 thatapt upgradeapt full-upgradewhich完全相同,也使它与 相同apt-get dist-upgrade,这最终意味着不仅是apt upgrade多余的,而且更令人担忧的是,目前apt 不允许出现相同的行为作为apt-get upgrade

Ste*_*itt 20

它们不是多余的;还有一个额外的微妙之处:

  • apt-get upgrade 只会升级当前安装的软件包;
  • apt upgrade将升级当前安装的软件包并安装由更新的依赖项引入的新软件包
  • 各种dist-upgradefull-upgrade变体将升级当前安装的包,安装作为依赖项引入的新包,并删除被升级包破坏的包。

换一种方式:

命令 升级 安装 消除
apt-get upgrade 是的
apt upgrade 是的 是的
apt-get dist-upgradeapt full-upgrade等等。 是的 是的 是的

实际上,apt upgrade它比apt-get upgrade(默认情况下)更安全,因为它允许在 ABI 更改时自动安装更新的内核。请参阅apt-get upgrade 阻止内核更新。在 Debian 9 上应用更新的官方说明是什么?举个例子。

apt-get upgrade可以说表现得像个apt upgrade--with-new-pkgs选项。这也可以使用 APT 配置文件进行配置;您可以使用 来查看apt的特定设置apt-config dump | grep '^Binary::apt(此处涉及的设置是APT::Get::Upgrade-Allow-New)。