“apt-get dist-upgrade”定义的混乱

“apt-get dist-upgrade”定义的混乱

根据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)来清理东西。

相关内容