Daimon's Blog
主页 归档 关于 RSS 探针 常用工具
主页
归档
关于
RSS
探针
常用工具

Linux 包管理器横评:apt / dnf / pacman / nix / flatpak / snap / appimage

daimon daimon 2026-04-23 #Linux#包管理器#apt#dnf#pacman#nix

刚切到 Linux 的人,第一波困惑几乎都来自包管理器:为什么 Debian 用 apt、Fedora 用 dnf、Arch 用 pacman,又为什么会冒出来 snap / flatpak / appimage 这种横向工具?再加上 nix、brew 这两个不属于任何发行版的体系——很容易陷入「到底该装哪个?」的选择麻痹。

这篇把它们的关系、定位、优劣一次梳理清楚。

一、关系图谱:先把”前端 / 底层”分清楚#

Linux 包管理生态分三层。底层工具负责真正把一个包文件解开、复制文件、跑脚本;前端工具负责仓库、依赖、升级;横向工具则不依赖任何发行版的体系,自成一派。

graph LR subgraph 传统发行版体系 A1[dpkg
底层] --> A2[apt / aptitude
前端] B1[rpm
底层] --> B2[dnf / yum
前端] C1[libalpm
底层] --> C2[pacman
前端] C2 --> C3[yay / paru
AUR helper] end subgraph 横向独立体系 D1[snap] D2[flatpak] D3[nix] D4[Homebrew] D5[AppImage] end

关键观察:apt / dnf / pacman 三者本质上都只是”前端”,真正决定你装得到新软件的,是发行版的仓库策略,而不是命令本身。

举个例子,apt 在 Debian Stable 上稳但旧,在 Ubuntu + PPA 上就能装到挺新的版本;dnf 在 Fedora 上很激进,在 RHEL 上反而偏保守。所以下面这种话基本都是误解:

误解实际情况
”apt 装的软件太旧”Debian Stable 仓库本身就偏旧,换 Ubuntu / Debian Testing 就能很新
”dnf 比 apt 新”dnf 在 Fedora 上新,在 RHEL 上同样保守
”Arch 因为用 pacman 所以软件多”真正多的是 AUR 社区仓库,pacman 只是入口

二、Arch 体系单独说一下#

Arch 的设计有点特殊,初学者经常分不清 pacman / yay / paru / AUR 的关系:

graph BT AUR[AUR
用户社区仓库
提供 PKGBUILD 构建脚本] YAY[yay / paru
AUR helper] PAC[pacman
官方包管理器
只管官方仓库] AUR --> YAY YAY --> PAC
  • pacman:Arch 自带,只管官方仓库,不碰 AUR。

  • AUR(Arch User Repository):用户社区维护,里面是 PKGBUILD 构建脚本,不是二进制仓库。安装流程是 下载 PKGBUILD → 本地编译 → 用 pacman 安装。

  • yay / paru:AUR helper,本质上是 pacman 的封装,能自动跑 PKGBUILD、解依赖、调 pacman 完成安装。两者功能相近:

    工具语言特点
    yayGo出现早、用户多
    paruRust更现代、依赖冲突提示更清晰

三、横向独立体系:snap / flatpak / nix / brew / AppImage#

这五个跟发行版无关,它们的共同思路是**“自带依赖,跨发行版分发”**:

工具主打关键机制
snap通用应用分发单文件 squashfs 镜像,自带依赖,由 snapd 管理
flatpakLinux 桌面应用共享 runtime + sandbox,Flathub 是主仓库
nix可复现环境函数式包管理,多版本并存,generation + GC
Homebrew跨平台开发工具用户态前缀(macOS/Linux 通用)
AppImage便携分发一个文件就是一个应用,挂载即跑

提示:AppImage 严格说不算包管理器,它只是一种应用打包格式——没有仓库、没有依赖管理,纯粹”下载即跑”。

四、十几个工具一张大表#

下面这张表把所有维度横在一起,看完基本不再纠结:

