使用 ldd 命令像专业人士一样管理 Linux 上的包依赖关系
使用 ldd 命令学习依赖项管理,以更好地管理您的 Linux 计算机和已安装的软件包。
管理依赖关系是维护 Linux 系统不可或缺的一部分。软件很复杂,依赖于大量的共享库和文件。有时,跟踪应用程序所需的文件变得很困难。
这就是 Linux 上的 ldd 命令发挥作用的地方。 ldd 是一个资源丰富的命令行工具,用于跟踪应用程序所需的共享对象依赖关系。
让我们了解如何利用 ldd 命令发挥自己的优势,并成为 Linux 上管理依赖项的专家!
什么是包依赖项?
软件不仅仅是独立的源代码,而是本机源代码和从外部库借用的代码的合并。当系统中缺少这些库和其他共享对象时,依赖它们的应用程序可能会出现故障,甚至直接拒绝启动。
所有这些共享文件、包、库等,统称为Linux上的依赖项。虽然这个简短的定义让您对依赖关系有一个粗略的了解,但实际情况比这要复杂一些,这就是为什么深入了解包依赖关系很重要。
什么是 ldd 命令及其工作原理?
ldd 是列表动态依赖项的缩写。顾名思义,ldd 列出了应用程序所需的所有共享对象。
它通过使用专门设置的环境变量调用动态链接器来工作。当您使用二进制文件的位置运行 ldd 时,它会返回一个输出,其中包含依赖项列表、它们的位置以及表示它们在内存中加载位置的十六进制值。
使用 ldd 命令查找共享对象依赖关系
现在您已经清楚地了解了 ldd 的全部内容,让我们动手实践并了解如何使用它查找软件依赖项。
在学习如何使用 ldd 之前,首先,通过打印出已安装的 ldd 版本来确认您的系统上是否已安装它:
ldd --version
如果返回“找不到命令”错误,则需要先安装 ldd。
在基于 Ubuntu 和 Debian 的系统上,运行:
sudo apt install libc-bin
对于基于 Arch 的发行版:
sudo pacman -S glibc
在 RHEL 和 Fedora 上:
sudo dnf install glibc-common
安装 ldd 后,您现在可以专注于学习如何使用它。以下是 ldd 命令的基本语法:
ldd binary_location
如果您不知道二进制文件的位置,可以使用众多 Linux 命令行运算符之一,并将which命令的输出与 ldd 相结合来查找包的依赖项:
ldd -flag $(which binary_name)
ldd 命令提供了四种不同的选项来修改输出。他们是:
-v:打印详细输出,包括附加信息,例如每个依赖项的版本信息
-u:打印所有未使用的依赖项,即已加载但未实现的依赖项
-d:打印丢失的对象并执行重定位
-r:打印丢失的对象和函数并执行重定位
管理 Linux 上的包依赖关系
通过软件库中的 ldd,您将能够解决应用程序中与共享对象依赖相关的问题。
此外,由于 ldd 还输出加载库的位置,因此您将能够调试应用程序并更好地了解特定库的实现方式。 ldd 还打印出应用程序中使用的共享库的版本。
使用此功能,您可以审核应用程序是否存在与共享库的过时版本相关的任何潜在漏洞。
依赖管理是一项核心技能,对于保持 Linux 系统的健康至关重要。然而,有时,尽管所有依赖项都正常,但包可能会损坏。了解如何查找和修复损坏的软件包非常重要。