Dependencies

遞歸依賴檢查和反向依賴檢查有什麼區別?

  • July 8, 2014

我對軟體依賴項的理解是,一個程序包可能需要安裝其他包,稱為依賴項。一個樹狀的結果隨之而來。有時包共享公共依賴項,但包只需要安裝一次。

|套餐D
| 包B --------->|
| |套餐E
套餐A -------->|
| |包F
| 包C --------->|
|套餐 B

我最近在 AskUbuntu.com 上發布了一個關於查找包的依賴項的問題,所有這樣做的方法都給了我不同的結果。這樣做的原因是,有些方法顯然列出的不僅僅是依賴關係,有些正在執行遞歸檢查,有些正在執行反向檢查。

反向依賴檢查和遞歸依賴檢查有什麼區別?

編輯:

條款的引用。我第一次聽到它們是在我發布的關於 APT 的執行緒的評論中,但它們被用於幾個可用於進行依賴性檢查的程序以及它們的聯機幫助頁上。

apt-cache rdepends 正在尋找反向依賴關係,我的腳本和 apt-rdepends 正在遞歸尋找依賴關係。

rdepends pkg(s)
rdepends 顯示一個包具有的每個反向依賴項的列表。
apt-rdepends - 執行遞歸依賴列表,類似於
apt-cache

反向依賴

反向依賴意味著你想要一個依賴於給定包的包列表。

例子

$ apt-cache rdepends jetty
jetty
Reverse Depends:
 solr-jetty
 libjetty-java
 libjetty-extra-java
 libjetty-extra
 libini4j-java
 guacamole

遞歸依賴

使用諸如apt-rdepends顯示給定包所依賴的包之類的工具,以及這些包還依賴於哪些包。這是遞歸執行的,直到用完整個依賴樹。

例子

$ apt-rdepends jetty | head -10
Reading package lists... Done
Building dependency tree       
Reading state information... Done
jetty
 Depends: adduser
 Depends: apache2-utils
 Depends: default-jre-headless
 Depends: java5-runtime-headless
 Depends: jsvc
 Depends: libjetty-java (>= 6.1.26-1ubuntu1)
adduser
 Depends: debconf
 Depends: debconf-2.0
...

上面可以看到jetty是依賴於adduser哪個本身又依賴於debconf

反向遞歸依賴

這個顯示了哪些包依賴於一個依賴於給定包的包。這再次以遞歸方式完成。

例子

$ apt-rdepends --reverse jetty 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
jetty
 Reverse Depends: solr-jetty (>= 3.6.1+dfsg-0ubuntu2)
solr-jetty
 Reverse Depends: chef-solr (>= 10.12.0+dfsg-1)
chef-solr
 Reverse Depends: chef-expander (>= 10.12.0-1)
 Reverse Depends: chef-server-api (>= 10.12.0-1)
chef-expander
chef-server-api
 Reverse Depends: chef-server-webui (>= 10.12.0+dfsg-1)
chef-server-webui

再次在這裡探索樹時,第一個列為依賴項的包jettyis solr-jetty,而後者又列為 的依賴項chef-solr,依此類推。

依賴類型

它可能會有點混亂,但有各種各樣的依賴。查看手冊頁apt-rdepends

  -f, --follow=DEPENDS
       A comma-separated list of DEPENDS types to follow recursively. 
       By default, it only follows the Depends and PreDepends types.

       The possible values for DEPENDS are: Depends, PreDepends, Suggests,
       Recommends, Conflicts, Replaces, and Obsoletes.

       In --build-depends mode, the possible values are: Build-Depends, 
       Build-Depends-Indep, Build-Conflicts, Build-Conflicts-Indep.

引用自:https://unix.stackexchange.com/questions/141247