孙胜 發表於 2023-9-19 00:00:00

修复Ubuntu中的 “Unable to parse package file” 错误

<p>
        <img style="max-width:100%!important;height:auto!important;"title="修复Ubuntu中的 “Unable to parse package file” 错误" alt="修复Ubuntu中的 “Unable to parse package file” 错误" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/bda6b50f76171942e186612f68c63191.jpg" width="auto"></p>
<p>
        过去,我已经讨论了许多 Ubuntu 更新错误。如果你使用命令行更新 Ubuntu,那可能会遇到一些“错误”。</p>
<p>
        其中一些“错误”基本上是内置功能,可防止对系统进行不必要的更改。在本教程中,我不会涉及那些细节。</p>
<p>
        在本文中,我将向你展示如何解决在更新系统或安装新软件时可能遇到的以下错误:</p>
<ol class="linenums">
<li class="L0">
                <code><span class="typ">Reading</span><span class="pln"> </span><span class="kwd">package</span><span class="pln"> lists</span><span class="pun">…</span><span class="pln"> </span><span class="typ">Error</span><span class="pun">!</span></code>
</li>
        <li class="L1">
                <code><span class="pln">E</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Unable</span><span class="pln"> to parse </span><span class="kwd">package</span><span class="pln"> </span><span class="kwd">file</span><span class="pln"> </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">apt</span><span class="pun">/</span><span class="pln">lists</span><span class="pun">/</span><span class="pln">archive</span><span class="pun">.</span><span class="pln">ubuntu</span><span class="pun">.</span><span class="pln">com_ubuntu_dists_bionic_InRelease</span></code>
</li>
        <li class="L2">
                <code><span class="pln">E</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> </span><span class="kwd">package</span><span class="pln"> lists </span><span class="kwd">or</span><span class="pln"> status </span><span class="kwd">file</span><span class="pln"> could </span><span class="kwd">not</span><span class="pln"> be parsed </span><span class="kwd">or</span><span class="pln"> opened</span><span class="pun">.</span></code>
</li>
</ol>
<p>
        在 Debian 中可能会遇到类似的错误:</p>
<ol class="linenums">
<li class="L0">
                <code><span class="pln">E</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Unable</span><span class="pln"> to parse </span><span class="kwd">package</span><span class="pln"> </span><span class="kwd">file</span><span class="pln"> </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">apt</span><span class="pun">/</span><span class="pln">extended_states </span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span></code>
</li>
</ol>
<p>
        即使遇到 <code>The package cache file is corrupted</code> 也完全不必惊慌。这真的很容易“修复”。</p>
<h3 id="toc_1">
        在基于 Ubuntu 和 Debian 的 Linux 发行版中处理 “Unable to parse package file” 错误</h3>
<p>
         </p>
<p>
        以下是你需要做的。仔细查看 Ubuntu 报错文件的名称和路径。</p>
<ol class="linenums">
<li class="L0">
                <code><span class="typ">Reading</span><span class="pln"> </span><span class="kwd">package</span><span class="pln"> lists</span><span class="pun">…</span><span class="pln"> </span><span class="typ">Error</span><span class="pun">!</span></code>
</li>
        <li class="L1">
                <code><span class="pln">E</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Unable</span><span class="pln"> to parse </span><span class="kwd">package</span><span class="pln"> </span><span class="kwd">file</span><span class="pln"> </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">apt</span><span class="pun">/</span><span class="pln">lists</span><span class="pun">/</span><span class="pln">archive</span><span class="pun">.</span><span class="pln">ubuntu</span><span class="pun">.</span><span class="pln">com_ubuntu_dists_bionic_InRelease</span></code>
</li>
        <li class="L2">
                <code><span class="pln">E</span><span class="pun">:</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> </span><span class="kwd">package</span><span class="pln"> lists </span><span class="kwd">or</span><span class="pln"> status </span><span class="kwd">file</span><span class="pln"> could </span><span class="kwd">not</span><span class="pln"> be parsed </span><span class="kwd">or</span><span class="pln"> opened</span><span class="pun">.</span></code>
