在 Ubuntu 上通过 do-release-upgrade 发布升级失败后如何删除过时的软件包?

Mur*_*urz 16 upgrade package-management do-release-upgrade

有时,当我通过 升级系统时do-release-upgrade,更新过程失败,脚本告诉我通过 手动完成该过程dpkg --configure -a。这不是一个严重的问题 - 在手动解决依赖关系问题和完成升级过程后一切正常。

但是do-release-upgrade脚本在升级完成后有一个清理过程:

Remove obsolete packages?  
XXX packages are going to be removed.  
Continue [yN]  Details [d]y
Run Code Online (Sandbox Code Playgroud)

它从旧版本的系统中删除了一些过时的软件包。

当自动升级失败并且我手动完成升级时,似乎不会执行此过程,因此旧版本的过时软件包仍安装在系统中。

手动完成升级后,如何手动运行“删除过时的软件包”过程?

kyo*_*ake 23

测试这个:

打开终端(按Ctrl+ Alt+ T)。

运行这个:

sudo -i

apt-get update
apt-get autoremove
apt-get clean
 
UNUSCONF=$(dpkg -l|grep "^rc" | awk '{print $2}')
apt-get remove --purge $UNUSCONF

NEWKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')

ADDKERNEL="linux-(image|headers|ubuntu-modules|restricted-modules)"

METAKERNEL="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"

UNUSKERNELS=$(dpkg -l | awk '{print $2}' | grep -E $ADDKERNEL | grep -vE $METAKERNEL | grep -v $NEWKERNEL)

apt-get remove --purge $UNUSKERNELS

update-grub
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这些命令正是我想要的,其中主要是 `dpkg -l|grep "^rc"|awk '{print $2}'` 显示要删除的包。这很奇怪,apt-get 或 aptitude 不想看到它来删除。 (2认同)
  • 根据您的示例,在 do-release-upgrade 失败后删除过时软件包的单行 cli 命令是:`sudo dpkg -l|grep "^rc"|awk '{print $2}' | xargs sudo apt-get remove -y --purge`。注意,此命令无需确认即可删除包,但对于自动快速清理系统很有用。 (2认同)