首页/系统/信创系统运维速查/dnf 事务历史与回滚
命令与包管理65 条

dnf 事务历史与回滚

每次安装/升级/卸载都是可查的事务:dnf history 列出、info 看明细、undo/rollback 回滚,是误操作后的优先处理手段。

信创系统运维速查系统更新于 2026-10-13

事务历史是什么

dnf 把每一次安装、升级、卸载记录成一条带编号的事务,包含时间、操作者与涉及的全部包。误操作后不用手工找旧版本,直接按事务回滚即可:undo 撤销指定的一次事务,rollback 撤销到某个事务之后的状态。这是 RPM 系发行版上成本最低的抢救手段。

基本信息

列出事务dnf history list
查看明细dnf history info <事务号>
撤销单次dnf history undo <事务号>
撤销到某点dnf history rollback <事务号>
权限要求root 或 sudo

典型使用场景

  • 误装或误卸软件包后快速恢复
  • 升级后服务异常,回退到升级前的包版本
  • 排查变更时间线:确认谁在什么时候动了哪些包
  • 批量变更前记录事务号,出问题时精准回退
  • 验证升级方案:先在测试机装一遍再回滚确认可行性

查看与回滚

查看与回滚
dnf history list | head -20            # 列出最近的事务与编号
dnf history info 25                    # 查看第 25 次事务的明细
dnf history userinstalled | head       # 查看用户显式安装的包
dnf history undo 25 -y                 # 撤销第 25 次事务
dnf history rollback 20 -y             # 回退到第 20 次事务之后的状态
dnf history list | head -3             # 回滚本身也会产生新事务,便于核对

回滚前后的核对

回滚前后的核对
rpm -q nginx                           # 记录当前版本
dnf history info 25 | grep -E 'Install|Upgrade|Erase'   # 看事务动作类型
dnf history undo 25 -y                 # 执行撤销
rpm -q nginx                           # 复核版本是否回到预期
dnf check                              # 检查依赖完整性

两条命令的区别

命令作用范围适用场景
undo <编号>只撤销指定那一次事务单次误装误卸
rollback <编号>撤销该编号之后的所有事务连续多次变更后整体回退
history info只读查看明细确认事务内容再决定
history list列出事务索引定位要处理的事务号
回滚只处理包状态,不会恢复被新版本改写的配置文件;业务配置要另行备份还原,回滚后还需核对服务配置与数据格式是否兼容。

回滚注意事项

  • 先看事务明细确认涉及哪些包再执行
  • 记录回滚本身产生的新事务号便于二次核对
  • 回滚后重启相关服务,让新版本真正生效
  • 配置文件单独备份与还原,不依赖回滚

易错点

  • 回滚依赖源里仍有旧版本包:仓库已清理旧版本时回滚会失败,需要从归档源或本地留存的 rpm 包手工安装
  • 跨多个事务的变更一次性跳回:跳着回滚容易产生依赖冲突,按时间倒序逐个处理更稳
  • 回滚后忘了重启服务:包已回退但进程仍加载着旧的内存镜像,需要重启或重载才能生效
  • 把 rollback 当成单次撤销:它会把该事务之后的全部变更一起撤销,执行前先看清楚影响范围
  • 回滚后不核对服务状态:包已回退但进程仍加载旧内存镜像,需要重启并验证功能是否恢复

数据来源与参考

  • dnf history 手册
  • openEuler 包管理文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