您好:)根据我使用 ubuntu 下载软件的方式,软件更新有何不同?例如,当我使用 apt-package manager 手动下载它时,或者当我将一些存储库添加到 /etc/apt/sources.list 时。还可以使用扁平包或快照下载软件。
当我调用 sudo apt update 时实际上会发生什么?检查哪些存储库?
答案1
在Ubuntu上安装软件包的方法有很多,有些你没有提到。为了给出完整的答案,我想描述一下所有这些:
通过包管理器安装,默认存储库
包管理器(无论是apt
、apt-get
或aptitude
其他)有一个可从中下载软件的位置列表。该软件通常值得信赖,可以正常工作并且维护良好。这样的位置称为“存储库”。存储库的 URL 存储在/etc/apt/sources.list
.运行时apt update
,包管理器会查询存储库,以便知道哪些软件包可用。它将信息存储在本地缓存中。
通过 安装包时apt install
,包管理器会检查其本地缓存以确定从哪里下载包。然后它会下载该包。该软件包以 DEB 格式的存档形式提供。存档将被解压到您的本地文件系统中。此外,该软件包可能包含一些代码,这些代码将自动执行一次以设置新安装的软件。
apt upgrade
当通过或更新软件时apt dist-upgrade
,会下载现有软件包的新版本。当前版本已从系统中删除。包管理器知道要删除哪些文件,因为它知道哪个文件是由哪个包提供的。然后按照上述方法安装新版本。
通过包管理器、自定义存储库安装
还可以通过添加 URL 来扩展默认存储库/etc/apt/sources.list
,尽管现在/etc/apt/sources.list.d/
应该使用。包管理器会将它们视为默认存储库。安装、删除和更新的工作原理完全相同。用户在添加自定义存储库时必须小心——它们必须是为系统创建的。
旁注:根据个人经验,我建议在从一个 Ubuntu 版本升级到下一个版本之前删除从非默认存储库安装的所有软件包。
通过包管理器安装,手动下载
您还可以手动下载 DEB 文件。您可以通过安装该软件包dpkg -i
。包管理器永远不会更新这个包,因为它不知道它来自哪里。
通过卡扣安装
snapcraft 是包管理器的替代品,不仅与 Debian 衍生的 Ubuntu 兼容,而且与所有 Linux 发行版兼容。快照包不会解压到系统中。此外,它被安装(其内容直接可见)并且软件在系统内的受控环境中执行(想想沙箱和虚拟机)。移除卡扣时,封装将被卸载并移除。更新的发生类似。
完全手动安装
您还可以下载一堆文件并将它们放在硬盘驱动器上的适当位置。定制软件通常进入/opt。二进制文件(或它们的链接)安装到$PATH
.这样,就可以轻松访问该软件。包管理器对此软件一无所知。更新也需要手动安装(有时软件有自我更新功能,很难)。定制软件也可以安装到类似/usr/local
或什至 的地方/usr
。除非您真正知道自己在做什么,否则不应执行后者。自定义软件可能会与包管理器控制的软件发生严重冲突。
类似问题:
使用 apt-get 更新 Ubuntu 软件
我通过 Apper 还是通过 Debian 中的软件中心更新软件包有什么区别吗?
答案2
我建议仅安装经销商提供的来源的软件。仅当您确切知道自己在做什么时,才手动添加存储库或手动安装软件包或其他软件。至于sudo apt update
作用是什么的问题:它从您配置的所有存储库中获取最新的可用软件包。这同样适用于按扣或扁平包装。从中央存储库安装它们后,您将以类似于apt update
.
答案3
apt update
更新存储库/etc/apt/sources.list
中以及/etc/apt/sources.list.d/
.首先运行它很重要,这样才能apt
了解更新版本的软件包。
apt upgrade
实际上升级已安装的具有可用更新版本的软件包,前提是它们是通过安装的apt
并且它们来自的存储库位于上述位置。
来自 的包snap
不会flatpak
被升级,apt
因为存储库不同并且不会在apt
的缓存/数据库中。
答案4
apt update
检查您的所有软件源,因此这是发行版的存储库和您添加的任何 PPA。据我所知,这不包括 flatpak (用于flatpak update
此目的),但如果发行版是这样安装的,则可以包括 snap。当然,您手动安装的东西(下载的 .deb 或其他安装方式)不会以这种方式进行检查。
但请记住,Ubuntu 有自己的更新政策,部分发行版会更新,直到发行版生命周期结束(“主”存储库),其他发行版很少或没有更新(“宇宙”存储库和其他)(以及大多数发行版)快照安装的软件包不在“main”中)。