在尝试进行更新时,如何修复“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. 

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

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

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

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

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

 sudo apt-get update 

以下是此问题的错误报告 (和另一个 ),现在已修复,因此不应创建新的格式错误的文件,但如果您已经有格式错误的文件,则需要按照本文中的说明删除它们。


*用于rm的选项是-v verbose

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

-f force

-f, – force忽略不存在的文件和参数,永远不会提示

如果您不确定命令行或使用的选项,请始终参考命令的手册页 。 这些可以在互联网上通过搜索man和命令来访问,例如man rm,或者你可以通过在终端中输入完全相同的命令来访问相同的信息,例如man rm用于退出页面的指令将在底部像这样的终端

手册页选项的图片

打开终端并一次运行以下命令:

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

也可以看看:

编辑/var/lib/dpkg/status时搞砸了。 从编辑之前的备份中恢复它。 当然,你做了备份,对吗?

由于您没有进行备份,请仔细再次编辑。 尽量不要造成更多伤害。

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

 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文件被破坏了。

我做到了

 sudo apt-get clean sudo apt-get update 

它工作。

按照程序包管理器故障排除过程中的步骤2-5,通常可以解决此问题。

对于第2步 ,请禁用所有 PPA。 你可以在软件源中取消选中所有这些,就像你只取消一个; 请参阅如何禁用特定PPA? 。 您可以稍后重新启用它们。

对于第3步 ,请关闭所有打开的程序。 保持Web浏览器打开可能是安全的,因此您可以在您面前获得指示。 但确保任何包管理器都没有运行尤为重要。 这包括软件中心,软件更新程序(旧版Ubuntu中的Update Manager),Synaptic和Gdebi。 它还包括命令行包管理实用程序,如apt-getdpkgaptitude

请注意,如果其他用户同时登录,则应尽可能注销。

对于步骤4 ,打开终端窗口。 无论您使用何种桌面环境,执行此操作的一种方法是按Ctrl + Alt + 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日从PackageManagementTroubleshoootingProcedure逐字复制了这些命令。这些命令在过去已经发展,并且该文章中推荐的命令将来可能会再次更改或扩展 。 所以你可能想在那里的第5步工作。 (该文章由“Ubuntu文档维基的贡献者” 创建/编辑 – 特别是Mark Rijckenberg – 获得CC-BY-SA 3.0许可 ,允许在此处包含正确的归属。)

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

通常这会修复它,但是当它没有时,它通常会提供足够的信息来修复它。

您不必手动键入这些命令; 你可以复制并粘贴它们。 不过,我建议分别粘贴和运行每一个。 这使得输出来自哪些命令更清楚。

我还看到当您的回购中有太多来源时会出现此问题。

尝试上面发布的解决方案和/或也许这有时推荐在启动板上:

 sudo mv /var/lib/apt/lists /var/lib/apt/lists-old sudo mkdir -p /var/lib/apt/lists/partial sudo apt-get update 

让我们知道您的身体情况如何。

我遇到了类似的错误:

 Reading package lists... Error! E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/dpkg/status E: The package lists or status file could not be parsed or opened. 

我遵循类似的建议来复制status-old

 $ head /var/lib/dpkg/status $ head /var/lib/dpkg/status-old 

由于某种原因,我的所有状态文件都是空白的。 幸运的是,我发现这些文件有备份:

 $ ls -l /var/backups/dpkg.status.* -rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.0 -rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.1.gz -rw-r--r-- 1 root root 128168 Sep 20 2013 /var/backups/dpkg.status.2.gz -rw-r--r-- 1 root root 112545 Sep 16 2013 /var/backups/dpkg.status.3.gz -rw-r--r-- 1 root root 107767 Sep 14 2013 /var/backups/dpkg.status.4.gz -rw-r--r-- 1 root root 107766 Sep 11 2013 /var/backups/dpkg.status.5.gz -rw-r--r-- 1 root root 94583 Sep 11 2013 /var/backups/dpkg.status.6.gz 

我检查了最新的备份……

 $ head /var/backups/dpkg.status.0 

……但它仍然是空白的。 所以我解压了一个较旧的…

 $ gunzip /var/backups/dpkg.status.1.gz $ head /var/backups/dpkg.status.1 

这次有内容。 所以我复制了它……

 $ cp /var/backups/dpkg.status.1 /var/lib/dpkg/status 

然后apt-get update运行没有问题。

信用转到这篇文章。

我有同样的问题,并尝试了其他答案中提到的所有故障排除。 奇怪的是,唯一的解决办法是另一步:

  • 转到软件和更新 – > Ubuntu软件 – >从 – 下载 – >其他 – >选择最佳服务器

  • 等待测试。 在测试结束时,将选择最佳服务器,不一定是最近的服务器,也不一定是主服务器,也不是您的语言环境的服务器。

  • 现在重新加载Repo数据,它将正确完成。