</li>
</ol>
<p>
        例如,上面的错误是在报 <code>/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_InRelease</code> 文件错误。</p>
<p>
        这让你想到这个文件不正确。现在,你需要做的就是删除该文件并重新生成缓存。</p>
<ol class="linenums">
<li class="L0">
                <code><span class="kwd">sudo</span><span class="pln"> </span><span class="kwd">rm</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln">file_that_is_not_parsed</span><span class="pun">&gt;</span></code>
</li>
</ol>
<p>
        因此,这里我可以使用以下命令:<code>sudo rm /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_bionic_InRelease</code>,然后使用 <code>sudo apt update</code> 命令重建缓存。</p>
<p id="toc_2">
        <strong>给初学者的分步指导</strong></p>
<p>
        如果你熟悉 Linux 命令,那么可能知道如何使用绝对路径删除文件。对于新手用户,让我指导你安全删除文件。</p>
<p>
        首先,你应该进入文件目录:</p>
<ol class="linenums">
<li class="L0">
                <code><span class="kwd">cd</span><span class="pln"> </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">apt</span><span class="pun">/</span><span class="pln">lists</span><span class="pun">/</span></code>
</li>
</ol>
<p>
        现在删除无法解析的文件:</p>
<ol class="linenums">
<li class="L0">
                <code><span class="kwd">sudo</span><span class="pln"> </span><span class="kwd">rm</span><span class="pln"> archive</span><span class="pun">.</span><span class="pln">ubuntu</span><span class="pun">.</span><span class="pln">com_ubuntu_dists_bionic_InRelease</span></code>
</li>
</ol>
<p>
        现在,如果你再次运行更新,将重新生成 apt 缓存。</p>
<ol class="linenums">
<li class="L0">
                <code><span class="kwd">sudo</span><span class="pln"> apt update</span></code>
</li>
</ol>
<p id="toc_3">
        <strong>有很多文件无法解析?</strong></p>
<p>
        如果你在更新系统时有一个或两个文件无法解析,那么问题不大。但是,如果系统报错有十个或二十个此类文件,那么一一删除它们就太累了。</p>
<p>
        在这种情况下,你可以执行以下操作来删除整个缓存,然后再次生成它:</p>
<ol class="linenums">
<li class="L0">
                <code><span class="kwd">sudo</span><span class="pln"> </span><span class="kwd">rm</span><span class="pln"> </span><span class="pun">-</span><span class="pln">r </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">apt</span><span class="pun">/</span><span class="pln">lists</span><span class="com">/*</span></code>
</li>
        <li class="L1">
                <code><span class="com">sudo apt update</span></code>
</li>
</ol>
<p id="toc_4">
        <strong>解释这为何能解决问题</strong></p>
<p>
        <code>/var/lib/apt</code> 是与 apt 软件包管理器相关的文件和数据的存储目录。<code>/var/lib/apt/lists</code> 是用于保存系统 <code>source.list</code> 中指定的每个软件包资源信息的目录。</p>
<p>
        简单点来说,<code>/var/lib/apt/lists</code> 保存软件包信息缓存。当你要安装或更新程序时,系统会在此目录中检查该软件包中的信息。如果找到了该包的详细信息,那么它将进入远程仓库并实际下载程序或其更新。</p>
<p>
        当你运行 <code>sudo apt update</code> 时,它将构建缓存。这就是为什么即使删除 <code>/var/lib/apt/lists</code> 目录中的所有内容,运行更新也会建立新的缓存的原因。</p>
<p>
        这就是处理文件无法解析问题的方式。你的系统报某个软件包或仓库信息以某种方式损坏(下载失败或手动更改 <code>sources.list</code>)。删除该文件(或所有文件)并重建缓存即可解决此问题。</p>
頁: [1]
查看完整版本: 修复Ubuntu中的 “Unable to parse package file” 错误