工具依赖处理仓库更新覆盖度安装体积适用范围删除干净适合场景
dpkg低,手工为主不适用不适用小Debian/Ubuntu 系中(需 purge)手工装 .deb、底层排障
apt高看 Debian/Ubuntu 分支大小Debian 系较好(autoremove + purge)通用系统包管理
aptitude很高,交互式同 apt同 apt小Debian 系较好复杂依赖冲突
rpm低到中不适用不适用小RPM 系中手工装 .rpm
yum中到高新系统等同 dnf大小老 RHEL/CentOS较好维护老系统
dnf高Fedora 快、RHEL 稳大小Fedora/RHEL/Rocky较好现代 RPM 主力
pacman高,简洁直接很快(rolling)官方中等小Arch 系较好(-Rns 关键)Arch 官方包
yay高(官方 + AUR)很快很大中偏大Arch 系较好官方 + AUR 一把梭
paru高(官方 + AUR)很快很大中偏大Arch 系较好同上,交互更现代
nix很高(思路独特)取决于 channel/flake很大中偏大(可 GC)Linux + macOS理论上很干净可复现环境、多版本并存
snap高(自带依赖)较快、自动刷新中到大偏大各 Linux(需 snapd)较好(可能留 snapshot)桌面/服务端通用分发
flatpak高(runtime + sandbox)较快桌面很强中偏大(runtime 共享)各 Linux较好(--unused 清 runtime)Linux 桌面应用
Homebrew高较快CLI/开发强中macOS + Linux较好(在自己 prefix)跨平台开发工具
AppImage应用自带看上游取决于作者偏大各 Linux 桌面删文件即可(配置可能残留)便携、免安装

五、按需求选工具#

光看表还是抽象,按你实际想做什么来反查:

5.1 装的软件想新一点#

  • 最快:Arch 官方仓库 + AUR、Fedora、Nix unstable
  • 中等偏快:Homebrew、Flatpak/Flathub
  • 稳但旧:Debian Stable、RHEL

5.2 找冷门软件 / 社区包#

  • AUR、Nixpkgs 几乎无敌
  • 桌面 GUI 应用:Flatpak、Snap、AppImage 都很方便
  • 系统级基础包:apt / dnf / pacman 原生仓库依然最稳

5.3 在意磁盘占用#

1
原生包(apt/dnf/pacman) < flatpak(runtime 可共享) < nix(多代但可 GC) < snap / AppImage(强调自带依赖)

5.4 想”装完能干净删除”#

工具干净度注意点
AppImage极高删文件即可;~/.config 下配置文件可能残留
nix高必须懂 generation 和 nix-collect-garbage
flatpak高记得 flatpak uninstall --unused 清 runtime
snap中删除后可能保留 snapshot
apt / dnf / pacman中orphan 依赖、配置文件要手动处理

六、几条实用经验#

最后给几条我自己踩过坑得来的判断:

  1. 服务器 / 命令行用原生包管理器(apt / dnf / pacman),别用 snap、flatpak——它们在 server 场景下没有任何优势,反而占资源。
  2. 桌面应用优先 Flatpak,比 Snap 启动快、隔离做得好;Snap 在 Ubuntu 上推得过猛,很多人反感。
  3. 想要”开发环境可复现”,无脑选 Nix——但学习曲线确实陡,不是周末两小时能拿下的。
  4. AUR / AppImage 装的东西,自己心里有数:AUR 是社区脚本,AppImage 是上游随便打包,安全性都不如发行版官方仓库,敏感场景慎用。
  5. 同一台机器尽量不要混用多套包管理器(除非真的有必要),混用最后排查问题非常痛苦。

理解到这里,再去看任何”Linux 该用什么发行版”的争论,你都能直接跳过 90% 的口水仗——你买的不是包管理器,你买的是发行版背后的仓库策略 + 社区。

systemd 服务管理与日志查看实战
mihomo 裸核部署完全指南:Linux / Windows 双平台 + Web 面板
本博客所有文章除特别声明外,均遵循 CC BY-NC-SA 4.0 协议,转载请注明出处。
博客框架 Astro & Fuwari
冀ICP备20260167号
1
一、关系图谱:先把”前端 / 底层”分清楚
2
二、Arch 体系单独说一下
3
三、横向独立体系:snap / flatpak / nix / brew / AppImage
4
四、十几个工具一张大表
5
五、按需求选工具
5.1 装的软件想新一点
5.2 找冷门软件 / 社区包
5.3 在意磁盘占用
5.4 想”装完能干净删除”
6
六、几条实用经验