计算机在一个窗口中向我提供了此输出:

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
)在Internet上进行访问,也可以通过在终端中键入完全相同的命令来访问相同的信息,例如man rm退出页面的说明将位于像这样的终端底部



评论


一个人发现他不得不多次执行这两个步骤,但最终还是有效。

– John S Gruber
2012年9月9日在5:24



这也适用于错误阅读包列表...错误! E:Description-md5行格式错误;包含无效字符'fc1f7600accbcc“ 07ef9954ba3306c14” E:在现成的Ubuntu 13.04中无法解析或打开包列表或状态文件(从未手动编辑sources.list)

–尼古拉斯·拉乌尔(Nicolas Raoul)
13年5月15日在1:10



将-vf放在rm命令的末尾很奇怪。

–基思·汤普森(Keith Thompson)
2014年6月9日下午5:50

它没有为我解决问题。更新仍然向我显示该错误。

–游艇
2014年7月4日在9:01

我必须同时做这件事并删除状态文件,如下所示:askubuntu.com/questions/410045/…

– SDsolar
17年6月29日在19:36

#2 楼

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

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


另请参见:


https:// help .ubuntu.com / community / PackageManagerTroubleshootingProcedure


评论


-vf有什么作用?

– speedox
13年2月2日在15:42

@speedox,根据人rm的说法,-v表示“详细”,-f表示“力”。换句话说,在不提示的情况下删除所有指定的文件,并告诉用户它在做什么。

– Fouric
13年4月10日在0:21

就我而言,只需执行sudo apt-get update即可解决此问题。我认为Allan提到过apt的较新版本会自动更正此问题,因此也许首先尝试更新。

–雷神召唤师
2015年9月3日在22:22

#3 楼

您在编辑/var/lib/dpkg/status时搞砸了。从编辑之前进行的备份中还原它。当然,您做了备份,对吧?

由于您没有进行备份,因此请再次仔细编辑。尽量不要造成更大的损害。

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

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文件损坏时。

评论


我还想知道您提到的删除crossplatformui的更好方法,如果可以帮助的话,我尝试了所有可能的方法来删除它,并尝试找到许多解决方案,但只有我提到的一种有效。

– Nirmik
2012年5月13日15:58

@Nirmik不知道crossplatformui。作为一个单独的问题提出。我可以告诉您,在使用dpkg(包括许多非官方资源)的十多年中,仅在存在损坏的第三方存储库的情况下,我很少需要编辑状态文件。

–吉尔斯'所以-不再是邪恶的'
2012年5月13日下午16:01

好吧...再次非常感谢....正如您建议我将其发布为新问题:)也是您似乎非常高级的用户,我想问您是否对使HOT无法正常运行有所了解-KTEYS工作?? (我的无线钥匙确实起作用了)

– Nirmik
2012年5月13日16:08

试图用旧的代替新的,没有为我解决。 :-(

–StéphaneGourichon
15年11月26日在11:22

回复:{对我来说,您在编辑/ var / lib / dpkg / status时搞砸了-不,我不是,我没有触摸过这个文件:)但是,这只是解决了我的问题的解决方案案件。谢谢。

– ruslo
16年11月8日在10:30

#4 楼

我做了

sudo apt-get clean
sudo apt-get update


并且奏效了。

评论


没有为我解决。 :-(

–StéphaneGourichon
15年11月26日在11:22

#5 楼

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

对于步骤2,禁用所有PPA。您可以取消选中“软件源”中的所有功能,就像取消选中其中一个功能一样。请参阅如何禁用特定的PPA?您可以稍后重新启用它们。

对于步骤3,请关闭所有打开的程序。保持网络浏览器处于打开状态是安全的,这样您的说明就可以摆在面前。但是,确保任何程序包管理器未运行特别重要。其中包括软件中心,软件更新程序(Ubuntu较早版本中的更新管理器),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\n"; cat -n ""' _ '{}' \;


我在2014年3月2日从PackageManagementTroubleshoootingProcedure复制了该逐字记录。这些命令在过去得到了发展,该文章中推荐的命令将来可能会更改或扩展。所以您可能要从第5步开始。 (该文章由“ Ubuntu文档维基的贡献者”(特别是Mark Rijckenberg创建/编辑)已获得CC-BY-SA 3.0的许可,可在此处以适当的署名包括在内。)这些命令中有哪些试图解决问题(并且还可能显示诊断信息);其他人则显示有关您的问题的有价值的信息,您可以将其包括在问题中,也可以提供给帮助您的人。 (或者,根据您的技能,可能使您能够诊断和解决它。)

通常可以解决此问题,但如果不能解决,通常会提供足够的信息来解决它。

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

评论


我复制了整个块并粘贴,而不是一个接一个地运行。尽管此命令中的几个命令是无用的,但有些命令失败了,但最终对我来说确实有帮助

–phuclv
18年1月15日在8:45



#6 楼

当您的存储库中的源太多时,我也看到过会发生此问题。

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

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


让我们知道如何使用。

评论


谢谢!没有makedir的DSL也无法使用。

–道格
2014年5月26日下午2:33

#7 楼

我遇到了类似的错误:

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毫无问题地运行了。

信用归功于这篇文章。

#8 楼

我遇到了同样的问题,并尝试了其他答案中提到的所有故障排除方法。奇怪的是,唯一的修复是不同的步骤:


转到软件和更新-> Ubuntu软件->从->其他->选择最佳服务器
等待测试。在测试结束时,将选择最佳服务器,而不必选择最近的服务器,主服务器或您所在区域的服务器。
现在重新加载Repo数据,它将正确完成。


#9 楼

我有同样的问题。这些命令修复了该问题:
sudo mv /var/lib/dpkg/status /var/lib/dpkg/status-new
sudo mv /var/lib/dpkg/status-old /var/lib/dpkg/status
sudo apt-get update


#10 楼

解决此问题的一种方法是在终端(Ctrl + Alt + T)中依次运行以下两个命令:
sudo rm -r /var/lib/apt/lists/*

您可以使用此命令生成一个新的命令:
sudo apt-get clean && sudo apt-get update

Voila!那应该可以解决“合并列表问题”错误。
参考:如何修复Ubuntu更新错误:MergeList问题