根据man apt-get
:
升级“用于安装当前安装的所有软件包的最新版本”。
dist-upgrade “除了执行升级功能外,还可以智能地处理新版本软件包的依赖关系变化”
我在互联网上搜索了 dist-upgrade 的几个定义,发现它在必须安装新依赖项(尚未安装)时使用,尽管man apt-get
据我了解,这不是定义所说的。
我总是发现手册页非常精确,但我不明白“用新版本的包更改依赖关系”在 dist-upgrade 定义中到底意味着什么。这是否意味着相同依赖项的新版本的依赖项发生了更改? “更改”是否意味着删除一个依赖项并安装另一个依赖项,或者只是现在安装并使用同一依赖项的新版本而不是替换的版本?升级是否已经安装了新版本的依赖项并“以某种方式告诉”该包必须使用这个新的依赖项?
假设包 A 依赖于包 B 内的文件 X(依赖项):当升级安装包 B 的较新版本(称为包 B-2)时,包 A 使用了这个新的依赖项还是 A 仍然使用包B 直到执行 dist-upgrade ?
答案1
假设在升级之前您遇到过这样的情况,其中php
和 和python
包都依赖于 libxml-dev-1.2
+--------------------+
| python_3.1 |
+--------------+ | |
| php7.0 | | depends on libxml-dev_1.2
| | +-----+--------------+
| depends on libxml-dev_1.2 |
| | v
+------------+-+
| +---------------------+
| | libxml-dev-1.2 |
+------------> | |
| |
| |
+---------------------+
然后您更新apt
本地索引,apt-get update
现在
显示apt-cache policy
有一个可用于 php 版本的新软件包版本7.3
。
但运行apt-cache show php
表明新的 php 包需要其 libxml-dev 依赖项的更新版本,新的 php 包需要说,libxml-dev-1.3
.
通常 apt 会安装满足 php 7.3 安装或升级所需的所有依赖项,但是如果将 apt 替换libxml-dev-1.2
为较新的版本libxml-dev-1.3
(请记住并排libxml-dev-1.2
运行libxml-dev-1.3
并不是真正的选项)为了满足php7.3
依赖项要求,它将“破坏“ python 依赖关系要求。
在这种情况下,apt-get upgrade
什么也不做,但是如果您查看man apt-get
条目dist-upgrade
dist-upgrade
dist-upgrade 除了执行升级功能外,还可以智能地处理新版本软件包的依赖关系变化; apt-get 有一个“智能”冲突解决系统,如有必要,它会尝试升级最重要的软件包,而牺牲不太重要的软件包。因此,dist-upgrade 命令可能会删除一些软件包。 [...]
因此,apt-get dist-upgrade
将推动弯曲/打破有关包指定依赖项的规则,以便升级包。
因此,这两个命令apt-get dist-upgrade
将比使用其他命令升级更多的软件包apt-get upgrade
答案2
这两种情况都可能发生,具体取决于依赖项是文件还是包。就此而言,存在命令 deborphan 可以显示是否由于新安装的依赖项而存在孤立包。
我通常总是使用 dist-upgrade,有时会发出 aapt-get remove $(deborphan)
来清理东西。