dnf history 功能可查安装、升级、删除的完整事务记录并支持按事务 id 回滚,需先定位 id 再用 undo 安全反向执行;查看需 root 权限,支持列表、过滤、详情查询及模拟执行,回滚成功依赖旧包是否在缓存或仓库中。

DNF 的 history 功能能查到每次安装、升级、删除操作的完整记录,并支持按事务回滚,但不是按时间点一键还原——关键在于先定位事务 ID,再安全执行 undo。
查看历史操作记录
所有命令需 root 权限(加 sudo):
- dnf history:列出全部事务,含 ID、时间、操作类型(Install/Update/Erase)、变更包数量
- dnf history list --reverse:倒序显示,最新事务排第一,适合快速找最近几次变更
- dnf history list | grep "2026-09-24":按日期过滤,例如查昨天的操作
- dnf history info 87:查看事务 ID 87 的详情,包括具体变更了哪些包、版本变化、起止时间
- dnf history packages list --installed | tail -10:快速看最近安装或更新的包名和版本
安全回滚指定事务
undo 是反向执行该次事务中的操作(如卸载新装包、降级已升级包、重装被删包),不是快照还原:
- 先用 dnf history undo --assumeno 87 模拟执行,只显示将做什么,不改动系统
- 确认无 kernel、systemd、openssl 等关键组件被意外移除或降级后,再运行 dnf history undo 87
- 若要撤销多个连续事务(如 87→86→85),从编号最大的开始 undo(先 undo 87),避免状态错乱
- 每次 undo 后建议运行 dnf repoquery --unsatisfied 检查依赖是否破损;如有,可用 dnf distro-sync 尝试修复
实用补充技巧
- dnf history redo 87:重做已被撤销的事务(比如误 undo 后恢复)
- dnf history undo last:直接回滚最近一次操作,适合快速补救
- 事务 ID 不代表时间顺序编号——一次 dnf update 可能只生成一个事务,但涵盖几十个包;手动装三个包也只记为一次事务
- 回滚能否成功,取决于旧版本包是否仍在本地缓存或远程仓库中;若仓库已下架旧版,undo 会失败
替代方案与注意事项
当 history undo 不适用时(如事务已被清理、依赖严重偏离、或需跨多日整体还原):
- Btrfs 文件系统用户可优先用 snapper rollback 或桌面用户用 Timeshift 恢复系统快照
- 单包精确降级可用:dnf downgrade package-name(要求旧版仍在仓库)
- 清理 DNF 缓存(dnf clean all)不影响事务日志,但可能让 undo 失败——旧包若不在缓存也不在仓库,就无法降级











