Fedora 的包管理其实比大多数人想象的要简单得多,尤其是当你习惯了它之后,那种“一行命令搞定一切”的快感,是 Windows 上装个软件还要去浏览器搜官网、点下一步、选安装路径的体验完全比不了的。我是 Agnes,今天想和你聊聊 Fedora 里那些让你既能当极客又能当小白的神器。
谁在幕后工作:DNF 是主角
在 Fedora 里,你绝大多数时候只会和一个命令打交道——dnf。它是 Fedora 的默认包管理器,全称是 Dandified YUM,你可以把它理解为 YUM 的现代化升级版。它的核心任务很简单:帮你从 Fedora 的软件仓库里下载、安装、更新和删除软件,同时自动搞定那些复杂的依赖关系。
你知道最爽的是什么吗?在 Windows 上,如果你装个 Photoshop,发现还需要装个 .NET Framework 或者 VC++ 运行库,你可能会崩溃。但在 Fedora 里,你只需要告诉 DNF “我要 Photoshop”,它会自己跑去仓库里检查:“哦,用户要装这个,但好像缺三个依赖包,我去把他们一起抓回来。”整个过程全自动,你只需要喝口水的功夫。
不过,Fedora 其实是个“多面手”平台。虽然 DNF 是常驻主角,但你还会遇到另外两位“特邀嘉宾”:rpm 和 flatpak。它们各自有不同的使命,下面我给你掰扯掰扯。
DNF:经典包管理的日常用法
1. 更新系统是头等大事
在 Fedora 的世界里,保持系统更新不仅是为了拿到新功能,更是为了安全。Fedora 的更新节奏很快(大概每半年一个大版本,中间穿插大量安全补丁),所以养成定期更新的习惯很重要。
打开终端,输入这个命令:
sudo dnf upgrade --refresh
这条命令看起来简单,但其实包含了好几个关键点。sudo 是为了让你拥有管理员权限,因为修改系统软件是需要特权的。upgrade 是核心动作,它会检查所有已安装的包,看看有没有新版本。而 --refresh 这个参数很多人会忽略,但它其实非常有用——它会强制 DNF 在开始前先刷新本地缓存,确保你拿到的是仓库里最新的元数据,而不是前几天缓存下来的旧信息。
如果你只想更新某个特定的软件,比如你想把 Firefox 升到最新版,但又不想顺便更新其他几百个包,可以这样写:
sudo dnf upgrade firefox
DNF 会很贴心地告诉你:“好嘞,我要把 Firefox 升级,同时还得帮你把这个浏览器依赖的几个库也顺手升级一下,你确定吗?”然后你敲个 y 就完事了。
2. 安装软件的各种姿势
Fedora 的软件库(称为“仓库”或 “repositories”)非常庞大。你可以用 search 来翻找你需要的东西。比如你想找个视频播放器,可以这样搜:
dnf search video player
DNF 会列出一堆相关的包,你可以根据描述挑选。找到心仪的软件后,安装命令非常直观:
sudo dnf install vlc
这里有个细节我想提醒你:DNF 的安装包名称(包名)有时候和软件的官方名字不太一样。比如你想装的软件叫“GIMP”,但包名也是 gimp;但有些软件可能叫“Steam”,包名就是 steam。如果不确定,先 dnf search 一下是个好习惯,别瞎猜包名。
3. 删除和清理
当你决定不再使用某个软件时,卸载也很简单:
sudo dnf remove vlc
注意,这里用的是 remove 而不是 delete 或 uninstall。如果你担心卸载后残留一些配置文件,可以用 autoremove 配合使用,它会帮你把那些因为不再需要而被标记为“孤儿”的依赖包也一起清理掉:
sudo dnf autoremove
这条命令通常在你卸载大型软件后运行,能帮你腾出不少空间。
4. 查看软件信息
有时候你想知道某个软件包里到底装了什么文件,或者它依赖了什么,可以用 info 命令:
dnf info gimp
输出会告诉你这个包的版本、大小、来源仓库,以及它依赖和提供哪些功能。这对于判断“我到底该不该装这个包”很有帮助。
RPM:底层的手术刀
虽然日常使用中 DNF 已经足够强大,但你偶尔还是会碰到 .rpm 文件。这是 Red Hat Package Manager 的缩写,是 Fedora 及其家族(包括 RHEL、CentOS)的原生包格式。
DNF 其实是 RPM 的上层封装,它帮你处理了依赖关系和仓库同步这些麻烦事。但如果你手里已经有一个下载好的 RPM 文件,或者你需要绕过仓库直接安装某个特定的包,就得用到 rpm 命令本身。
手动安装 RPM 文件
假设你从某个软件官网下载了一个 .rpm 包,想直接安装:
sudo rpm -ivh software-package-1.0.rpm
这里的参数各有含义:-i 表示 install(安装),-v 表示 verbose(显示详细信息),-h 表示 hash(显示安装进度条)。
但是,我必须非常严肃地提醒你:直接用 rpm 安装的风险比 DNF 高得多。因为 rpm 不会自动解决依赖问题。如果这个软件还需要 A、B、C 三个库,而你系统里没有,rpm 可能会报错或者直接装上了却跑不起来。所以,除非你非常清楚自己在做什么,或者这个软件官方就推荐你用 RPM 方式安装,否则优先用 DNF。
查询已安装的 RPM 包
有时候你想知道“我的系统里有没有装这个软件”,可以用:
rpm -qa | grep firefox
-qa 是列出所有已安装的包,grep 是用来过滤关键词的。这条命令会返回所有名字里带 “firefox” 的包。
验证 RPM 包的完整性
如果你下载了一个 RPM 文件,担心它被篡改了,可以校验它的签名:
rpm -K software-package-1.0.rpm
这会检查包的数字签名,确保它确实来自可信的开发者,且没有被修改过。
Flatpak:容器化的现代应用
到这里,你可能已经有点懵了:怎么这么多包管理方式?别急,这就是 Fedora 的魅力所在——灵活。
Flatpak 是近年来越来越火的一种应用分发方式。你可以把它理解为 Linux 界的“沙盒应用”。传统 RPM 包是装在整个系统层面的,所有软件共享一套系统库。而 Flatpak 应用是打包了它自己运行所需的一切依赖,然后在一个隔离的环境里运行。
为什么 Fedora 要用 Flatpak?
想象一下,你有个很老的软件,它依赖一个十年前的古老库。如果你用 RPM 安装它,可能会把你系统里的其他软件搞崩溃。但 Flatpak 不会,因为它把那个古老的库也打包在一起了,在自己的小盒子里运行,完全不干扰你的系统。
Fedora 在 GNOME Software(图形化的应用商店)里已经默认集成了 Flatpak 支持,而且官方仓库甚至为一些热门应用(比如 Spotify、Discord)提供了 Flatpak 版本。
如何管理 Flatpak?
首先,你需要确保系统里安装了 Flatpak 工具:
sudo dnf install flatpak
然后,通常还要加一个 Flathub 仓库,这是最大的 Flatpak 应用中心:
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
安装一个 Flatpak 应用很简单:
flatpak install flathub com.spotify.Client
这里的 com.spotify.Client 是应用的 ID,你可以在 Flathub 网站上找到它。
管理已安装的 Flatpak 应用:
# 列出所有已安装的 Flatpak 应用
flatpak list
# 更新所有 Flatpak 应用
flatpak update
# 卸载一个 Flatpak 应用
flatpak uninstall com.spotify.Client
实战场景:如何解决实际遇到的问题
理论说了一堆,下面我给你几个在 Fedora 日常使用中真正会碰到的场景,看看这些工具是怎么配合工作的。
场景一:我想装个开发工具链
假设你是个程序员,想写 Python 代码。你可能需要 Python、pip,可能还需要一些开发头文件。
错误做法: 去官网下载 Python 源码,自己编译安装。这会搞乱你的系统路径,而且以后更新很麻烦。
正确做法: 直接用 DNF:
sudo dnf install python3 python3-pip
Fedora 会帮你把 Python 3.12(或者是当前版本)以及配套的 pip 工具一起装好,而且系统更新时会自动帮你升级到新版本。如果你还需要编译一些 C 扩展的 Python 库,可能还需要:
sudo dnf install gcc make python3-devel
这一行命令就把编译环境全套配齐了。
场景二:我想用最新版的 VS Code
VS Code 的官方 Linux 版本是通过 .rpm 分发的,但 VS Code 团队并不维护 Fedora 的官方仓库。这时候你有两个选择:
选择 A:手动下载 RPM
去微软官网下载 .rpm 文件,然后用 sudo rpm -ivh code-*.rpm 安装。缺点是你得手动检查更新,不能享受 DNF 的自动更新。
选择 B:用 Flatpak(推荐)
flatpak install flathub com.visualstudio.code
这样你不仅能用上最新版的 VS Code,还能通过 flatpak update 一键更新,而且它不会和系统库冲突。
场景三:我的系统变慢了,想清理缓存
DNF 和 Flatpak 都会在硬盘上缓存下载的包,时间长了会占不少空间。
清理 DNF 缓存:
sudo dnf clean all
这会删除所有下载的包文件和元数据缓存。如果你想更激进一点,可以删除所有的缓存:
sudo dnf clean all && sudo rm -rf /var/cache/dnf
清理 Flatpak 缓存:
flatpak uninstall --unused
这个命令会卸载那些不再被任何应用使用的旧运行时(runtime)和依赖,通常能腾出好几个 GB 的空间。
一些“老手才知道”的小技巧
1. 查看最近的历史操作
如果你不小心删错了包,或者想看看最近都装了些什么,可以用:
dnf history
它会列出一个操作历史表,包括时间、动作(install、remove、update)、涉及的包等。如果你后悔了,还可以用 dnf history undo <ID> 来回滚某次操作。这就像系统给你装了个“后悔药”。
2. 启用第三方仓库(谨慎使用)
Fedora 官方仓库的软件可能不是最新的,或者某些软件不在官方库里(比如一些专有软件)。这时候你可能会想到 RPM Fusion 这个第三方仓库。
启用 RPM Fusion 需要一点额外步骤,因为 Fedora 官方对专利和版权问题比较严格:
# 启用免费和非免费仓库
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
启用后,你就可以用 dnf install 安装一些之前找不到的软件了,比如 NVIDIA 显卡驱动、多媒体编解码器等。但请记住:第三方仓库的软件不受 Fedora 官方支持,出问题时要自己担着。
3. 查找文件属于哪个包
如果你发现系统里有个命令或文件,但不知道是哪个包提供的,可以用:
dnf provides /usr/bin/some-command
或者对于已安装的文件:
rpm -qf /etc/some-config-file
这在排查问题时非常有用。
总结:如何做出选择?
面对 DNF、RPM 和 Flatpak 三种方式,很多新手会困惑:到底该用哪个?
我给你一个简单的决策树:
你想装的软件在 Fedora 官方仓库里吗? 如果是,优先用
dnf install。这是最干净、最安全、最容易维护的方式。你想装的软件在 Flathub 上吗?或者官方推荐 Flatpak 版本? 比如 Spotify、Discord、VS Code 这类桌面应用,用 Flatpak 通常体验更好,隔离性强,更新及时。
你手里有个 .rpm 文件,且确认它很可信? 可以用
rpm安装,但要做好处理依赖问题的心理准备,或者先用dnf install ./package.rpm,让 DNF 帮你处理依赖。你需要特定的旧版本软件,且仓库里没有? 这时候可能需要去官网找源码编译,或者找第三方仓库,但这属于进阶操作了。
Fedora 的包管理系统之所以强大,是因为它给你提供了多种工具,让你可以根据具体情况选择最合适的方式。刚开始可能会觉得有点复杂,但只要你多用几次,就会发现其实逻辑很清晰。记住,sudo dnf upgrade --refresh 永远是你的好朋友,保持系统更新,少出麻烦。
