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

371 apt

计算机在一个窗口中给了我这个输出:

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.
Run Code Online (Sandbox Code Playgroud)

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

All*_*lan 500

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

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

sudo rm -vf /var/lib/apt/lists/*
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

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


*用于 rm 的选项是-v冗长的

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

-f强制

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

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

手册页选项的图片

  • 它没有为我解决问题。更新仍然向我显示那个错误。 (9认同)
  • 一个人发现他必须多次执行这两个步骤,但最终奏效了。 (8认同)
  • 将 `-vf` 放在 `rm` 命令的末尾很奇怪。 (5认同)
  • 我必须这样做并删除状态文件,如下所示:https://askubuntu.com/questions/410045/the-package-lists-or-status-file-could-not-be-parsed-or-opened (2认同)

tom*_*myk 85

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

sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • @speedox,根据`man rm`,`-v` 表示“详细”,而“-f” 表示“强制”。换句话说,在没有提示的情况下删除所有指定的文件并告诉用户它在做什么。 (5认同)

Gil*_*il' 23

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

由于您没有进行备份,请仔细重新编辑。尽量不要造成更大的伤害。

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

diff /var/lib/dpkg/status.old /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)

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

如果你真的不能设法修复文件,复制/var/lib/dpkg/status.old/var/lib/dpkg/status。您将获得一个格式良好但已过时的软件包数据库。

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


psy*_*ok7 20

我做了

sudo apt-get clean
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

它奏效了。

  • 没有为我修好。:-( (2认同)

Eli*_*gan 16

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

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

对于第 3 步,请关闭所有打开的程序。保持您的网络浏览器打开可能是安全的,这样您就可以看到您的说明。但确保任何包管理器都没有运行尤为重要。这包括软件中心、软件更新程序(旧版本 Ubuntu 中的更新管理器)、Synaptic 和 Gdebi。它还包括命令行包管理实用程序喜欢apt-getdpkg,和aptitude

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

对于第 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"' _ '{}' \;
Run Code Online (Sandbox Code Playgroud)

我在 2014 年 3 月 2 日从PackageManagementTroubleshootingProcedure逐字复制了该命令。这些命令在过去已经演变,该文章中推荐的命令将来可能会再次更改或扩展。因此,您可能希望从第 5 步开始工作。(这篇文章中,创建/编辑的“贡献者Ubuntu文档维基” -尤其是马克Rijckenberg --is许可CC-BY-SA 3.0。,在这里允许包含与适当的归属)

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

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

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


and*_*den 11

我也看到当您的存储库中有太多来源时会出现此问题。

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

sudo mv /var/lib/apt/lists /var/lib/apt/lists-old
sudo mkdir -p /var/lib/apt/lists/partial
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

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


Muh*_*eeb 5

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

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

  • 等待测试。测试结束时,将选择最好的服务器,不一定是最近的服务器,也不一定是主服务器,也不一定是适合您所在区域的服务器。

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