You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NixOS执行nix-env --rollback后,如何查看被移除的软件包?

如何查询Nix回滚后被移除的软件包?

问题背景

我测试了nix-env --rollback命令,发现它并不会修改/etc/nixos/configuration.nix的内容,但执行后有一个软件包被删除了。我想知道具体是哪个包被移除——原本可以在回滚前后执行nix-env -q对比结果,但我之前忘了这么做,现在需要一个可行的解决方案。

已尝试的操作

我尝试执行以下命令:

nix-env -iA nixos.nix-diff

nix-diff /nix/var/nix/profiles/system /nix/var/nix/profiles/system-$22-link

得到的报错信息如下:

  • /nix/var/nix/profiles/system:{out}
  • /nix/var/nix/profiles/system-2-link:{out}
    nix-diff: unknown-deriver: openBinaryFile: does not exist (No such file or directory)

可行解决方案

方法1:对比用户profile历史版本的包列表

用户环境的所有历史配置版本都存放在/nix/var/nix/profiles/per-user/你的用户名/目录下,每个版本对应一个profile-*-link符号链接。可以通过以下步骤对比版本差异:

  1. 列出所有历史版本链接:
ls -l /nix/var/nix/profiles/per-user/$(whoami)/
  1. 分别列出回滚前后两个版本的已安装包:
    假设回滚前的版本是profile-5-link,回滚后的版本是profile-4-link,执行:
nix-env -q --profile /nix/var/nix/profiles/per-user/$(whoami)/profile-5-link
nix-env -q --profile /nix/var/nix/profiles/per-user/$(whoami)/profile-4-link
  1. 使用diff命令直接对比两个输出结果,快速定位被移除的包:
diff <(nix-env -q --profile /nix/var/nix/profiles/per-user/$(whoami)/profile-5-link) <(nix-env -q --profile /nix/var/nix/profiles/per-user/$(whoami)/profile-4-link)

方法2:修复nix-diff的使用问题

之前的报错是因为路径或版本号不匹配导致的,调整后即可正常使用:

  1. 先确认目标环境的历史版本链接:
    如果是系统环境回滚,查看系统profile的历史:
ls -l /nix/var/nix/profiles/

如果是用户环境回滚,查看用户profile的历史:

ls -l /nix/var/nix/profiles/per-user/$(whoami)/
  1. 使用实际存在的链接路径执行nix-diff:
    比如系统环境下对比system-23-link和system-22-link:
nix-diff /nix/var/nix/profiles/system-23-link /nix/var/nix/profiles/system-22-link

用户环境下对比profile-5-link和profile-4-link:

nix-diff /nix/var/nix/profiles/per-user/$(whoami)/profile-5-link /nix/var/nix/profiles/per-user/$(whoami)/profile-4-link

内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:25:15