我对软件依赖的理解是,一个程序包可能需要安装其他包,称为依赖。随之而来的是类似树的结果。有时,包共享共同的依赖关系,但该包只需要安装一次。
|套餐D |套餐B--------->| | |套餐E 套餐A -------->| | |套餐F |套餐C--------->| |套餐B
我最近发布AskUbuntu.com 上关于查找包的依赖关系的问题,所有执行此操作的方法都给了我不同的结果。原因是有些方法显然不仅仅列出了依赖关系,有些方法正在执行递归检查,有些方法正在执行反向检查。
反向依赖检查和递归依赖检查有什么区别?
编辑:
术语的引用。我第一次听到它们是在我发布的有关 APT 的主题的评论中,但它们在多个可用于执行依赖性检查的程序以及它们的联机帮助页中使用。
apt-cache rdepends 正在寻找反向依赖关系,我的脚本和 apt-rdepends 正在递归地寻找依赖关系。
r取决于包装 rdepends 显示包所具有的每个反向依赖项的列表。
apt-rdepends - 执行类似于以下的递归依赖项列表 apt 缓存
答案1
反向取决于
反向依赖意味着您需要依赖于给定包的包列表。
例子
$ 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
再次在这里,当探索树时,列出jetty
作为依赖项的第一个包是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.