尝试更新时,如何修复“MergeList 存在问题”或“无法解析状态文件”错误?

尝试更新时,如何修复“MergeList 存在问题”或“无法解析状态文件”错误?

计算机在窗口中向我提供了以下输出:

E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.

我怎样才能解决这个问题?

答案1

这些终端命令应该可以解决您的问题:

首先打开终端(按Ctrl+ Alt+T启动)删除合并列表并运行此命令*:

sudo rm -vf /var/lib/apt/lists/*

接下来,通过运行一个简单的更新来生成一个新的:

sudo apt-get update

这里是错误报告(和其他) 来解决此问题,现在该问题已得到修复,因此它不应该创建新的格式错误的文件,但是如果您已经有格式错误的文件,则需要按照本文中的说明将其删除。


*rm 使用的选项非常-v详细

-v, --verbose 解释正在做什么

-f力量

-f, --force 忽略不存在的文件和参数,从不提示

如果您对命令行或所使用的选项不确定,请始终参考手册页查找命令。可以通过在互联网上搜索 man 和命令来访问这些内容,例如男人房 或者你也可以通过在终端中输入完全相同的命令来访问相同的信息,例如,man rm退出页面的说明将出现在终端的底部,如下所示

手册页选项的图片

答案2

打开终端并逐个运行以下命令:

sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update

也可以看看:

答案3

您在编辑时搞砸了/var/lib/dpkg/status。从编辑前所做的备份中恢复它。当然,您做了备份,对吧?

由于你没有备份,请重新编辑,小心.尽量不要造成更多损害。

您可以将其用作参考点。这是上次运行之前/var/lib/dpkg/status.old的文件备份。运行statusdpkg

diff /var/lib/dpkg/status.old /var/lib/dpkg/status

查看差异。撤消手动所做的更改,并保留上次dpkg运行所做的更改。

如果你实在无法修复该文件,请复制/var/lib/dpkg/status.old过去/var/lib/dpkg/status。你将得到一个格式正确但已过时的软件包数据库。

在正常操作中,您永远不需要编辑/var/lib/dpkg/status。即使出现严重错误,/var/lib/dpkg/status也不需要管理员干预。无论您遇到什么问题crossplatformui,可能都有更好的方法来解决它们。我唯一需要编辑的时候/var/lib/dpkg/status是上游Packages文件损坏的时候。

答案4

按照步骤 2-5程序包管理器故障排除程序通常可以解决这个问题。

为了第2步,禁用全部您的 PPA。您可以在软件源中取消选中所有 PPA,就像取消选中一个 PPA 一样;请参阅如何禁用特定的 PPA?。您可以稍后重新启用它们。

为了步骤 3,关闭所有打开的程序。保持 Web 浏览器打开可能是安全的,这样您就可以随时查看说明。但特别重要的是确保所有包管理器都没有运行。其中包括软件中心、软件更新程序(旧版 Ubuntu 中的更新管理器)、Synaptic 和 Gdebi。它还包括命令行包管理实用程序,如apt-getdpkgaptitude

请注意,如果其他用户同时登录的用户如果可能,应立即注销。

为了步骤4,打开终端窗口。无论使用哪种桌面环境,都可以按 ++ 来执行CtrlAlt操作T

为了步骤 5,在终端窗口中运行以下命令:

ubuntu-support-status
sudo grep -R proxy /etc/apt/*
grep proxy  /etc/environment
echo $http_proxy
echo $ftp_proxy
grep proxy /etc/bash.bashrc
grep proxy ~/.bashrc
cat /etc/apt/apt.conf
sudo fuser -vvv /var/lib/dpkg/lock
sudo fuser -vvv /var/cache/apt/archives/lock
cat /etc/lsb-release
uname -a
sudo rm /var/lib/apt/lists/lock 
sudo rm  /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
sudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup
sudo mv /var/lib/dpkg/status /var/lib/dpkg/status-bad
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status  ||  sudo cp /var/backups/apt.extended_states.0 /var/lib/dpkg/status
sudo mv /var/lib/dpkg/available /var/lib/dpkg/available-bad
sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available
sudo rm -rf /var/lib/dpkg/updates/*
sudo rm -rf /var/lib/apt/lists
sudo rm /var/cache/apt/*.bin
sudo mkdir /var/lib/apt/lists
sudo mkdir /var/lib/apt/lists/partial
LANG=C;sudo apt-get clean
LANG=C;sudo apt-get autoclean
LANG=C;sudo apt-get --purge autoremove
LANG=C;sudo apt-get --fix-missing update -o APT::Cache-Limit=100000000
sudo dpkg --configure -a
sudo dpkg --clear-avail
LANG=C;sudo apt-get -f install
LANG=C;sudo apt-get --fix-missing install
LANG=C;sudo apt-get update -o APT::Cache-Limit=100000000 && sudo apt-get dist-upgrade
find /etc/apt -name '*.list' -exec bash -c 'echo -e "\n$1\n"; cat -n "$1"' _ '{}' \;

我逐字逐句地抄袭了包裹管理故障排除程序2014 年 3 月 2 日。这些命令在过去已经发展,并且该文章中推荐的命令将来可能会再次更改或扩展。因此,您可能希望从第 5 步(那篇文章,创建/编辑由“Ubuntu 文档 wiki 的贡献者”——尤其是马克·赖肯伯格- 是许可 CC-BY-SA 3.0,允许在此处通过适当的归因进行包含。)

其中一些命令会尝试修复问题(也可能显示诊断信息);其他命令会显示有关问题的有价值的信息,您可以将这些信息包含在您的问题中,或以其他方式提供给帮助您的人。(或者,根据您的技能,可能会启用进行诊断并解决问题。

通常这可以解决问题,但是当它不能解决问题时,它通常会提供足够的信息来解决问题。

您不必手动输入这些命令;您可以复制并粘贴它们。不过,我建议分别粘贴和运行每个命令。这样可以更清楚地了解哪个命令的输出。

相关内容