Apt

apt full-upgrade vs apt upgrade 冗餘

  • January 20, 2021

這可能是一個可能的錯誤,但它已經困擾我幾天了。

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

當我將兩個輸出與:

$diff apt_get_dist_list apt_get_upgrade_list | grep -E '<|>'

就我而言,我得到以下資訊:

< gir1.2-nm-1.0
< libcpupower2
< linux-kbuild-5.2
< blueman
< linux-cpupower
< linux-headers-amd64
< linux-image-amd64
< pdf-parser

這使得差異非常明顯,特別是考慮到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

並比較:

$diff apt_get_dist_list apt_fullupgrade_list | grep -E '<|>'

正如預期的那樣,我一無所獲,因為apt full-upgrade並且apt-get dist-upgrade旨在以相同的方式表現,但是當我比較時:

$diff apt_get_upgrade_list apt_upgrade_list | grep -E '<|>'

我得到與比較時相同的輸出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

我能得出的唯一結論是 that apt upgradeis exactly the same as apt full-upgradewhich also make it as 相同apt-get dist-upgrade,這最終意味著不僅是apt upgrade多餘的,而且更令人擔憂的是目前apt 不允許相同的行為作為apt-get upgrade.

它們不是多餘的;還有一個額外的微妙之處:

  • 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)。

引用自:https://unix.stackexchange.com/questions/536565