有時候我們在Debian或是其衍生的Linux發行版上安裝或是升級套件之後,會看到有一些套件被保留下來,出現The following packages have been kept back
訊息,此時再使用apt upgrade
指令也無法升級它們。這是因為apt upgrade
是最安全的升級套件的指令,如果被升級的套件在升級後需要安裝額外的套件,或是需要移除掉現有的套件時,apt upgrade
指令便不會升級該套件。
如下圖,就是發生某些套件無法被apt upgrade
指令升級的情況:
這篇文章會依照安全程度整理能解決這個狀況的指令。請從上到下閱讀下去,以免您的Linux作業系統出問題。
用apt install --only-upgrade
分別升級套件
有時候套件即便在升級後不需安裝額外的套件或是移除掉現有的套件,apt upgrade
指令也還是升級不了該套件。可以先試著用apt install --only-upgrade
指令來升級它們。指令用法如下:
apt install
指令的--only-upgrade
參數可以確保這個指令只會升級已經安裝的指定套件。
雖然感覺這個指令和apt upgrade
指令只是差在前者是升級所有套件,後者是升級指定套件。但有時候用這樣的方式,原本不能升級的套件就都能成功被升級了,很奇怪。
允許apt upgrade
能夠安裝額外的套件
如果被升級的套件在升級後需要安裝額外的套件,用這個指令就會安裝額外的套件,並升級舊套件。
改用aptitude safe-upgrade
指令
aptitude safe-upgrade
指令會安裝額外的套件,並移除掉無被使用的套件。
雖然看起來aptitude safe-upgrade
指令好像只比apt upgrade --with-new-pkgs
多出移除無用套件的功能,但神奇的是,有時無法被後者升級的套件卻可以被前者升級。
您的Linux發行版很可能沒有內建aptitude
,可以先用以下指令來安裝:
接著就可以執行:
使用apt full-upgrade
指令
這個指令有一定程度的機率會導致Linux作業系統異常,請謹慎使用(通常我們只會在剛安裝完Linux作業系統的時候執行這個指令,否則在使用前應先做好備份)。它會安裝額外的套件,並移除掉需要被移除的套件。
apt full-upgrade
指令等同於apt dist-upgrade
、apt-get dist-upgrade
。