说实话,刚切换到 Fedora 的时候,我对着满屏的命令行有点发懵。以前的 Ubuntu 有 apt,Windows 有 .exe 安装包,到了这儿,得用 dnf?还有 rpm?以及后来出现的 snap 和 flatpak?这几个玩意儿混在一起,确实容易让人晕头转向。
但只要你理顺了它们的逻辑,Fedora 其实是目前对开发者最友好的发行版之一。它不仅稳定,而且软件源永远是最新的。今天我就把自己踩过的坑、总结出的经验,掰开了揉碎了讲给你听。不管你是想装个 VS Code,还是配置一个完整的 Python 数据科学环境,这篇指南都能帮到你。
为什么是 DNF?理解 Fedora 的灵魂
在 Fedora 里,DNF(Dandified YUM)是你最亲密的伙伴。它是 RPM 软件包的下一代管理器,取代了老旧的 YUM。
很多新手会问:“为什么不直接用 rpm 命令安装?”
打个比方:rpm 就像是手动搬运砖头盖房子,你得自己解决每一块砖之间的匹配问题(依赖关系)。如果 A 依赖 B,B 依赖 C,你得一个个去下载、安装,一旦漏了哪个,整个程序就跑不起来。
而 DNF 就像一个智能的建筑监理。你告诉它:“我要装软件 A”,它会立刻检查:“哦,A 需要 B 和 C,而且 B 需要 D”。然后它会一次性从仓库下载好所有需要的东西,自动解决依赖,最后帮你安装好。这就是为什么我们永远推荐使用 dnf,除非你在写脚本处理非常底层的系统维护。
日常必用的 DNF 命令实操
别去背那些复杂的参数,日常开发中,你只需要掌握以下几类场景。
1. 搜索与查找软件
当你不知道某个软件包的名字该怎么拼,或者想找一个类似功能的工具时,用 search。
# 搜索包含 "python" 关键字的包
sudo dnf search python
# 更精准一点,只搜索名称中包含 python 的包
sudo dnf list available | grep python
实操案例:假设你想装一个文本编辑器,但你只知道它是绿色的、很轻量。你可以搜索:
sudo dnf search gedit
或者搜索编辑器相关的组:
sudo dnf group list | grep editor
2. 安装软件包
这是最常用的动作。语法非常直观:
# 安装单个软件
sudo dnf install code # 比如安装 VS Code 的社区版镜像或者官方包(如果源里有)
# 安装多个软件,用空格隔开
sudo dnf install git curl wget vim
# 如果不确定包名,可以先搜索,确认后再安装
sudo dnf install <package-name>
注意:安装前 DNF 会列出将要安装的依赖包大小和数量,按 y 确认即可。
3. 系统更新——Fedora 的精髓
Fedora 的更新策略是“滚动式稳定”,意味着你既能享受新技术,又不会像 Arch Linux 那样容易坏。
# 检查有哪些更新可用(不实际执行)
sudo dnf check-update
# 更新所有系统包(推荐每天或每周执行一次)
sudo dnf upgrade --refresh
# 只更新安全相关的包
sudo dnf update --security
--refresh 参数很重要,它会强制 DNF 重新同步仓库元数据,确保你拿到的是最新的包列表。不然你可能会遇到“明明源里有了,但我这儿还是旧版”的尴尬情况。
4. 移除与清理
# 卸载软件及其不需要的依赖
sudo dnf remove <package-name>
# 清理下载的缓存包,释放磁盘空间(建议每隔几个月做一次)
sudo dnf clean all
# 删除不再被任何软件依赖的孤立包
sudo dnf autoremove
深入一层:RPM 命令何时使用?
虽然日常推荐 DNF,但有时候你必须用 rpm。比如在离线环境,或者你要安装一个从网上下载下来的 .rpm 文件时。
# 安装本地 rpm 文件
sudo rpm -ivh package.rpm
# 升级本地 rpm 文件
sudo rpm -Uvh package.rpm
# 查看已安装的包信息
rpm -qi <package-name>
# 查看包包含了哪些文件
rpm -ql <package-name>
重要提醒:rpm 不会自动解决依赖。如果你用 rpm 装一个软件,它依赖的其他库没装,你会看到一堆错误。这时候,还是乖乖回到 dnf install ./package.rpm,DNF 也能安装本地文件,并且自动解决依赖。
当 DNF 搞不定时:Flatpak 与 Snap 的抉择
Fedora 官方推荐 Flatpak 作为 DNF 的补充。为什么?因为 DNF 里的软件版本往往比官网旧(虽然对 Fedora 来说已经算新了),而 Flatpak 和 Snap 能提供最新版本的桌面应用。
Flatpak:Fedora 的原生伙伴
Fedora 的桌面版甚至默认预装了 Flatpak,并且集成了 Flathub 仓库。
# 启用 Flathub 仓库(如果还没启用)
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# 安装一个应用,比如 GIMP
flatpak install flathub org.gimp.GIMP
# 列出已安装的 Flatpak 应用
flatpak list
# 更新所有 Flatpak 应用
flatpak update
优点:沙盒机制好,权限可控,与 GNOME 桌面集成度高,不依赖宿主机库版本。
Snap:Canonical 的通用方案
虽然 Fedora 不像 Ubuntu 那样深度绑定 Snap,但完全可以使用。有些软件(比如 Slack、Chrome、Postman)在 Snap 形式下更新更快。
# Fedora 默认没有 snapd,需要先安装
sudo dnf install snapd
# 启用 snap 的 systemd socket
sudo ln -s /var/lib/snapd/snap /snap
# 重新登录或重启,使 PATH 生效,然后就可以用了
sudo snap install slack --classic
对比建议:
- 优先选 Flatpak:尤其是图形界面应用,体验更原生。
- Snap 适合:需要最新闭源商业软件(如 Slack、Discord、Chrome),或者该软件只有 Snap 版本时。
开发者专属:一键配置常用开发环境
光会装软件不够,开发者需要的是环境。下面这几个例子,帮你快速搞定 Python、Node.js 和 Docker。
1. Python 开发环境
Fedora 自带的 Python 版本通常是稳定的,但开发时你可能需要特定版本或多版本管理。
# 安装基础 Python 工具
sudo dnf install python3 python3-pip python3-devel
# 使用 venv 创建虚拟环境(推荐,比 pipenv/poetry 更底层可控)
python3 -m venv myproject_env
source myproject_env/bin/activate
# 安装项目依赖
pip install requests pandas numpy
# 退出环境
deactivate
如果你需要 Python 3.11 或 3.12 的最新版,而 Fedora 仓库里还是 3.10,可以用 COPR 仓库(Fedora 的用户自定义仓库):
# 启用 Remi 仓库获取最新版 Python
sudo dnf install dnf-plugins-core
sudo dnf config-manager --set-enabled copr:rhughes:python312
sudo dnf install python3.12 python3.12-pip
2. Node.js 与 npm
前端开发者注意,Fedora 仓库里的 Node.js 版本可能滞后。
# 方法一:使用官方 NodeSource 仓库(推荐)
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo dnf install -y nodejs
# 验证版本
node -v
npm -v
# 方法二:使用 nvm(Node Version Manager)进行多版本管理
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install --lts
nvm use node
3. Docker 容器化开发
很多现代应用依赖 Docker。
# 安装 Docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户加入 docker 组,避免每次 sudo
sudo usermod -aG docker $USER
# 重新登录生效,然后测试
docker run --rm hello-world
4. 数据库工具
# 安装 PostgreSQL
sudo dnf install postgresql-server postgresql-contrib
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql
# 安装 MySQL/MariaDB (Fedora 默认是 MariaDB)
sudo dnf install mariadb-server mariadb
sudo systemctl enable --now mariadb
# 安装 MongoDB (需要启用第三方源,这里演示 DNF 直接安装若可用)
sudo dnf install mongodb-server mongodb
系统维护与故障排查
即使再小心,也可能遇到问题。以下是几个高频问题的解法。
问题 1:依赖冲突(Dependency Hell)
现象:dnf install 报错,提示多个包版本冲突。
解法:
# 查看具体冲突
sudo dnf install <package> --best --allowerasing
# 或者,查看哪些包导致了冲突
sudo dnf repoquery --requires <package> | xargs sudo dnf repoquery --whatrequires
通常,--best 参数会让 DNF 尝试找到最优的解决方案,--allowerasing 允许移除冲突的旧包(谨慎使用)。
问题 2:仓库元数据损坏
现象:更新时出现“Metadata file does not match checksum”等错误。
解法:
# 强制清理所有缓存
sudo dnf clean all
sudo rm -rf /var/cache/dnf
# 重新生成元数据
sudo dnf makecache
问题 3:Fedora 版本升级
Fedora 每年发布两个新版本(3月和9月),大版本升级很重要。
# 安装 dnf 系统升级插件
sudo dnf install dnf-plugin-system-upgrade
# 下载新版本的安装包(以升级到 Fedora 40 为例)
sudo dnf system-upgrade download --releasever=40
# 下载完成后,重启进入升级模式
sudo dnf system-upgrade reboot
注意:升级前务必备份重要数据!虽然 Fedora 的升级机制很稳健,但任何大版本跳跃都有风险。
实战演练:搭建一个完整的前后端开发环境
假设你刚拿到一台新的 Fedora 工作站,想要快速投入开发。下面是我推荐的一键脚本思路(你可以复制保存为 setup.sh):
#!/bin/bash
echo "开始配置 Fedora 开发环境..."
# 1. 系统更新
sudo dnf upgrade --refresh -y
# 2. 安装基础开发工具
sudo dnf install git curl wget vim htop neofetch -y
# 3. 安装开发常用语言
sudo dnf install python3 python3-pip nodejs npm gcc gcc-c++ make -y
# 4. 配置 Docker
sudo dnf install docker-ce docker-compose-plugin -y
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# 5. 安装 Flatpak 应用(可选,根据喜好)
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.gnome.gitlab -y
flatpak install flathub com.slack.Slack -y
# 6. 清理缓存
sudo dnf clean all
echo "环境配置完成!请重新登录以激活 docker 组权限。"
运行前请检查脚本内容,确保符合你的需求。执行 chmod +x setup.sh && ./setup.sh 即可。
结语:让你的 Fedora 越用越顺
Fedora 的软件管理哲学是:核心系统用 DNF 保证稳定,桌面应用用 Flatpak/Snap 保证新鲜。
不要害怕命令行。刚开始你可能需要查手册,但多用几次后,dnf install、dnf update、flatpak install 这些命令会成为你的肌肉记忆。你会发现,这种透明、可控的感觉,是在图形化软件中心里永远体验不到的。
如果你遇到什么具体的安装问题,欢迎随时回来查阅,或者在评论区告诉我你卡在哪一步,我会尽力帮你梳理。毕竟,让每位开发者都能在 Fedora 上顺畅工作,才是我们折腾这些配置的意义所在。
