Linux 中的“无法找到包”错误

Linux 系统在正常运作时表现出色,但有时也会出现错误。用户在使用 Linux 的过程中需要不断学习和解决问题。

Linux 提供了许多强大的软件包管理器。大多数用户通常会从 APT 开始,特别是当他们选择使用 Ubuntu 这种流行的操作系统时。

在使用 APT 时,你可能会遇到“无法定位软件包”的错误,尤其是在 Ubuntu 中。

本指南将详细介绍如何解决这个错误。我们将以 Ubuntu 为例进行说明。如果你使用的是其他采用 APT 包管理器的 Linux 发行版,本指南的方法同样适用。

让我们开始吧。

什么是“E: 无法找到软件包”错误?

这个错误的含义显而易见。当你尝试安装一个软件包或应用程序时,系统会提示“E: 无法找到 package_name”的错误信息。

这表示 Linux 系统无法找到你想要安装的软件包。

不必惊慌,这在 Ubuntu 或 APT 用户中是很常见的问题。

好消息是,这个问题有多种解决方案。无论你是 Linux 新手还是经验丰富的用户,都可以按照本指南解决问题。

另请阅读:Linux 软件包管理器的工作原理:完整指南

出现“E: 无法找到软件包”错误的原因

了解错误的主要原因有助于我们更好地理解它。

在 Ubuntu 中安装软件包时,通常会使用默认的 APT 软件包管理器。可以使用 apt-getapt 命令来安装。以下是执行安装的命令:

$ sudo apt-get install package-name

如果一切正常,软件包将会顺利安装。但是,有时会出现“E: 无法找到软件包 package_name”的错误,如下所示:

#output

Reading package lists... Done 

Building dependency tree       

Reading state information... Done 

E: Unable to locate package package_name

当出现这个错误时,表示 Linux 系统无法找到该软件包。因此,我们需要采取措施解决这个问题,并确保它不再发生。

在尝试修复错误之前,我们先来了解一些可能导致此错误的原因:

  • 软件包名称拼写错误 – 这是最常见的原因。
  • 软件源列表存在问题。
  • Ubuntu 存储库缓存未包含最新的软件包信息。
  • 你使用的 Ubuntu 版本已过支持期。
  • 你尝试安装的软件包版本不兼容你的 Linux 系统。
  • 主存储库中不包含所需的软件包。

解决“无法找到软件包”错误的方法

本节将介绍多种解决此错误的方法。

#1. 软件包名称 – 你输入正确了吗?

Linux 用户常犯的一个错误是输入错误的软件包名称。如果软件包名称拼写错误,Ubuntu 将会报错。

以安装图像处理工具 Gimp 为例:

$ sudo apt-get install gump
#output

$ sudo apt-get install gump

Reading package lists... Done

Building dependency tree... Done

Reading state information... Done

E: Unable to locate package gump

正如预期的那样,系统会提示“E: 无法找到软件包 gump”的错误。因为根本不存在 “gump” 这个软件包。

拼写错误发生的频率比你想象的要高。Linux 对大小写敏感,即使你正确输入了包名,但大小写不正确也可能导致安装失败。例如,即使你将 gimp 误写成 Gimp,仍然会报错。

$ sudo apt-get install Gimp
Reading package lists... Done

Building dependency tree... Done

Reading state information... Done

E: Unable to locate package Gimp

因此,安装 gimp 的唯一方法是正确输入软件包名称。

$ sudo apt-get install gimp

但是,如果你不确定软件包的确切名称怎么办?这时,你可以使用 apt search 命令来查找。例如,如果你正在查找包含 “monkey” 的软件包,但不确定其全名,可以运行以下命令:

$ apt search monkey

p   graphmonkey                     - a GTK#-based graphing calculator          

p   libex-monkeypatched-perl        - experimental API for safe monkey-patching 

p   libmonkey-patch-action-perl     - module to monkey-patching subs from other 

p   libmonkey-patch-perl            - scoped monkey-patching Perl module        

p   libtwelvemonkeys-java           - collection of plugins and extensions for J

p   libtwelvemonkeys-java-doc       - Documentation for libtwelvemonkeys-java   

p   monkeysphere                    - leverage the OpenPGP web of trust for SSH 

v   monkeysphere-validation-agent   -                                           

v   node-fs-monkey                  -                                           

p   searchmonkey                    - search files using regular expressions aim

#2. 更新软件包列表/存储库缓存

Ubuntu 与存储库的交互方式比较特殊。它不是下载整个存储库,而是建立一个本地缓存,其中包含可用软件包的列表。

当您运行 sudo apt update 命令时,Ubuntu 会创建本地缓存。

$ sudo apt update

执行 apt-get install 命令后,APT 软件包管理器会在缓存中查找该软件包。它会先从缓存中获取软件包的版本等信息,然后再通过网络从在线存储库下载软件包。

