为什么更新和升级甚至存在分离?


12

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

我也了解,可以如上所述upgrade从更新后的软件包中升级已经安装的所有软件update

Ubuntu / Debian开发人员进行此拆分updateupgrade使用一个命令来完成这两项任务的原因是什么?

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


如果我要安装许多应用程序(并将它们分组,那么一个命令用于一个组,下一个命令用于下一个,等等),为什么我要为每个组下载存储库-通过分离repo.update和后续的安装步骤我可以节省带宽。如果我想同时执行命令,则可以编写脚本,也可以编写脚本alias。Unix方式是一个命令只会做一件事,因此,如果“神学/哲学”论点也是您的事,那么分离更适合Unix方式。
guiverc

同样,如果我按apt dist-upgrade“ n”取消,然后改变主意,我将节省带宽,因为它不会“更新”以重新执行apt dist-upgrade命令...即使“ dist-upgrade”进行了更新自动,有一些“更新”的原因不包括“安装”,“升级”或“ dist-upgrade”,因此“更新”命令仍然存在
。。– guiverc

认为从用户的角度来看不应该存在这种分离,并且的动作apt update应该在需要时自动运行。
罗比·巴萨克

Answers:


7

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

一个apt-get upgrade运作良好,可以依赖于apt-get update正在运行的时间不长,但随后即是真实apt-get removeapt-get install的!所有这些都应该暗示apt-get update吗?当然不是!作为资源效率和设计简洁性的简单问题,如果一个操作是其他多个操作所共有的,则应将其排除在外。

相反,鉴于apt-get remove并且apt-get install可能还取决于apt-get update最近运行是否成功完成,apt-get upgrade对于每次运行apt-get update是否有意义?再说一次,因为我打算做的事情可能会与要做的apt-get upgrade事情发生冲突。


6

无论何时更改软件源,都必须运行命令sudo apt update以刷新可用软件的列表。然后,您可以在刚添加的新软件源中搜索可用的软件包和/或安装它们。

该命令sudo apt upgrade等效于使用Software Updater应用程序升级已安装软件包列表的终端。这与添加新软件源,更新可用软件列表以包括新软件源中的软件包以及从刚添加的新软件源中安装新软件包的正常工作流程不同。并减少混乱,sudo apt update并且sudo apt upgrade是单独的命令。

分开也不太容易混淆sudo apt updatesudo apt upgrade因为当您sudo apt update成功运行时,您已经确认您具有Internet连接。如果在sudo apt upgrade以后运行时出现问题,则该问题更可能是程序包管理问题,而不是Internet连接问题,并且的结果sudo apt upgrade将为诊断和解决问题提供线索。


5

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

很久很久以前-大约在2000年左右,也就是Ubuntu诞生之前的数年--带宽和磁盘空间要有限得多...尽管与1990年代中期相比已经很大。宽带才刚刚起步,拨号仍然是上网的重要方式。大磁盘仍然只有几百MB。在dpkg之上构建的Apt闪亮而新颖,激进且具有革命性。

当您想到apt数据库时,它真是一个奇迹:它是来自所有已知存储库的所有软件的实时精确数据库。它足够详细,可以计算依赖关系并确定可用的升级,但又足够小,可以通过当时的拨号调制解调器进行传输并存储在当时的小型驱动器上。通过电话更新数据库可能需要几分钟才能建立良好的连接。尽管那已经很长一段时间了,但是(在apt之前)手动查找软件包更新可能会花费数小时

那时,发行版本的构建方式不同-没有持续集成,没有烟雾测试(嗯,根本没有太多测试!),构建农场才刚刚开始。升级必须比现在更频繁地还原。许多用户出于各种原因选择升级某些软件包,或者今天只选择某些升级(以手动测试),明天选择其他升级。

在随后的15或-年左右,该工具都没有太大的变化,这就是为什么我们仍然有独立updateupgrade行动。的用户的工作流程已经演变为发行可靠性有所提高,和多源/更新/升级管理的曾经是手动已经慢慢隐藏自动化的层后面(software-updaterunattended-upgrades)。

现代化软件包工具是Snaps,AppImage和Flatpack近期出现的原因之一,但这是下一章。


2

他们出于许多原因而分开做事。

一个示例是我发布并回答的一个问题:如何使用GUI删除PPA?。在此屏幕上,我们要删除不升级软件的PPA

删除PPA.png

删除PPA后,GUI软件将自动运行sudo apt update。如果要从命令行中删除PPA,则需要从源列表中删除PPA sudo apt update 之后再运行。

如果没有单独的apt update功能,则无法删除PPA!。


另一个示例是您需要从命令行运行sudo apt update以刷新源。然后你就可以找出可以进行升级,而不实际的升级:

$ apt list --upgradable
Listing... Done
conky-std/xenial 1.10.1-3 amd64 [upgradable from: 1.9.0-4]
google-chrome-stable/stable 65.0.3325.181-1 amd64 [upgradable from: 63.0.3239.132-1]
libxnvctrl0/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
nvidia-settings/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
peek/xenial 1.3.1-0~ppa23~ubuntu16.04.1 amd64 [upgradable from: 1.2.1-0~ppa20~ubuntu16.04.1]

查看输出,您可以决定让给定的软件包“固定”或“保留”,并且在下次运行“ sudo apt upgrade”时不进行升级。如果只有一个“ update / upgrade”过程,您将失去这些能力。 。

没有单独的产品,apt update您将看不到要升级的产品!


第二段是错误的。yumdnf在执行相关操作时自动运行与更新等效的操作。例如,相当于apt list --upgradable就是yum check-update,如果没有最近更新了它该更新包列表。正如在其他软件包管理器中可以看到的那样,这样做肯定有可能起作用。
muru

@muru基于238个投票结果,该回答说您必须sudo apt update在删除存储库后运行。
WinEunuuchs2Unix

然后是第二个---分隔部分。
muru

现在您提到它,这也是错误的。再次从yum/ 的示例中可以看出dnf,更新操作是自动的,因此禁用的源会自动从下一个操作中删除。同样,这是完全可能的。
muru

@muru另外,至少在我的系统上,也yum没有dnf安装。安装其中之一来代替apt update会增加系统开销和学习时间。
WinEunuuchs2Unix

0

有人会问为什么要从正式的Ubuntu存储库下载程序,apt然后再安装呢?如果先下载然后安装而不是一次下载再安装,将会有什么不同?

在阅读了评论并对此进行了更多思考之后,我了解到这是由于Unix原理引起的,这种模块化原理基本上说“每个程序都做一件事情”:首先下载,然后安装---每个动作都有其专用的程序。


0

在没有分发的情况下,只有一个命令update-upgrade的东西,如果有的话,那不过是我想像的预定义别名。通过编辑〜/ .bashrc,也可以在Ubuntu上轻松设置这些别名。

更新用于重新同步存储库并修复那里的所有问题。然后,当您升级时,实际上是对已安装的软件包进行升级。但是,当您进行Dist-Upgrade升级时,便会完全升级。在Arch linux中,他们强调使用Syu进行全面升级。您可以在Ubuntu中执行相同的操作。在完全升级中,实际上,您会系统地解决任何依赖性问题,这可能是部分升级中可能出现的问题。

希望能帮助到你。请原谅文字,以电话书写。


2
yum如果缓存的数据足够旧,dnf则会自动执行与update大多数操作相同的操作。例如,请参见有关在dnf中更改该行为的讨论:lwn.net/Articles/750334
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.