这是针对 Ubuntu 16.04 LTS 我收到提示:
此计算机有可用的更新软件。要立即安装吗?
当我继续更新时,出现错误:
The package system is broken -
Check if you are using third party repositories. If so disable them, since they are a common source of problems.
Furthermore run the following command in a Terminal: apt-get install -f
我如何才能知道我正在使用哪些第三方存储库?
根据下面提供的输入,我尝试了以下命令。还提到了输出 -
sudo apt-f 安装
dpkg:错误:读取软件包信息文件‘/var/lib/dpkg/status’:输入/输出错误 E:子进程 /usr/bin/dpkg 返回错误代码 (2)
sudo dpkg--configure-a
dpkg:错误:读取软件包信息文件‘/var/lib/dpkg/status’:输入/输出错误
sudo apt 更新
正在读取软件包列表...错误!E:读取错误 - 读取(5:输入/输出错误)W:您可能需要运行 apt-get update 来纠正这些问题 E:软件包缓存文件已损坏
答案1
答案2
经过多次故障排除,我终于找到了问题所在,并找到了解决方案。将所有发现写在这里,以便能够帮助其他人,而不必像我一样进行冗长的故障排除。
根本原因:
如果我没记错的话,问题出在磁盘空间上。在最近的一次升级中,我的磁盘空间满了,升级可用空间为 0%。因此/var/lib/dpkg/状态已损坏。之后它就拒绝升级、安装或删除任何应用程序,并给出上述错误。
解决该问题的步骤:
- 首先,解决造成混乱的原因。清理了一些旧的和不需要的文件以释放磁盘空间。现在我有近 5% 的可用磁盘空间,这应该足以满足正常行为并完成由于磁盘空间不足而失败的原始升级。
- 现在,修复它造成的损坏。正确的文件/var/lib/dpkg/状态。在这里,像往常一样,专家和他们在论坛上的贡献帮助我从/var/备份每次安装或更新时,状态文件都会保存到 gzip 压缩的备份中/var/备份。 参考这里了解详细信息。以下是我使用的命令 -
~$ sudo mv /var/lib/dpkg/status /var/lib/dpkg/status_bkup
~$ sudo cp /var/backups/dpkg.status.2.gz /var/lib/dpkg/
~$ sudo gunzip -d /var/lib/dpkg/dpkg.status.2.gz
~$ mv /var/lib/dpkg/dpkg.status.2 /var/lib/dpkg/status
~$ sudo apt-get 更新
瞧!它完成了更新,没有出现之前遇到的错误。
- 现在,要完成更新并确保问题得到解决;尝试更新或安装新的应用程序 -
~$ sudo apt-get -f 安装
在 15 秒内获取了 14.3 MB (935 kB/s)
从包中提取模板:100% 预配置包... dpkg:错误:解析文件‘/var/lib/dpkg/status’第 18299 行附近包 >‘libgdk-pixbuf2.0-common’:字段‘Original-Maintainer’的值期间文件结束(缺少最后的 > 换行符)E:子进程 /usr/bin/dpkg 返回错误代码 (2)
不知何故,状态文件再次被修改,并引入了新的错误。由于现在我知道了什么是状态文件以及如何排除故障,我明白这是因为状态文件中的语法错误。很容易识别出末尾的一个包缺少“>”。更正了状态文件以在末尾包含“>”。
再试一次,这次成功了!
干杯,
阿尼鲁达
答案3
在命令行(例如 Gnometerminal
或 KDE konsole
)运行以下命令:
sudo rm -r /var/lib/apt/lists/* && sudo apt update
这将删除软件包缓存,然后更新以从外部存储库获取软件包列表。&& sudo apt dist-upgrade
如果您也想在之后进行完整更新,请添加。
注意,&&
简单的意思是如果第一部分没有错误完成,那么运行下一部分。