像專業(yè)人士一樣在 Linux 上使用 ldd 命令管理軟件包依賴關(guān)系
在維護(hù)您的 Linux 系統(tǒng)時(shí),管理依賴關(guān)系是一個(gè)重要的部分。軟件是復(fù)雜的,依賴于許多共享庫(kù)和文件。有時(shí)候,跟蹤應(yīng)用程序所需的文件變得困難。
這就是 Linux 中 ldd 命令發(fā)揮作用的地方。ldd 是一個(gè)功能豐富的命令行工具,用于跟蹤應(yīng)用程序所需的共享對(duì)象依賴關(guān)系。
讓我們學(xué)習(xí)如何利用 ldd 命令,在 Linux 上成為一個(gè)管理依賴關(guān)系的專家!

什么是軟件包依賴關(guān)系?
軟件不僅僅是獨(dú)立的源代碼,而是本地源代碼和外部庫(kù)中借用的代碼的結(jié)合體。當(dāng)這些庫(kù)和其他共享對(duì)象在您的系統(tǒng)中缺失時(shí),依賴于它們的應(yīng)用程序可能會(huì)出現(xiàn)故障,甚至拒絕啟動(dòng)。
所有這些共享文件、軟件包、庫(kù)等,在 Linux 上統(tǒng)稱為依賴關(guān)系。雖然這個(gè)簡(jiǎn)短的定義給您一個(gè)大致的概念,但實(shí)際情況比這更復(fù)雜,這就是為什么深入了解軟件包依賴關(guān)系的重要性。
ldd命令是什么,它如何工作?
ldd 是 List Dynamic Dependencies 的縮寫(xiě)。顧名思義,ldd 列出了應(yīng)用程序所需的所有共享對(duì)象。
它通過(guò)設(shè)置特殊的環(huán)境變量來(lái)調(diào)用動(dòng)態(tài)鏈接器。當(dāng)您使用二進(jìn)制文件的位置運(yùn)行 ldd 時(shí),它會(huì)返回一個(gè)輸出,其中包含依賴關(guān)系的列表、它們的位置以及表示它們加載到內(nèi)存的十六進(jìn)制值。
使用 ldd 命令查找共享對(duì)象的依賴關(guān)系
現(xiàn)在您對(duì) ldd 的基本概念有了清晰的了解,讓我們動(dòng)手實(shí)踐并學(xué)習(xí)如何使用它來(lái)查找軟件的依賴關(guān)系。
在學(xué)習(xí)如何使用 ldd 之前,請(qǐng)先確認(rèn)您的系統(tǒng)是否已安裝了 ldd,可以通過(guò)打印已安裝的ldd版本來(lái)確認(rèn):
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ ldd --version
如果返回“command not found”錯(cuò)誤,則需要先安裝 ldd。
在基于 Ubuntu 和 Debian 的系統(tǒng)上運(yùn)行以下命令進(jìn)行安裝:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo apt install libc-bin對(duì)于基于 Arch 的發(fā)行版:
sudo pacman -S glibc對(duì)于 RHEL 和 Fedora:
sudo dnf install glibc-common安裝了 ldd 后,現(xiàn)在您可以專注于學(xué)習(xí)如何使用它。以下是 ldd 命令的基本語(yǔ)法:
ldd 二進(jìn)制文件路徑
如果您不知道二進(jìn)制文件的位置,您可以利用 Linux 命令行操作符之一,將 which 命令的輸出與 ldd 命令結(jié)合起來(lái),以查找軟件包的依賴關(guān)系:
ldd -flag $(which binary_name)ldd命令提供了四個(gè)不同的選項(xiàng)來(lái)修改輸出。它們是:
- -v:打印詳細(xì)輸出,包括每個(gè)依賴項(xiàng)的版本信息
- -u:打印所有未使用的依賴項(xiàng),即已加載但未實(shí)現(xiàn)的依賴項(xiàng)
- -d:打印缺失的對(duì)象并執(zhí)行重定位
- -r:打印缺失的對(duì)象和函數(shù),并執(zhí)行重定位

要確定給定的可執(zhí)行守護(hù)程序是否支持 TCP Wrapper,那就請(qǐng)運(yùn)行以下命令:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]
└─$ sudo ldd /usr/sbin/sshd | grep libwrap
在 Linux 系統(tǒng)中管理軟件包依賴關(guān)系
有了 ldd 作為您的軟件工具,您將能夠解決與應(yīng)用程序相關(guān)的共享對(duì)象依賴問(wèn)題。
此外,由于 ldd 還輸出庫(kù)加載的位置,您將能夠調(diào)試應(yīng)用程序并更好地了解特定庫(kù)的實(shí)現(xiàn)方式。ldd還打印出應(yīng)用程序中使用的共享庫(kù)的版本。
利用這個(gè)功能,您可以檢查應(yīng)用程序是否存在與過(guò)時(shí)版本的共享庫(kù)相關(guān)的潛在漏洞。
依賴管理是一項(xiàng)關(guān)鍵的核心技能,良好的運(yùn)行狀態(tài)對(duì)于您的 Linux 系統(tǒng)至關(guān)重要。然而,有時(shí)候,即使所有依賴項(xiàng)都正常,一個(gè)軟件包可能仍然出現(xiàn)問(wèn)題。因此,了解如何查找和修復(fù)損壞的軟件包非常重要。


























