You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

APT命令无法升级被保留的软件包,求便捷升级方案

APT命令无法升级被保留的软件包,求便捷升级方案

兄弟我太懂你这种每次升级都卡壳的郁闷了!每次老老实实跑sudo apt-get update && sudo apt-get upgrade,结果总有十来个包被标记为“kept back”,试了带--with-new-pkgs的升级、dist-upgrade都没反应,只能手动复制粘贴包名去install,结果要么终端复制格式乱了,要么自己手滑打错字,简直浪费时间又闹心!

给你几个不用手动折腾的解决方案,亲测好用:

1. 一键提取并升级所有被保留的包

直接运行这条命令,它会自动识别出所有处于“kept back”状态的包,然后帮你安装升级:

sudo apt-get install $(apt list --upgradable 2>/dev/null | grep -v "^Listing..." | cut -d/ -f1)

原理是apt list --upgradable列出所有可升级的包(包括被保留的),然后过滤掉无关信息,提取出包名传递给install命令。

2. 试试更友好的apt full-upgrade

你之前用的dist-upgrade其实有个新别名full-upgrade,虽然功能差不多,但有时候在处理依赖上会更灵活,不妨试试:

sudo apt update && sudo apt full-upgrade

如果还是不行,可能这些包存在依赖冲突或者被特殊配置锁定了,你可以先查下这些包的版本状态,看看是不是有第三方源或者版本锁定的问题:

apt-cache policy coreutils libpulse-dev libpulse-mainloop-glib0 libpulse0 libpulse0:i386 libpulsedsp pulseaudio-utils snapd update-notifier update-notifier-common

从输出里能看到这些包可获取的版本、当前安装版本,以及对应的源,方便排查原因。

3. 写个小脚本一键搞定

要是上面的命令还满足不了你,那就整个小脚本自动化,以后一键运行就行:
把下面的内容保存成upgrade-kept.sh文件:

#!/bin/bash
# 提取被保留的包名
KEPT_PACKAGES=$(apt-get upgrade -s | awk '/The following packages have been kept back:/{getline; while(NF>0){print $0; getline}}' | tr '\n' ' ')

if [ -n "$KEPT_PACKAGES" ]; then
    echo "开始升级被保留的包:$KEPT_PACKAGES"
    sudo apt-get install $KEPT_PACKAGES -y
else
    echo "没有被保留的包,系统已经是最新状态啦!"
fi

然后给脚本加执行权限:

chmod +x upgrade-kept.sh

以后每次升级,直接运行./upgrade-kept.sh就搞定了,完全不用手动复制粘贴!

备注:内容来源于stack exchange,提问作者jophuh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 13:14:35