![为什么更新和升级要分开?](https://linux22.com/image/898976/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9B%B4%E6%96%B0%E5%92%8C%E5%8D%87%E7%BA%A7%E8%A6%81%E5%88%86%E5%BC%80%EF%BC%9F.png)
我了解,在 中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-updater
,unattended-upgrades
)。
现代化软件包工具是 Snaps、AppImage 和 Flatpak 最近出现的原因之一,但那是下一章。
答案2
升级并不是您唯一需要升级的时候apt-get update
,而且我不想每次都升级,我只是想更新软件包列表。
一口井apt-get upgrade
的运行可能取决于apt-get update
不久前是否运行,但这对于apt-get remove
和apt-get install
也是如此!所有这些都意味着吗apt-get update
?当然不是!作为资源效率和设计清洁度的简单问题,如果一项操作对其他多项操作是通用的,则应将其排除在外。
相反,考虑到apt-get remove
和apt-get install
也可能取决于最近是否成功运行,那么每次运行apt-get update
是否有意义?不,因为我打算做的事情可能会与将要做的事情相冲突。apt-get upgrade
apt-get update
apt-get upgrade
答案3
每当你更改软件源时,你必须运行该命令sudo apt update
来刷新可用软件列表。然后,你可以在刚添加的新软件源中搜索可用的软件包并/或安装它们。
该命令sudo apt upgrade
相当于使用软件更新程序应用程序升级已安装软件包列表的终端等效命令。这与添加新软件源、更新可用软件列表以包含来自新软件源的软件包以及从您刚添加的新软件源安装新软件包的常规工作流程不同,因此它更方便,并且不会令人混淆,因为它们sudo apt update
是sudo apt upgrade
单独的命令。
分开sudo apt update
和也不太容易混淆,sudo apt upgrade
因为当你sudo apt update
成功运行时,你已经确认你有互联网连接。如果之后运行时出现问题sudo apt upgrade
,问题更可能是包管理问题而不是互联网连接问题,并且的结果sudo apt upgrade
将为诊断和解决问题提供线索。