系统极客一直在努力
专注操作系统及软件使用技能

主流发行版默认 Linux 包管理器详解

Linux

在 Linux 系统中,软件的安装、更新和移除都由「包管理器」负责。当你在安装软件时,它会自动连接到可信任的软件仓库(官方源 + 第三方源),并自动帮你搞定一切。

不同的 Linux 发行版都有自己的默认包管理器,比如 APT、DNF 和 Pacman 等等。接下来,我们就来看看它们的工作机制、重要性和各自的独到之处。

01. Linux 为什么依赖包管理器

1.1 什么是包管理器

跟 Windows 与 macOS 不同,在 Linux 上,软件通常不是一个下载后就能直接运行的独立文件。

  • 大多数程序都需要依赖其他组件才能正常工作,比如库、框架或实用工具。
  • 如果没有一个「大管家」来统一管理这些依赖关系,在安装 A 程序时,很可能会破坏掉 B、C……(我管你死活 🤷)。

正因如此,主流 Linux 发行版都推出了自家的软件包管理器。它清楚地知道软件该去哪儿找(软件源)、如何解决依赖问题、以正确的顺序安装所有组件,并让你的系统保持最新状态。

1.2 管理机制

  1. 包管理器在安装软件时,不只是获取主程序,它还会检查并安装缺失依赖项,确保应用彼此兼容;在更新或移除软件时,同样会帮你处理好一切。
  2. 这就避免了版本不匹配的问题,帮你远离臭名昭著的「依赖地狱」——即某个新程序破坏了其他程序,大家一起「原地爆炸」💥。

简单来说,Linux 包管理器可以帮你从「受信任的软件仓库」中获取经过测试的软件、定期的安全更新,并保持一致的管理体验。

对于「新手上路」的初学者而言,这也是安装 Linux 软件最简单、最安全的方式。当然,你也可以添加额外的「第三方软件仓库」来获取更多软件。如果你不想使用「终端」的话,还可以配置图形化管理工具。

02.主流发行版默认 Linux 包管理器

每个 Linux 发行版所使用的「默认包管理器」都与自身的系统设计目标相契合。虽然它们的核心功能都大同小异,但在设计理念和命令结构上却各有千秋。

2.1 APT:适用于 Debian 和 Ubuntu 系

APT 的全称是 Advanced Package Tool,它是 Debian 及衍生发行版,比如 Ubuntu、Linux Mint 和 Pop!_OS 的默认包管理器,能够在系统底层调用dpkg来实际安装.deb格式的软件包。

  • APT 的优势在于庞大的软件仓库:Debian 和 Ubuntu 都维护着数以万计的软件包,你需要的大多数软件都只需一条命令即可安装。
  • 对于比较新的软件,Ubuntu 还支持 PPA(个人软件包存档),开发者可以通过它来直接分发软件包。
  • 对于桌面用户,可以使用与 APT 集成的 GUI 前端(套壳 📦),比如 Synaptic(新立得)、GNOME 应用和 Ubuntu 软件中心。

APT 命令语法直观明了,操作起来非常简单。比如,你可以使用以下命令来保持系统更新,它会处理好所有繁琐的细节,确保所有包和库都正确安装:

sudo apt update
sudo apt upgrade

当然了,APT 也有一些小缺点,比如在处理大型更新或第三方软件仓库时,有时感觉会有点慢。但对初学者来说,它非常简单、可靠,是入门 Linux 包管理的最佳选择之一。

2.2 DNF:适用于 Fedora 和 Red Hat 系

DNFYUM 包管理器的继任者,旨在提供更快的速度、更低的内存占用,并更好地处理依赖关系,代表了基于 RPM 的下一代包管理技术。像 Fedora、CentOS、RHEL 和 openSUSE 这样的 Red Hat 系发行版,都将 DNF 作为首选的解决方案。

由于 DNF 使用 RPM 软件包,遵循着 Red Hat 在打包和安全方面的严格规则,它天然就适合企业级系统。

和 APT 一样,使用 DNF 命令也相当直接。安装软件就是这么简单:

sudo dnf install <软件包名称>

更新系统则使用以下命令:

sudo dnf upgrade

你还可以搜索软件包、查看事务历史,甚至在「翻车」时回滚更改。我特别喜欢的一个 DNF 功能是它模块化的软件仓库,允许你在不同版本软件(如 Node.js 或 Python)之间进行选择,而不会破坏系统的其他部分。

DNF 还支持增量 RPM(delta RPM),这意味着在更新时,它只会下载软件包中发生变化的部分,来节省时间和带宽。尽管为了兼容性,YUM 仍然存在,但 DNF 才是「RPM 系」系统的未来。

2.3 Pacman:适用于 Arch Linux 系

