Ubuntu 14.04下apt-get update失败却返回0错误码的问题排查
apt-get update失败却返回0退出码的常见原因 这确实是个挺迷惑的情况——按常理apt-get update执行失败时应该返回非0的退出码,但在Ubuntu 14.04里碰到这种反常现象,通常有以下几个可能性:
个别源更新失败,但整体被判定为“成功”
apt-get update会遍历你系统里配置的所有软件源,如果只是部分第三方源(比如某个已失效的PPA)更新失败,而核心的官方源都正常完成更新,apt-get的默认逻辑会认为“至少有一部分源更新成功”,因此返回0退出码。你可以执行apt-get update -qq查看详细输出,大概率能看到个别源的错误日志,但整体命令还是返回0。配置文件中设置了忽略错误的参数
检查/etc/apt/apt.conf或者/etc/apt/apt.conf.d/目录下的配置文件,如果存在APT::Ignore-Failures "true"、Acquire::Retries::0这类配置,会让apt-get强制忽略更新过程中的错误,直接返回0退出码。老版本apt的已知bug
Ubuntu 14.04搭载的apt版本比较陈旧(大概是1.0.x系列),这个版本存在一些已被修复的逻辑漏洞,比如某些网络错误、源解析错误被误判为非致命问题,导致退出码错误。你可以尝试执行apt-get install --only-upgrade apt升级到该发行版的最新补丁版,看看是否能解决这个问题。脚本/别名拦截并修改了退出码
如果你不是直接执行apt-get update,而是通过别名、自定义脚本或者第三方工具调用的,有可能这些包装器修改了原始的退出码。比如脚本里写了apt-get update; exit 0这种强制返回0的逻辑。你可以先执行alias apt-get检查是否有别名,或者用command apt-get update绕过别名直接执行,观察退出码是否正常。权限异常但未触发致命错误
这种情况比较少见,但如果缓存目录(/var/cache/apt/)的权限出现异常,或者sudo的环境变量配置有问题,可能导致部分更新操作失败,但apt-get仍认为整体流程“可接受”,从而返回0。你可以检查缓存目录的权限,或者用sudo -i切换到root环境后再执行apt-get update测试。
内容的提问来源于stack exchange,提问作者Vijay47




