Linux主要包管理系统比较
包管理器是每个 Linux 操作系统不可或缺的一部分。任何希望安装、删除或升级软件的 Linux 用户都不可避免地会以某种方式与包管理器进行交互。不同 Linux 发行版之间的包管理系统的功能通常有所不同,并且每个发行版的命令语法也略有不同。由于包管理器在系统维护中发挥着重要作用,因此它们有时可能成为选择 Linux 发行版用作日常驱动程序的决定因素。
在本教程中,我们将比较主要 Linux 发行版默认的一些最常见和流行的包管理系统。涵盖主要的包管理器将帮助我们理解功能和语法之间的差异,并允许用户就哪个包管理器最适合他们的需求做出明智的决定。我们还将介绍可在各种发行版上使用的通用包管理器,例如 Snap 和 Flatpak。
注意
软件存储库也与包管理器齐头并进。即使两个发行版使用相同的包管理器,一个发行版的默认存储库中也可能存在某些软件,而另一个发行版的默认存储库中不存在某些软件。当用户需要的程序在默认存储库中可用时,安装和维护就会变得更加容易。
在本教程中您将学习:
- 使用一种包管理器相对于另一种包管理器的优缺点
- 如何使用各种 Linux 包管理器搜索、安装、删除和执行其他功能
流行的包管理器的优点和缺点
在深入了解每个包管理器的详细信息之前,让我们首先回顾一下每个包管理器的一些优点和缺点。后续部分将更详细地介绍每个包管理器的优点,但下表以更容易理解的方式总结了它们:
Package manager | Pros | Cons |
---|---|---|
APT | Versatile with a lot of tools for different jobs (apt for general; apt-get for scripts; aptitude for interactive) |
A lot of tools with confusingly overlapping functionality; requires separate package cache updates |
DNF | Straightforward and very simple to use | Less granular control and versatility than some other package managers |
Pacman | Markedly faster than others; lightweight | Less intuitive command syntax; separate manager required for AUR |
Zypper | Fast, robust, and efficient | Limited to SUSE distros; complex syntax for advanced uses |
Portage | Highly customizable; compilation from source | Steep learning curve; slower at installing packages due to compilation time |
Universal managers (Snapd, Flatpak) | Distro independent; sandboxed installations | Less customization; bloated packages due to portability requirements |
APT 家族
APT 包管理器默认用于 Debian Linux 和基于 Debian 的发行版,例如 Ubuntu Linux 和 Linux Mint。我们选择“家族”这一分组是因为基于 Debian 的发行版中的包管理软件有多种工具组成。以下是一个快速概述:
- dpkg – 这是 APT 使用的后端包管理器(dpkg 在技术上不是 APT 的一部分),它处理软件的实际安装和删除。通常,用户永远不需要直接与 dpkg 交互
- APT – 这是 dpkg 后端和前端命令行工具(例如
apt
和apt-get
)之间的中间件 - apt – 用户通常用于安装和删除软件包的前端工具
- apt-get – 另一种前端,也是
apt
的较旧替代品,但旨在供脚本和系统服务使用 - aptitude – 另一个 APT 前端工具,更加用户友好和互动
使用相似的、重叠的包管理器名称以及功能上的重叠是许多用户在尝试完全掌握 Debian 或 Ubuntu 的包管理系统时最终感到困惑的原因。
作为最终用户,您真正需要熟悉的唯一工具是 apt – 请注意小写字母,这意味着我们指的是命令行工具本身,而不是 APT 库/中间件。或者,您也可以使用 aptitude,它只是 apt
的更现代的替代品。但是,大多数文档和用户通常会坚持使用 apt 命令。
您知道吗?
许多旧文档都会引用apt-get
命令并指导读者使用它。它应该可以正常工作,但是,安装或管理软件包的现代推荐方法是使用 apt。更多信息:apt 与 apt-get
更新包缓存
我们首先看看如何使用 APT 系列更新包缓存。每次在系统上更新或安装软件包之前,您都需要执行此操作。这是大多数其他包管理器不需要的过程,但只需要一点时间,也没什么大不了的。
更新包缓存只是告诉您的系统从哪里下载软件以及安装什么版本,因为主机和链接总是在变化。因此,首先,我们将运行以下命令:
sudo apt update
在aptitude
中,我们将运行:
sudo aptitude update
安装软件包
现在,我们准备使用apt install
命令和软件包名称来安装软件。例如,要安装 vim:
sudo apt install vim
或者,使用 aptitude
安装相同的软件包:
sudo aptitude install vim
注意
这些相同的命令也可用于更新单个包。换句话说,运行 sudo apt install vim
将更新 vim
软件包(如果已安装)。
更新包
接下来,让我们看看如何使用 APT 系列更新当前安装的软件包。请注意,此方法用于更新系统上当前的所有软件包。
与往常一样,首先更新包缓存:
sudo apt update
OR
sudo aptitude update
然后,运行以下命令之一来更新软件包,而不删除任何已安装的软件包:
sudo apt upgrade
OR
sudo aptitude safe-upgrade
或者,如果您想允许 apt 删除不再需要的已安装软件包,和/或如果您想将内核更新到最新版本,我们将升级命令更改为:
sudo apt full-upgrade
OR
sudo aptitude full-upgrade
正在寻找一个包
APT 的一个重要功能是能够搜索要安装的软件包。它还允许我们查看当前安装的软件。
apt
命令的基本语法是:
apt search vim
这将列出与您的搜索词匹配的所有包。
aptitude
命令的语法是相同的:
aptitude search vim
由于 aptitude
是更具交互性和用户友好性的替代方案,因此搜索输出以每个包旁边的单个字符的形式为我们提供了一些有用的信息,这些信息指示:
p
– 未安装i
– 当前安装v
– 虚拟包
我们还获得与我们的搜索词匹配的每个软件包的名称以及软件的描述。两种 APT 工具都会返回此信息。
删除包
要使用 apt
或 aptitude
删除软件包,有两个不同的命令:remove
和 purge
。 remove
选项将卸载软件,但留下配置文件。如果您认为稍后可以重新安装该程序并且不想丢失您拥有的设置,这可能会很有用。
另一方面,purge
将卸载程序并尝试删除所有额外文件,例如软件附带的配置文件。让我们看一下这两种语法:
要删除包而不触及配置文件:
sudo apt remove vim
OR
sudo aptitude remove vim
要删除该包及其配置文件:
sudo apt purge vim
OR
sudo aptitude purge vim
最后,有时需要安装依赖包,但随后就不再需要了;这些称为孤立依赖项。要删除这些,我们可以使用以下命令:
sudo apt autoremove
OR
sudo aptitude remove ~o
地下城与勇士
在基于 Red Hat 的系统(如 Fedora、CentOS、Oracle Linux、Rocky Linux、AlmaLinux 等)上,dnf
包管理器取代了 yum
。 yum
命令在许多此类系统上仍然可用,但它只是到较新的 dnf 命令的符号链接,该命令引入了许多现代功能。
关于 dnf,您可能会注意到它的使用非常简单,并且没有很多替代命令或使用该工具的方法。这对于想要简化体验的用户来说很有吸引力,而其他人可能会觉得它被淡化了,并且没有提供大量的定制或独特的方式来利用包管理器。
更新包
与 apt 不同的是,每当用户与包管理器交互时,dnf 都会自动刷新其包缓存,因此无需手动更新。要更新系统上当前安装的所有软件包,用户可以执行:
sudo dnf update
安装软件包
使用 dnf
安装软件包使用简单的语法:
sudo dnf install neovim
删除包
要使用 fng
删除包:
sudo dnf remove neovim
正在寻找一个包
如果您不知道要安装的软件包的名称,我们可以使用 search
参数,后跟软件包的关键字或搜索词:
dnf search neovim
吃豆人(和帕马克)
pacman
包管理器用于 Arch Linux 及其衍生发行版(例如 Manjaro Linux)。它明显比许多其他包管理器要快,并且虽然使用简单,但语法不太直观。它是 Linux 高级用户和那些渴望灵活性和定制的用户的普遍喜爱。
对于那些觉得 pacman 难以使用的人来说,Pamac 是 pacman 的图形前端,默认安装在 Manjaro 上。如果您想要使用更简单的东西,同时仍然在后端利用 pacman
的强大功能,那么它是 pacman
的一个很好的替代方案。 Pamac 也可以安装在 Arch Linux 上。
更新所有包
您可以使用 -Syu
选项更新所有已安装的软件包,从而更新整个系统(因为 Arch Linux 是滚动版本):
sudo pacman -Syu
以下是选项的含义:
-S
:将系统的软件包与官方仓库中的软件包同步-y
:从服务器下载新的包数据库-u
:升级所有已安装的软件包
安装一个包
要使用 pacman
安装软件包,请提供 -S
选项和您要安装的软件包的名称:
sudo pacman -S vim
删除一个包
提供 -R
选项以删除 pacman
中的包:
sudo pacman -R vim
要删除所有未使用的依赖项以及要卸载的软件包,请包含 -Rns
选项:
sudo pacman -Rns vim
搜索包
要搜索软件包,请使用 -Ss
选项,后跟您的搜索词:
sudo pacman -Ss vim
帕马克
Pacman 是具有图形界面的用户友好替代方案。它可用于根据需要搜索、安装、更新和删除包。
如果您发现 pacman
由于语法不直观而有点难以使用,pamac
命令提供了更简单的替代方案。例如,要使用 pamac
安装软件包:
sudo pamac install vim
AUR 助手
AUR(Arch 用户存储库)是由 Arch Linux 社区策划的在线软件目录。如果某个软件包本身无法通过 pacman 安装,那么您寻找的软件包通常很可能已被某人上传到 AUR。
AUR 是 Arch Linux 中最吸引人的部分之一,因为它极大地增加了可安装的软件数量。由于 pacman 无法与 AUR 交互,因此您将需要所谓的“AUR 助手”,它本质上是一个使用 AUR 作为其软件存储库的单独的包管理器。
正如我们上面所介绍的,Pamac 就是这样一个 AUR 助手。另一个流行的选择是 yay
,我们将在下面介绍其语法。您会注意到命令选项与 pacman 的命令选项相同。
安装一个包
要使用 yay
从 AUR 安装软件包,请使用 -S
选项。例如,让我们安装 Spotify:
yay -S spotify
要更新系统上的所有 AUR 软件包:
yay -Syu
搜索包
要在 AUR 中搜索软件包,您可以随时访问 AUR 官方网站并找到您要查找的内容。或者,要在 yay
中搜索 AUR 包,请使用 -Ss
选项:
yay -Ss [search term]
删除一个包
要使用 yay
删除 AUR 包,请提供 -R
选项:
yay -R spotify
要删除 AUR 包和任何未使用的依赖项,请添加 -Rns
选项:
yay -Rns spotify
检查已安装的软件包
如果您忘记某个软件包是来自 AUR 还是来自 pacman
,您可以使用 yay
检查您的系统上当前安装了哪些 AUR 软件包:
yay -Qm
扎普
zypper
软件包管理器是 openSUSE 和 SUSE Linux Enterprise 的默认软件包管理器。它易于使用,并提供命令行界面和图形前端,因此您可以使用更方便的方式。
更新缓存和包
要更新包缓存和所有已安装的包,我们运行以下命令:
sudo zypper refresh
sudo zypper update
安装一个包
要使用 zypper 安装软件包,请运行:
sudo zypper install vim
删除一个包
要使用 zypper
删除包,请提供 remove
参数:
sudo zypper remove vim
搜索包
使用 zypper
搜索包:
zypper search [search term]
波蒂奇
Gentoo Linux 发行版使用 Portage 作为其包管理器。 Portage 是这个列表中最独特的包管理器,因为它从源代码编译包。对于那些坚定地使用 Linux 并希望卷起袖子并从系统中获得最大程度定制的人来说,他们可以学习使用 Gentoo 和 Portage 来对其 Linux 系统的各个方面进行精细控制。掌握 Gentoo 是一个漫长的旅程,但您首先需要掌握的事情之一就是使用 Portage。
Portage 使用户能够使用 USE
标志微调新包的编译过程。这样,用户就可以准确选择将哪些功能或组件编译到正在安装的程序中。
同步Portage树
您会注意到这里的一些术语有所不同。但是同步Portage树相当于更新其他主流包管理器中的包缓存。为此,我们运行:
sudo emerge --sync
安装一个包
要使用 Portage 安装软件包,例如 vim
:
sudo emerge vim
这里唯一不同的是,该过程将比其他包管理器花费更长的时间,因为代码将从源代码编译,而不是安装已经编译的二进制文件。
删除包
要使用 Portage 删除软件包,我们执行:
sudo emerge --unmerge vim
搜索包
我们可以使用 Portage 通过使用 --search
选项来搜索包:
emerge --search [search term]
通用包管理器 – Snap、Flatpak 等。
Snapd、Flatpak 和 AppImage 等包管理系统经常被提及和比较。它们三个都是独立于发行版的包管理器,这意味着它们可以在任何 Linux 系统上使用,无论您运行的是哪个发行版。
通用包管理器的优点是始终使用相同的语法,无论您使用什么发行版。他们还确保包在所有系统上的行为相似。这些都是很好的功能,但是使包在所有系统之间可移植意味着某些自定义功能会在此过程中丢失。
捕捉命令
安装包:
sudo snap install spotify
删除包:
sudo snap remove spotify
更新所有 Snap 包:
sudo snap refresh
Flatpak 命令
Flatpak 可以利用不同的软件存储库,这些软件存储库在 Flatpak 行话中称为“远程”。 Flathub 是最受欢迎的存储库,因此我们可以通过运行以下命令将其添加到我们的系统中:
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
然后,要安装像 GIMP 这样的程序,我们将运行:
sudo flatpak install flathub org.gimp.GIMP
要搜索遥控器中的软件,我们使用以下语法:
flatpak search gimp
您可以使用以下方法更新所有已安装的应用程序:
sudo flatpak update
最后,要使用 Flatpak 删除包,请执行:
sudo flatpak uninstall org.gimp.GIMP
结束语
在本教程中,我们了解了各种 Linux 系统包管理器的优缺点。我们还看到了用于与包管理器交互的语法,以便安装包、删除包以及执行其他功能。包管理系统是每个 Linux 发行版的核心部分,由于它们都有独特的功能和优势,因此在选择最适合用户的 Linux 发行版时可以发挥重要作用。