Pacman 是 Arch Linux 及其流行分支(如 Manjaro 和 EndeavourOS)的默认包管理器。它忠于 Arch 的哲学——快速、精简,并且专为滚动发布的系统而设计。在这类系统中,更新会源源不断地到来。

Pacman 安装的是预编译的二进制包,但许多 Arch 用户也会通过yayparu等辅助工具使用 Arch 用户软件仓库(AUR),来获取社区维护的软件。

Pacman 的语法短小精悍,最主要区别是使用-S而不是install命令。例如,要安装 neofetch 小工具,就运行:

sudo pacman -S neofetch

要更新整个系统,你可以运行:

sudo pacman -Syu

Pacman 没有添加额外的层或花哨功能,它只是快速而纯粹地完成工作(妥妥的工具人 🤖)。它还使用了.pkg.tar.zst压缩格式的软件包,下载和解压速度都快得惊人。

在与 AUR 结合使用时,Pacman 更是为用户多开了一扇通往海量软件库的大门,其中包含了在官方仓库中找不到的小众或前沿工具。

虽然像yayparu这样的工具在技术上不属于 Pacman 本身,但它们扩展了 Pacman 的功能,让它能够处理 AUR 软件包,让你几乎可以获取任何存在于 Linux 世界的软件。

2.4 APT、DNF 和 Pacman 的体验差异

无论是 APT、DNF 还是 Pacman,所有 Linux 包管理器都承担着相同的基本职责——安装、更新和移除软件。但在日常的安装和升级操作中:

  • Pacman 依然是速度最快的之一,尤其是在 Arch 的滚动发布模型下,它使用的压缩包格式对速度和存储空间都十分有利。
  • DNF 在许多方面已经缩小了差距,它比旧版本更快、更高效。但在处理批量更新或复杂依赖关系时,总感觉要比 APT 稍「重」一些。
  • APT 则在可预测性和稳定性方面继续发光发热,它提供了一个很好的平衡:足够快、文档齐全,还有庞大的软件仓库作为后盾。

03. 其他 Linux 包管理器

Linux 的赛道远不止 APT、DNF 和 Pacman 这么简单,不同发行版也都在尝试使用自己的包管理工具,每一种还都有自己独道的优势和特点。以下是你可能会遇到的一些选手:

3.1 Zypper:适用于 SUSE

Zypper 是 openSUSE 的默认包管理器,也适用于 SUSE Linux Enterprise。它和 DNF 一样,使用了 RPM 软件包,但自带了一些额外功能。

Zypper 命令与其他主流发行版一样简单直观。「模式」功能能帮你一次性安装「整组软件」,例如,要搭建一个完整的 Web 服务器环境,你可以运行:

zypper install -t pattern web-server

借助内置的 Btrfs 快照功能,它还可以在出问题时轻松回滚系统变更。

3.2 APK:适用于 Alpine Linux

Alpine Linux 以轻量化而闻名于世,尤其是在 Docker 🐳 容器领域。它的包管理器也反映了这一点——APK 小巧、快速且简单,安装、更新和移除命令都极为精简。例如,要添加任何软件包,你可以使用:

apk add <软件包名称>

如果你正在使用容器、嵌入式系统,或任何对体积有严格要求的场景,APK 是一个天然的选择。

3.3 Portage:适用于 Gentoo

Portage 是 Gentoo 基于源码的包管理器。它不安装预编译的二进制文件,而是获取源代码并在你的机器上进行编译,专为硬件进行优化。

  • 在使用emerge命令来安装软件包时,可以通过 USE 标志来微调构建选项。这种方式极其灵活,但非常耗时。编译一个像 KDE 这样的大型桌面环境可能需要数小时,非常要命 💀。
  • Portage 并不适合所有人,但如果你追求对系统的绝对控制和量身定制的性能,它将无可匹敌。

3.4 XBPS、Nix 和 Guix

其他 Linux 包管理器还包括 Void Linux 的 XBPS(X Binary Package System)、NixOS 的 Nix,以及 GNU Guix

  • XBPS 是一款高效、轻量级的包管理器,同时支持二进制和源码构建。
  • Nix 将软件包视为隔离且不可变的,因此同一程序的不同版本可以并存。如果出现问题,你可以轻松回滚,就像在对整个操作系统使用版本控制。这种设计使得 NixOS 以其可复现性和可靠性而闻名。
  • 受到 Nix 的启发,Guix 基于相同的概念构建,但完全用Scheme语言实现。它强调自由、透明和可复现性。与 Nix 一样,它支持回滚、用户独立环境和声明式系统管理。

那么,哪个包管理器才是最好的呢?我的答案是:发行版自带的默认 Linux 包管理器!每个包管理器都是发行版理念的投射,它们都是帮你完成工作最强大、优秀和可靠的工具。

赞(0)
分享到

评论 抢沙发