我們都知道,在基于紅帽的linux系統中,一個rpm包,需要把先将它依賴的其他包安裝好才能正常的工作。對于終端使用者,rpm的安裝、更新、删除中存在的依賴關系已經被工具透明化了(如 yum或 dnf等)。但如果你是系統管理者或者rpm包的管理者,你需要谙熟rpm包的依賴關系,以便及時更新、删除适當的包來保證系統的正常運作。
在本教程中,我将教大家如何檢查rpm包的依賴關系。無論這個包是否已經安裝進作業系統中,我們都有一些辦法來檢查它們的依賴性。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauEXY54ma0wWOsNGanF3d352NwkTN1EzLcZTMvwFOwQTMwIzLc1WdixWYvwFduVWboNWY0RXYvwVY0FGZvwVZt5CevJWcu42Y4VnbpxWLuR2Lc9CX6MHc0RHaiojIsJye.jpg)
<a target="_blank"></a>
使用rpm指令可以列出目标包所依賴的所有包,如下: $ rpm -qr
注意,這種方法隻适用于已安裝的包。如果你需要檢查一個未安裝包的依賴關系,你首先需要把這個包先下載下傳到本地來(不需要安裝)。
要下載下傳一個 rpm 包而不安裝,可以使用叫做'yumdownloader'的工具,下面我們先安裝yumdownloader:
$ sudo yum install yum-utils
現在我們來檢查一個未安裝的rpm包的依賴關系(本例使用 tcpdump)。首先,我們使用yumdownloader把tcpdump的rpm包下載下傳下來
$ yumdownloader --destdir=. tcpdump
然後再使用 "-qpr"參數顯示該包的依賴關系。
# rpm -qpr tcpdump-4.4.0-2.fc19.i686.rpm
你可以使用repoquery工具來羅列包的依賴關系,它與包是否安裝無關,這個工具包含在yum-utils中。
顯示目标包所依賴的包:
$ repoquery --requires --resolve <package-name>
為讓repoquery正常的工作,需要保持網絡的暢通,應為repoquery需要在yum庫中查找資訊。
第三個方法是使用rpmreaper工具。這個工具本來是用作清理系統中無用以及它們所依賴的包,rpmreaper有很直覺的ncurses界面來展示已安裝的包和它們依賴關系的樹形圖。
$ sudo yum install rpmreaper
隻需運作rpmreaper就可以看到rpm包的依賴關系:
$ rpmreaper
rpmrepater會向使用者顯示已安裝包的清單,你可以使用上/下箭頭來滾動螢幕。
你可以在指定包上使用"r"鍵來顯示其依賴關系,循環在指定包上按下"r"鍵可以展示出餘下的資訊。
"l"标志的意思是說這個包是一片“孤葉”,意思說說沒有任何包依賴它。
"o"标志是說這個包是整個依賴鍊的中間部分。
按下"b"鍵會顯示其他依賴于該包的其他包。
還有一個辦法是使用rpmdep工具,rpmdep是一個指令行工具,可以顯示已安裝包的完整包依賴關系圖。該工具會分析rpm包的依賴性,從完整的排完序的拓撲圖中摘取部分包的資訊,形成清單展示給使用者。該工具的輸出結果可以直接使用到dotty(可視化展示工具)中去。
在fedora中安裝rpmdep和dotty:
$ sudo yum install rpmorphan graphviz
生成包依賴的拓撲關系圖(例如 gzip):
$ rpmdep.pl -dot gzip.dot gzip
$ dot -tpng -o output.png gzip.dot
教程到這個地方,我們用到了幾種辦法來檢查包的依賴關系。如果您想知道如何在居于debian的系統中檢查.deb的包依賴關系
原文釋出時間:2014-08-16
本文來自雲栖合作夥伴“linux中國”