学习笔记:复盘Sub-process /usr/bin/dpkg returned an error code (1)问题以及解决方案
·
sudo apt install -y build-essential curl
在Linux环境中输入这个命令行,有报错如下
Sub-process /usr/bin/dpkg returned an error code (1)

网上有很多资料,大多都是给出一种或多种解决方案,解释清楚原因的甚少,今天我来复盘一下这个问题以及解决方案。
具体步骤
(1)备份/var/lib/dpkg/info这个目录,我们使用mv命令重命名这个目录代替cp起到备份的作用
sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_bak
⚪为什么需要备份并替换 /var/lib/dpkg/info 目录?
-
/var/lib/dpkg/info的作用:
该目录存储了系统中所有已安装软件包的元数据(如配置文件、依赖关系、状态记录等)。如果这些文件损坏(例如因中断安装、磁盘错误或手动误操作),dpkg将无法正确识别软件包状态,导致后续操作报错。 - 备份与替换的逻辑:
通过mv重命名原目录(而非直接删除),保留原始损坏状态的备份。新建空的info目录后,dpkg会在此生成新的元数据文件,覆盖原有损坏内容,从而重置状态。
(2)重新创建/var/lib/dpkg/info这个目录
sudo mkdir /var/lib/dpkg/info
(3)然后执行apt --fix-broken install,执行完之后再次安装你的软件apt install softname,期间有告警不必理会。
sudo apt --fix-broken install
sudo apt install softname
⚪apt --fix-broken install 的作用
- 依赖关系修复:
该命令会尝试自动修复因依赖缺失或冲突导致的软件包问题。例如,若某个软件包因依赖未满足而无法安装,--fix-broken会自动安装缺失的依赖项或移除冲突包。 - 重新生成状态文件:
在干净的info目录下执行此命令,dpkg能重新生成正确的软件包状态记录,解决因元数据错误导致的E: Sub-process /usr/bin/dpkg returned an error code (1)。
(4)把新创建info目录下生成的文件复制到原先的info中即我们第一步备份改名的那个目录info.bak,然后删除你创建的info文件,或者不删除改个其他名字起个备份效果也行,之后再把第一步备份的文件info.bak改回info
cp /var/lib/dpkg/info/* /var/lib/dpkg/info_bak
rm -rf /var/lib/dpkg/info 或者mv /var/lib/dpkg/info /var/lib/dpkg/info_bak
mv /var/lib/dpkg/info.bak /var/lib/dpkg/info
⚪复制新旧 info 目录内容的意义
- 合并历史配置:
新生成的info目录包含修复后的状态文件,而备份的info.bak保留原有软件包的配置信息(如已安装包的列表)。将两者合并后,既能保留用户自定义配置,又能修复损坏部分。 - 还原目录结构:
最终将备份的info.bak重命名为info,确保系统恢复到标准状态,避免后续操作因目录名称异常报错。
⚪为何能解决 E: Sub-process /usr/bin/dpkg returned an error code (1)?
- 核心问题:该错误通常由
dpkg数据库损坏或状态不一致引发。例如:- 软件包安装中断导致元数据不完整。
- 手动修改
status文件引发冲突。 - 依赖关系循环或版本冲突。
- 修复逻辑:
通过重置info目录强制dpkg重新初始化状态,结合apt --fix-broken install自动修复依赖链,最终恢复软件包管理系统的完整性。
!!!注意事项
- 风险:直接操作
/var/lib/dpkg/info可能导致系统软件包记录丢失,需谨慎操作。 - 替代方案:若问题较轻,可先尝试
sudo dpkg --configure -a或sudo apt clean清理缓存。 - 适用场景:此方法适用于
dpkg元数据严重损坏且常规修复无效的情况。
总体操作步骤:
sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bak //记住先备份
sudo mkdir /var/lib/dpkg/info //创建新的info目录
sudo apt --fix-broken install
sudo apt install softname //安装你要装的软件
sudo cp /var/lib/dpkg/info/* /var/lib/dpkg/info.bak //把新创建info目录下生成的文件复制到原先的info中,然后在把原先的info改回来
sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_bak
sudo mv /var/lib/dpkg/info.bak /var/lib/dpkg/info
该方法通过重置 dpkg 的元数据和依赖修复机制,解决了因状态文件损坏或依赖冲突导致的安装错误。其核心在于利用系统工具自动重建正确状态,而非手动修复具体错误点,因此具有普适性。
更多推荐

所有评论(0)