管理依賴關系是維護 linux 系統的一個重要組成部分。軟件是復雜的,依賴于許多共享庫和文件。有時候,跟蹤應用程序所需的文件變得困難。
這就是 linux 中 ldd 命令發揮作用的地方。Ldd是一款功能齊全的命令行工具,可用于追蹤應用程序對共享對象的依賴關系。
讓我們學習如何利用 ldd 命令,在 Linux 上成為一個管理依賴關系的專家!
什么是軟件包依賴關系?
軟件不僅包含獨立的源代碼,還匯聚了本地源代碼和外部庫中使用的代碼。如果您的系統缺少這些庫和其他共享對象,則依賴于它們的應用程序可能會出現故障,甚至可能拒絕啟動。
在Linux系統中,所有的共享文件、軟件包、庫等被統稱為依賴項。雖然這個簡短的定義給您一個大致的概念,但實際情況比這更復雜,這就是為什么深入了解軟件包依賴關系的重要性。
ldd命令是什么,它如何工作?
LDD 是 List Dynamic Dependencies 的縮寫。顧名思義,ldd 列出了應用程序所需的所有共享對象。
它通過設置特殊的環境變量來調用動態鏈接器。當您使用二進制文件的位置運行 ldd 時,它會返回一個輸出,其中包含依賴關系的列表、它們的位置以及表示它們加載到內存的十六進制值。
使用 ldd 命令查找共享對象的依賴關系
現在您對 ldd 的基本概念有了清晰的了解,讓我們動手實踐并學習如何使用它來查找軟件的依賴關系。
在學習如何使用 ldd 之前,請先確認您的系統是否已安裝了 ldd,可以通過打印已安裝的ldd版本來確認:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$ ldd --version
如果返回“command not found”錯誤,則需要先安裝 ldd。
在基于 ubuntu 和 debian 的系統上運行以下命令進行安裝:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$ sudo apt install libc-bin
對于基于 Arch 的發行版:
sudo pacman -S glibc
對于 RHEL 和 Fedora:
sudo dnf install glibc-common
安裝了 ldd 后,現在您可以專注于學習如何使用它。以下是 ldd 命令的基本語法:
ldd 二進制文件路徑
如果您不知道二進制文件的位置,您可以利用 Linux 命令行操作符之一,將 which 命令的輸出與 ldd 命令結合起來,以查找軟件包的依賴關系:
ldd -flag $(which binary_name)
ldd命令提供了四個不同的選項來修改輸出。它們是:
- -v:打印詳細輸出,包括每個依賴項的版本信息
- -u:打印所有未使用的依賴項,即已加載但未實現的依賴項
- -d:打印缺失的對象并執行重定位
- -r:打印缺失的對象和函數,并執行重定位
要確定給定的可執行守護程序是否支持 TCP Wrapper,那就請運行以下命令:
┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$ sudo ldd /usr/sbin/sshd | grep libwrap
在 Linux 系統中管理軟件包依賴關系
有了 ldd 作為您的軟件工具,您將能夠解決與應用程序相關的共享對象依賴問題。
除此之外,通過ldd輸出庫的加載位置,您能夠進行應用程序調試并更深入地了解特定庫的實現方式。ldd還打印出應用程序中使用的共享庫的版本。
利用這個功能,您可以檢查應用程序是否存在與過時版本的共享庫相關的潛在漏洞。
管理依賴關系是一項至關重要的核心技能,對于您的 Linux 系統的順暢運行非常重要。即使所有依賴項都正常,軟件包有時仍可能出現問題。因此,了解如何查找和修復損壞的軟件包非常重要。