刚接触 Fedora 的时候,我其实挺慌的。以前用 Windows,装软件就是双击 exe,用 Ubuntu,习惯了 apt 敲敲回车。突然切换到 Fedora,看着满屏的终端命令,心里咯噔一下:这玩意儿比 apt 复杂吗?会不会把系统搞坏?
别担心,作为 Fedora 的“真爱粉”,我得告诉你:DNF 其实是目前体验最好的包管理器之一,只要你掌握了它的脾气,它比 apt 还聪明、还快。
今天这篇指南,我不给你背单词,咱们直接上手,从最基础的“怎么装软件”到“怎么救回崩掉的系统”,像老朋友聊天一样,把 Fedora 的软件管理彻底捋清楚。
一、为什么是 DNF?(别被名字骗了)
首先,你得知道你在用啥。Fedora 继承自 Red Hat 系,包格式是 .rpm。
早期的 yum 命令已经被 DNF(Dandified YUM)取代了。DNF 是新一代的包管理器,核心优势就三个词:快、准、稳。
- 快:多线程下载,去重依赖,算得快。
- 准:依赖解析极其精准,很少出现“装了A导致B不能用”的尴尬。
- 稳:Fedora 对 DNF 的维护力度很大,它支持模块化、支持事务回滚(这点救命用)。
在 Fedora 里,你几乎只需要记住一个命令:dnf。不管你是装软件、删软件、还是更新系统,它都能搞定。
二、安装软件:不仅仅是 dnf install
新手最容易犯的错误就是只知道 sudo dnf install xxx。其实,DNF 的世界比这丰富得多。
1. 基础安装与搜索
在 Fedora 上装软件,搜索永远是第一步。别瞎猜包名,先搜一下。
# 搜索包含 "firefox" 的软件包
dnf search firefox
# 更精确的搜索,只看名称匹配
dnf search --name firefox
看到喜欢的软件后,安装非常简单:
# 安装单个软件
sudo dnf install firefox
# 安装多个软件,用空格隔开
sudo dnf install gimp firefox vlc
# 注意:sudo 是必须的!因为你要写入系统目录 /usr/
这里有个小技巧:如果你不确定某个包到底是干啥的,可以用 dnf info 包名 看看描述。
2. 为什么你总在提 RPM Fusion?
这是 Fedora 新手最大的坑。Fedora 崇尚自由软件,所以默认仓库里没有一些受版权限制的软件,比如:
- 多媒体编解码器(MP3, H.264, AAC等)
- 商业字体(Arial, Times New Roman)
- Steam 游戏
- NVIDIA 专有驱动
- VLC 播放器(默认仓库里可能没有,或者有但版本旧)
你需要启用 RPM Fusion。 这是一步到位的操作,建议你在装完 Fedora 第一件事就是跑这个:
# 启用 RPM Fusion Free 和 Non-Free 仓库
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
跑完这一行,你的软件世界瞬间打开。之后再装 VLC 或者编码库,直接 dnf install vlc 就行,不用再折腾了。
3. Flatpak:现代 Fedora 的新宠
Fedora 现在非常推崇 Flatpak。你可能要问:这和 DNF 装的不一样吗?
- DNF 装的软件:依赖系统库。好处是和系统集成度高,性能好;坏处是如果系统更新太猛,可能偶尔出现依赖冲突(虽然 DNF 已经优化得很好了)。
- Flatpak 装的软件:自带依赖,沙盒运行。好处是永远不破坏系统,版本通常是最新的,卸载极其干净;坏处是启动稍微慢一丁点,体积稍大。
对于新手,我强烈建议常用应用优先用 Flatpak,尤其是像 Spotify、Discord、Slack 这种经常更新且依赖复杂的软件。
# Fedora 默认已经集成了 Flatpak,直接用
# 安装 Discord
flatpak install flathub com.discordapp.Discord
# 查看已安装的 Flatpak 应用
flatpak list
怎么切换? 简单说:
- 系统级工具、开发者工具、内核相关 → 用
dnf - 日常 GUI 应用(聊天、音乐、视频、游戏) → 用
flatpak
三、更新系统:保持 Fedora 鲜活
Fedora 以“新”著称,半年一个大版本,中间还会有许多前沿技术更新。所以,勤更新是 Fedora 用户的日常。
1. 日常全量更新
# 预下载更新内容,检查依赖
sudo dnf upgrade --refresh
# 或者更直接的方式(Fedora 38+ 推荐)
sudo dnf upgrade
为什么要加 --refresh?
DNF 默认会缓存元数据。加上 --refresh 会强制从服务器重新拉取最新的包列表,避免因为缓存过时导致更新失败或漏装。养成这个习惯,能避开 90% 的更新问题。
2. 安全更新优先
如果你只是想要安全补丁,不想大动干戈升级所有软件:
sudo dnf update --security
3. 大版本升级
Fedora 一年出两个版本(3月、9月)。当你从 Fedora 38 升到 39 时,别慌,官方有工具。
# 确保当前系统是最新的
sudo dnf upgrade --refresh
# 安装 dnf-plugin-system-upgrade
sudo dnf install dnf-plugin-system-upgrade
# 开始升级流程(这会把目标版本的包都下载下来)
sudo dnf system-upgrade download --releasever=39
# 下载完成后,重启进入升级模式
sudo dnf system-upgrade reboot
你会看到屏幕黑掉,然后进出一个蓝色的进度条界面,那就是升级过程。耐心等它跑完,别强制断电!
四、卸载与清理:像删除文件一样简单
1. 删除软件
# 删除软件,但不删除配置
sudo dnf remove firefox
# 删除软件,同时删除它留下的孤儿依赖(不再被其他软件使用的依赖)
sudo dnf autoremove
autoremove 是什么?
这就好比装修完房子,搬走了家具(软件),但剩下的钉子、木板(依赖库)还扔在那。autoremove 就是帮你把这些没人用的“建筑垃圾”清走。建议装完新软件或删软件后,顺手跑一次。
2. 清理 Flatpak
Flatpak 装在用户目录或 /var/lib/flatpak,卸载后可以清理不再使用的运行时:
flatpak uninstall --unused
3. 清理 DNF 缓存
DNF 会把下载的 .rpm 包缓存在 /var/cache/dnf。时间长了会占好几个 G。
# 查看缓存大小
dnf makecache
# 清理所有缓存(包括旧的 rpm 包)
sudo dnf clean all
五、进阶技巧:让 DNF 像个专家一样思考
1. 只看依赖,不装软件(Dry Run)
有时候你想看看装这个软件会顺便拉来一堆啥,但又怕冲突:
sudo dnf install --assumeno firefox
--assumeno 表示“假设我对所有提示都回答 No”。你会看到 DNF 列出所有要安装的包,但什么都不装。这是学习依赖链的最好方法。
2. 历史回溯与回滚(救命神技)
这是 DNF 相比 apt 最牛逼的功能之一。
如果你今天装了一堆东西,结果系统崩了、桌面起不来了、或者某个关键库被破换了,你可以回到昨天的状态。
# 查看最近的操作历史
dnf history list
# 输出示例:
# ID | Command line | Date and time | Action | Adjustments
# 12 | install vim | 2023-10-24 10:00 | Install | 1
# 11 | upgrade | 2023-10-24 09:00 | Upgrade | 45
# 假设 ID 11 之后系统就崩了,你想回退
sudo dnf history rollback 11
执行后,DNF 会把所有在操作 12 中安装的包删除,把操作 11 中升级的包降级回去。注意:这不会删除你在操作 12 之后手动新建的文件,它只动软件包。
3. 安装本地 RPM 包
有时候你从网上下了一个 .rpm 文件,不想配仓库,直接装:
sudo dnf localinstall ./software-1.0.rpm
# 或者
sudo dnf install ./software-1.0.rpm
DNF 会自动解析这个包的依赖,如果依赖在仓库里有,它会帮你一起下载装上。比老式的 rpm -ivh 智能太多,因为 rpm -ivh 遇到依赖缺失会直接报错退出,让你很头疼。
4. 查找文件属于哪个包
你在终端里看到一个奇怪的文件 /usr/bin/some_tool,想知道它是哪个软件提供的?
dnf provides /usr/bin/some_tool
或者反过来,想知道某个命令在哪个包里:
dnf whatprovides */bin/git
六、常见问题排查:当 DNF 不听话时
即使是最稳定的系统,偶尔也会出岔子。以下是 Fedora 用户最常遇到的坑及解法。
问题 1:依赖冲突(Dependency Conflict)
现象:dnf install xxx 报错,说无法安装,因为会移除关键包。
原因:通常是因为你混用了不同来源的仓库,或者手动安装了一个不兼容的包。
解法:
- 检查第三方仓库:确认你启用了太多不必要的仓库。
- 使用
--best和--allowerasing:sudo dnf install --best --allowerasing 包名--best告诉 DNF 尽最大努力找到最优解;--allowerasing允许为了解决依赖而移除冲突包(慎用,看清楚要删啥再按 Y)。 - 恢复默认:如果乱搞了一通,试试:
这会把系统所有包强制恢复到官方仓库的版本,相当于“重置”软件状态,通常能救回被破坏的依赖链。sudo dnf distro-sync
问题 2:D-Bus 总线错误
现象:安装软件时卡在 D-Bus 相关错误,或者根本装不上。
原因:通常和 systemd 或 D-Bus 服务没启动好有关,常见于虚拟机或容器环境。
解法:
重启 D-Bus 服务,或者检查 dbus-broker 是否正常运行:
sudo systemctl restart dbus-broker
问题 3:仓库元数据过期
现象:明明仓库里有这个软件,但 dnf search 搜不到,或者提示版本不对。
解法: 强制刷新元数据:
sudo dnf clean all
sudo dnf makecache
问题 4:DNF 卡住不动
现象:运行 dnf 命令时,进度条永远停在某个包上。
原因:网络问题,或者某个镜像源太慢。
解法:
- 换源:Fedora 默认源在某些地区(如国内)可能很慢。可以切换到国内镜像源,比如清华源、中科大源。
- 编辑
/etc/yum.repos.d/fedora.repo和fedora-updates.repo,把metalink或mirrorlist换成镜像站的地址。
- 编辑
- 检查锁文件:
(如果怀疑有残留锁)sudo rm /var/lib/rpm/.rpm.lock sudo rm /var/lib/dnf/metadata/tmp/*
问题 5:RPM 数据库损坏
现象:任何 dnf 或 rpm 命令都报错,说无法打开 database。
解法:重建 RPM 数据库(危险操作,建议先备份):
sudo rpm --rebuilddb
如果还不行,可能需要从 Live ISO 启动,挂载系统盘,然后手动修复。
七、给新手的“黄金法则”
最后,作为过来人,送你几条保命建议,背下来:
- 别混用包管理器:不要在 Fedora 上用
pip install --user乱装 Python 库来替代系统库,也不要随便make install。尽量走dnf或flatpak。系统包管理器负责系统,用户空间负责用户。 - 更新前看一眼:如果是大版本更新,先读一下 Fedora 官方的公告,看看有没有已知的破坏性变更。
- 善用
dnf history:每次做完重大改动(装一堆东西、升级大版本)后,记一下当前的历史 ID,以便随时回滚。 - 配置仓库要谨慎:随便加一个
.repo文件进去,可能会引入不稳定的包,导致依赖混乱。除非你非常清楚自己在干嘛,否则别乱加第三方仓库(像 Google Chrome、Zoom 这种大厂的自有仓库例外)。 - 报错先搜:Fedora 社区很活跃,99% 的错误别人都踩过。把错误信息复制到搜索引擎,加上 “Fedora” 关键词,通常能找到答案。
结语:从恐惧到掌控
回想一下,刚开始学 DNF 的时候,那些黑底白字的报错确实让人头大。但当你第一次用 dnf history rollback 救回自己搞崩的系统,或者用 flatpak 一键装好一个隔离的 Steam 时,你会感觉到一种掌控感。
Linux 的包管理不是冷冰冰的命令,它是一种逻辑:依赖、事务、回滚、隔离。理解了这些,Fedora 就不再是一个“可能随时坏掉”的系统,而是一个你可以随意定制、随时复原的实验田。
现在,打开你的终端,试试 sudo dnf update --refresh 吧。祝你玩得开心!
