为什么更新和升级要分开?

为什么更新和升级要分开?

我了解,在 中apt,命令update会更新可用包的列表,但它不会升级已从这些包中安装的软件。

我还了解如何升级我已经从上述upgrade更新的软件包中安装的任何软件。update

Ubuntu/Debian 开发人员为什么要进行这种拆分update,而是upgrade使用一个命令来完成这两项任务?

这更多的是关于 Ubuntu 开发人员的架构哲学的问题。

答案1

update和之间差异的历史upgrade实际上非常酷。

很久很久以前——大约 2000 年左右,Ubuntu 出现之前的几年——带宽和磁盘空间非常有限……尽管与 20 世纪 90 年代中期相比已经很宽裕了。宽带才刚刚起步,拨号上网仍是上网的重要方式。大磁盘仍然只有几百 MB。Apt 是闪亮而新颖的、激进而具有革命性的,建立在 dpkg 之上。

apt 数据库,如果你仔细想想,就会觉得很神奇:它是一个精确到分钟的数据库,全部软件来自全部已知的存储库。它足够详细,足以让 apt 计算依赖项并识别可用的升级,但又足够小,可以通过当时的拨号调制解调器传输并存储在当时的小驱动器上。通过电话更新数据库可能需要分钟良好的连接。虽然现在已经很长了,但手动查找软件包更新(在 apt 之前)可能会消耗小时

那时,发行版的构建方式不同 - 没有持续集成,没有冒烟测试(好吧,根本没有多少测试!),构建农场才刚刚起步。升级必须比现在更频繁地恢复。许多用户选择不是由于各种原因升级某些软件包,或者今天只选择某些升级(手动测试),明天再升级其他软件包。

在接下来的 15 年左右的时间里,工具并没有发生太大的变化,这就是为什么我们仍然有单独的update行动upgrade用户工作流程随着发行版可靠性的提高,它也在不断发展,过去大量手动的源/更新/升级管理已经慢慢隐藏在层层自动化之中(software-updaterunattended-upgrades)。

现代化软件包工具是 Snaps、AppImage 和 Flatpak 最近出现的原因之一,但那是下一章。

答案2

升级并不是您唯一需要升级的时候apt-get update,而且我不想每次都升级,我只是想更新软件包列表。

一口井apt-get upgrade的运行可能取决于apt-get update不久前是否运行,但这对于apt-get removeapt-get install也是如此!所有这些都意味着吗apt-get update?当然不是!作为资源效率和设计清洁度的简单问题,如果一项操作对其他多项操作是通用的,则应将其排除在外。

相反,考虑到apt-get removeapt-get install也可能取决于最近是否成功运行,那么每次运行apt-get update是否有意义?不,因为我打算做的事情可能会与将要做的事情相冲突。apt-get upgradeapt-get updateapt-get upgrade

答案3

每当你更改软件源时,你必须运行该命令sudo apt update来刷新可用软件列表。然后,你可以在刚添加的新软件源中搜索可用的软件包并/或安装它们。

该命令sudo apt upgrade相当于使用软件更新程序应用程序升级已安装软件包列表的终端等效命令。这与添加新软件源、更新可用软件列表以包含来自新软件源的软件包以及从您刚添加的新软件源安装新软件包的常规工作流程不同,因此它更方便,并且不会令人混淆,因为它们sudo apt updatesudo apt upgrade单独的命令。

分开sudo apt update和也不太容易混淆,sudo apt upgrade因为当你sudo apt update成功运行时,你已经确认你有互联网连接。如果之后运行时出现问题sudo apt upgrade,问题更可能是包管理问题而不是互联网连接问题,并且的结果sudo apt upgrade将为诊断和解决问题提供线索。

答案4

有人可能会问,为什么要从正式的 Ubuntu 存储库下载程序然后apt安装它?如果先下载然后安装它,而不是一次性下载和安装,会有什么区别?

好吧,在阅读了评论并对此进行了更多思考后,我明白了,这是由于Unix 哲学, A模块化的其基本理念是“每个程序只做一件事”:首先下载,然后安装 --- 每个操作都有自己专用的程序。

相关内容