如果软件包未在缓存中列出,Ubuntu 会提示错误。 当你第一次安装 Ubuntu 或基于 Debian 的 Linux 发行版(如 Linux Mint)时,很可能出现这种情况。由于缓存没有使用最新信息构建,即使安装标准软件包也可能导致错误。因此,如果你是全新安装的 Ubuntu 系统,请至少运行一次 sudo apt update 命令来建立本地缓存。

在某些情况下,可能需要手动更新缓存。 这时,你需要使用 apt update 命令更新它。

在更新之前,最好清理一下缓存。为此,请运行以下命令:

$ sudo apt clean && sudo apt update

#3. 检查软件包是否可用

即使你输入了正确的软件包名称,并更新了存储库缓存,你仍然可能在 Ubuntu 中遇到“无法找到软件包”的错误。 这可能是因为你尝试安装的软件包不可用。无论你尝试多少次,都无法安装该软件包。

那么,你该怎么办?

首先,你需要了解 Universe 存储库。一般来说,Linux 系统默认不会启用它,这可能是导致错误的原因之一。另外,你使用的 Ubuntu 版本可能无法访问你要下载和安装的软件包。

要检查你的 Ubuntu 版本是否过时,你需要先查看其版本信息。可以使用以下命令:

nitt@logan99:~$ lsb_release -a
#output
No LSB modules are available.

Distributor ID: Ubuntu

Description: Ubuntu 22.04.3 LTS

Release: 22.04

Codename: jammy

我正在使用最新的 22.04 LTS 版本,代号为 Jammy。 记下这些信息,然后前往Ubuntu 软件包网站。

在此页面上,你可以手动搜索软件包。 网站提供了一个搜索框,可以在其中输入关键字进行搜索。关键字可以是软件包名称,也可以是任何有助于你找到软件包的内容。

输入软件包名称并点击“搜索”按钮。

由于 gimp 是一个已知的软件包,因此可以准确找到它。

如果你仔细观察,你会发现它在 Universe 存储库中。要下载并安装这个软件包,你需要访问你的 Ubuntu 版本(这里是 Jammy 22.04 LTS)的 Universe 存储库。

确认软件包适用于你的 Ubuntu 版本后,需要启用相应的存储库。运行以下命令来启用:

$ sudo apt-add-repository universe multiverse

以上命令会启用 Universe 和 Multiverse 存储库。

完成后,请务必再次重建缓存:

$ sudo apt update

你也可以安装其他存储库,例如 Main 和 Restricted 存储库。使用以下命令执行此操作:

$ sudo apt-get-repository main

$ sudo apt-get-repository restricted

如果你的 Ubuntu 版本不支持你想要安装的软件包,则需要使用第三方存储库,例如 PPA。你可以在这里了解更多信息:什么是 Ubuntu PPA 以及如何安装它?

#4. 确保你运行的是受支持的 Ubuntu 版本

Ubuntu 提供 LTS 版本,提供 3 或 5 年的长期支持。 很多用户可能会因为没有更新到受支持的版本,而无法接收任何新的更新。当你的 Ubuntu 版本不再受支持时,你将无法安装新的软件包,并且会收到“无法找到软件包”的错误。

要检查你的 Ubuntu 版本是否仍受支持,请运行以下命令:

$ hwe-support-status --verbose 
#output

nitt@logan99:~$ hwe-support-status --verbose

You are not running a system with a Hardware Enablement Stack. Your system is supported until April 2027.

nitt@logan99:~$

如你所见,我的 Ubuntu 版本支持到 2027 年 4 月。可以忽略硬件启用堆栈,它与本主题无关。

如果你的 Ubuntu 版本不受支持,只需升级到最新的 LTS 版本即可。

#5. 修复存储库

如果上述方法都无法解决“无法找到软件包”错误,则需要手动检查 Ubuntu 的源列表文件。

该文件包含了所有与存储库相关的数据。你需要访问 /etc/apt/sources.list 文件。

一般来说,你需要检查存储库的链接是否有效,并与官方列表匹配。 你可以访问官方发行版网站查找相关信息。

结论 – 如果什么都不起作用怎么办?

即使经过一番故障排除,你仍然遇到 “E: 无法找到软件包”的错误。

这会令人非常沮丧,你可能会放弃该软件包,寻找替代品,甚至考虑重新安装 Ubuntu。

在这样做之前,最好尝试所有可能的方法。例如,你可以尝试查找与你的 Ubuntu 版本兼容的旧版本软件包。可以通过第三方个人存储库 (PPA) 找到它们。

如果找不到包含该软件包的 PPA,可以查看软件的官方网站,它们通常会提供直接下载软件包文件的方法。

如果所有方法都失败了,那么最好考虑寻找替代应用程序。

本指南到此结束。我们探讨了解决“无法找到软件包”错误的各种方法。你应该已经清楚地了解了 Ubuntu 如何通过缓存与存储库交互来检索、下载和安装软件包。

接下来,可以看看 Linux 中 find 命令的最佳示例