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