Fedora 44 里的 dnf 就是 dnf5
Fedora 44 上的 dnf 命令是 dnf5。可以这样确认:
dnf --version
我在 Fedora 44 的容器里看到的输出是 dnf5 version 5.4.3.0。本文的命令和输出都是在这个容器里跑出来的,架构是 aarch64。系统版本号用这条查:
rpm -E %fedora
输出 44 就是 Fedora 44。主配置文件是 /etc/dnf/dnf.conf,仓库定义放在 /etc/yum.repos.d/。哪些仓库处于启用状态,看这条的输出:
dnf repolist
我的容器里默认启用的是 fedora、fedora-cisco-openh264 和 updates,updates-testing 没有启用。你的机器上以自己的输出为准。
装机后的第三方仓库、驱动一类配置,本站的另一篇文章已经讲过,这里不重复,只讲装好之后日常怎么管软件,以及出了问题怎么退回去。
装、搜、查
安装要 sudo,搜索和查询不用:
sudo dnf install htop
dnf search htop
dnf info htop
dnf search 的结果会标出匹配的字段。Matched fields: name (exact) 是名字完全一致的包,Matched fields: name 是名字里带这个词的包,搜 htop 时后者会带出 pcp-htop。dnf info 会给出 Name、Version、Release、Architecture、Installed size、Source 这些字段。
软件组用 dnf group list 看,列出 ID、Name 和是否已安装,比如 office(Office/Productivity)、kde-education、kde-media。
日常升级:
sudo dnf upgrade
几个常用选项,都能在 dnf upgrade --help 里查到:
--minimal:只升级到能修复 bugfix、enhancement、security、newpackage 类公告的最低版本。--allowerasing:允许删掉已安装的包来化解冲突。执行前先读事务摘要,确认要删的包你用不到。--skip-unavailable:跳过不可用的包。--from-repo=REPO_ID:只从指定仓库选包。
事务历史和回滚
dnf5 把每次安装、升级、删除记成一条事务:
dnf history list
列表里有事务 ID、当时的命令行、时间和改动数。我在容器里跑了一次 dnf -y install htop,它被记成一条事务,改动 2 项:htop 和依赖的 hwloc-libs。详情用:
dnf history info 3
会看到事务状态、使用的 Releasever,以及 Packages altered 里每个包的动作、原因和来源仓库。htop 的原因是 User,hwloc-libs 是 Dependency。
撤销一次操作用 undo:
sudo dnf history undo 3
我实际跑过:它把 htop 和 hwloc-libs 一起删了,系统回到安装前的样子。history 的子命令还有这几个:
redo:重复指定事务的动作。rollback:撤销指定事务之后做过的所有事务。注意范围比undo大。store:帮助里标着 experimental,不要在生产环境依赖它。
清理和重启检查
清掉不再被其他包依赖的包:
sudo dnf autoremove
它带 --offline 选项,把事务存起来,留到重启时再执行,原理和下面的系统升级一样。
升级了库之后,正在运行的进程用的还是旧库。needs-restarting 帮你找出这些进程和服务:
dnf needs-restarting
-s、--services:列出在依赖被更新之前就已经启动的 systemd 服务。-p、--processes:列出在依赖被更新之前就已经启动的进程。-e、--exclude-services:和--processes一起用,排除由 systemd 服务管理的进程。-r、--reboothint:在 dnf5 里没有效果,只是为了兼容 DNF 4 保留的。DNF 4 里needs-restarting -r的功能,就是现在dnf5 needs-restarting的行为。
离线升级到新的大版本
DNF 4 时代要先装 dnf-plugin-system-upgrade 插件。在 Fedora 44 里,system-upgrade 已经内置在 DNF5 里,不用再装。离线升级的流程是三条命令:
sudo dnf upgrade --refresh
sudo dnf system-upgrade download --releasever=<VERSION>
sudo dnf system-upgrade reboot
第一条先把当前版本升到最新并刷新元数据。第二条下载升级到目标版本需要的所有内容,--releasever 后面填目标版本的数字。第三条准备好离线事务并重启,系统在重启后的启动阶段完成升级。
system-upgrade 还有三个辅助子命令:
status:显示当前离线事务的状态。没有的话,输出是No offline transaction is stored.log:显示过去离线事务的日志。clean:清除已存储的离线事务和缓存的软件包。它会删掉已经下载的内容,执行前确认这次下载不需要保留。
大版本升级动手前,请对照 Fedora 官方的离线升级文档确认前提条件和注意事项。 上面的命令和子命令列表来自在 Fedora 44 容器里看到的帮助输出,没有引用官方文档的原文。
出错时怎么退回去
一次安装或升级之后觉得不对,先看历史找到那条事务的 ID,再 undo:
dnf history list
dnf history info <事务ID>
sudo dnf history undo <事务ID>
history info 能让你在撤销之前,看清楚这条事务动过哪些包。
--allowerasing 之后发现删多了,同样可以用 undo 撤回那条事务。想退回到更早的某个状态,用 rollback,它会撤销指定事务之后的所有事务,所以动手前先用 dnf history list 看清楚它会波及哪些记录。


