有時候我們在Debian或是其衍生的Linux發行版上安裝或是升級套件之後,會看到有一些套件被保留下來,出現The following packages have been kept back訊息,此時再使用apt upgrade指令也無法升級它們。這是因為apt upgrade是最安全的升級套件的指令,如果被升級的套件在升級後需要安裝額外的套件,或是需要移除掉現有的套件時,apt upgrade指令便不會升級該套件。



如下圖,就是發生某些套件無法被apt upgrade指令升級的情況:

linux-safe-upgrade

這篇文章會依照安全程度整理能解決這個狀況的指令。請從上到下閱讀下去,以免您的Linux作業系統出問題。

apt install --only-upgrade分別升級套件

有時候套件即便在升級後不需安裝額外的套件或是移除掉現有的套件,apt upgrade指令也還是升級不了該套件。可以先試著用apt install --only-upgrade指令來升級它們。指令用法如下:

sudo apt install --only-upgrade <package1> <package2>

apt install指令的--only-upgrade參數可以確保這個指令只會升級已經安裝的指定套件。

雖然感覺這個指令和apt upgrade指令只是差在前者是升級所有套件,後者是升級指定套件。但有時候用這樣的方式,原本不能升級的套件就都能成功被升級了,很奇怪。

允許apt upgrade能夠安裝額外的套件
sudo apt upgrade --with-new-pkgs

如果被升級的套件在升級後需要安裝額外的套件,用這個指令就會安裝額外的套件,並升級舊套件。

改用aptitude safe-upgrade指令

aptitude safe-upgrade指令會安裝額外的套件,並移除掉無被使用的套件。

雖然看起來aptitude safe-upgrade指令好像只比apt upgrade --with-new-pkgs多出移除無用套件的功能,但神奇的是,有時無法被後者升級的套件卻可以被前者升級。

您的Linux發行版很可能沒有內建aptitude,可以先用以下指令來安裝:

sudo apt install aptitude

接著就可以執行:

sudo aptitude safe-upgrade
使用apt full-upgrade指令

這個指令有一定程度的機率會導致Linux作業系統異常,請謹慎使用(通常我們只會在剛安裝完Linux作業系統的時候執行這個指令,否則在使用前應先做好備份)。它會安裝額外的套件,並移除掉需要被移除的套件。

sudo apt full-upgrade

apt full-upgrade指令等同於apt dist-upgradeapt-get dist-upgrade