与 Windows、macOS 和 Android 不同,Ubuntu 和一般 Linux 上的软件不是作为单个包分发的。 相反,当您安装应用程序时,系统的包管理器会下载多个包,包括主应用包及其依赖项。 然而,这只适用于 Linux 上的传统包安装,即使用包管理器。
了解在安装过程中下载了哪些附加依赖项对于初学者和高级用户都是有益的。 这样,一个人就可以完全控制安装在他们系统上的软件包。
让我们看看如何在 Ubuntu 上检查软件包的依赖关系。
什么是包依赖项?
依赖项是在 Linux 中正确运行应用程序所需的支持包。 为了 example如果你想在 Ubuntu 上下载 VLC 媒体播放器,APT 会安装一些额外的包,比如 libc6 和 海合会,除了主要的“vlc” 包。一个依赖也可以有其他包作为它的依赖,因此,形成了一个层次结构。
由于 Linux 软件包是相互依赖的,因此几乎每个软件都需要您必须在系统上安装的附加软件包。
尽管像 APT 这样的包管理器会自动管理和安装上述依赖项,但当您尝试从源代码手动构建包时,确实会发生错误。 但是,您可以通过在系统上安装所需的依赖项来解决此类错误,使用 安装 命令。
如何在 Linux 中检查包依赖关系
幸运的是,在 Ubuntu 上,有几种方法可以获取包的依赖项列表。 APT 是 Ubuntu 和基于 Debian 的发行版中的默认包管理器,它提供了多个命令来获取包的依赖相关信息。
使用 APT 包管理器
您可以在 Ubuntu 中使用 APT 来获取与包关联的依赖项列表。 该命令的基本语法是:
sudo apt depends packagename
为了 example检查依赖项 节奏盒 包裹:
sudo apt depends rhythmbox
除了依赖项列表之外,输出还将包括推荐和建议的软件包,您可以安装它们 节奏盒.
或者,您也可以使用 apt-cache 命令以获得相同的输出。
sudo apt-cache depends rhythmbox
要获取与特定包相关的其他信息,请使用 显示 方法而不是 依靠.
sudo apt show rhythmbox
sudo apt-cache show rhythmbox
输出:
使用 dpkg 列出依赖项
如果你已经在你的系统上下载了一个 DEB 包,并且想知道哪些依赖项将与包一起安装,你可以使用 -一世 (大写的 i,而不是小写的 L)或 – 信息 用命令标记。
sudo dpkg -I /path/to/package.deb
sudo dpkg --info /path/to/package.deb
…在哪里 /path/to/package.deb 是 DEB 文件的绝对或相对路径。
输出将显示包的大小、源和其他有用信息以及依赖项列表。
要获取已安装包的依赖项列表,请使用 -s 带有 dpkg 的标志。 为了 example:
sudo dpkg -s firefox
输出:
使用 apt-rdepends
要获得更详细的输出,您可以使用 apt-rdepends 实用程序。 由于大多数 Linux 发行版都没有预装它,因此您必须使用 APT 在 Ubuntu 上手动安装它。
sudo apt install apt-rdepends
使用以下命令格式获取包的依赖关系树:
apt-rdepends packagename
为了 example:
apt-rdepends vlc
输出:
生成的输出一般只要 apt-rdepends 显示一个完整的依赖分层树,这意味着你还可以得到一个依赖的依赖列表。
您还可以获得依赖于特定包的包列表。 为了 example检查哪些包需要 库 作为依赖:
apt-rdepends -r libc
输出:
反向依赖效用
虽然反向依赖特征( -r flag) 的 apt-rdepends 工作得比预期的要好,还有另一个实用程序可以用来提取包的反向依赖关系。 reverse-depends 命令是 ubuntu 开发工具 包,并且可以使用以下方式下载:
sudo apt install ubuntu-dev-tools
该命令的默认语法是:
reverse-depends options packagename
…在哪里 选项 是您可以与命令一起使用的标志,并且 包裹名字 是您要反向检查依赖项的包的名称。
您还可以在上述命令中添加各种标志来修改输出。 以下是最有用的选项列表:
- -R:仅列出直接依赖项(没有建议或推荐的包)
- -s: 包括建议的包
- -l:以更简洁的格式呈现输出,适合在脚本中使用
如果您不知道如何使用该工具并需要命令行帮助,请使用 – 帮助 或者 -H 旗帜。
reverse-depends -h
reverse-depends --help
使用模拟安装/删除获取依赖关系列表
对于那些想要系统上当前未安装的所有依赖项的简要列表的人,您可以运行特定包的模拟安装(或卸载)。
要检查 PHP 包所需的依赖项,对于 example,运行以下命令:
sudo apt install -s php
输出将包含“将安装以下附加软件包”部分。 进一步列出的所有包名称都是在您的系统上找不到的依赖项。
如果您想获取已安装在 Ubuntu 上的软件包的依赖项列表,您可以执行模拟卸载以检查哪些附加软件包将被删除。
sudo apt remove -s packagename
例子:
sudo apt remove -s rhythmbox
输出:
Linux 软件包是相互依赖的
正如您可以从本指南中得出的结论,几乎每个 Linux 软件包都依赖于另一个软件包。 这个概念背后的主要原则是,在基于 Linux 的操作系统上,每个包都应该做一个单独的工作,并且做得很好。
如果已经开发了一个包来管理音频服务,那么其他程序将简单地将所述包列为它们的依赖项,并使用它来满足他们的音频要求。
此外,如果多个应用程序需要同一个包,它只在系统上安装一次,防止数据冗余并节省磁盘存储空间。 您还可以使用 APT 获取系统上所有当前安装的软件包的列表。