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

如何查询NixOS系统全局安装的软件包及验证配置生效情况?

查询NixOS系统全局安装包及验证配置生效的方法

嘿,这个问题我之前也纠结过,给你整理几个实用的操作方法:

一、查询系统全局安装的软件包

和用户级包用nix-env -q不同,系统全局的包存在系统专属的profile里,用下面的命令就能查看:

  • 查看当前激活的系统全局包列表:

    nix-env -q --profile /nix/var/nix/profiles/system
    

    这个命令会列出所有通过environment.systemPackages配置并生效的包,以及系统运行依赖的其他底层包。

  • 查看历史系统世代的包列表:
    先通过nixos-rebuild list-generations查看所有系统世代的编号(比如输出里的2024-05-20 10:30:01 567),再用世代号查询对应版本的包:

    nix-env -q --profile /nix/var/nix/profiles/system-567-link
    

二、验证environment.systemPackages配置是否已生效

如果不确定添加包后有没有执行nixos-rebuild switch,可以用这几种方法确认:

方法1:对比配置文件和当前系统的包列表

先输出configuration.nix里你手动配置的systemPackages:

nix-instantiate --eval -E 'with import <nixpkgs> {}; lib.attrNames config.environment.systemPackages' -I nixos-config=/etc/nixos/configuration.nix

这个命令会直接列出你在配置里添加的包名,然后和前面nix-env -q --profile /nix/var/nix/profiles/system的输出对比,看新增的包是否已经出现在全局列表里。

方法2:检查系统配置是否为最新版本

用nixos-rebuild的 dry-run 模式,它会模拟执行switch并告诉你是否需要更新:

nixos-rebuild switch --dry-run

如果输出显示building Nix...之后没有任何变更提示,或者出现类似no change的内容,说明当前系统已经是配置文件对应的版本,你的包已经生效了。

方法3:对比系统路径哈希

当前激活的系统路径是/run/current-system,你可以先构建配置文件对应的系统路径:

nix-build /etc/nixos/configuration.nix

然后查看构建结果的路径(比如/nix/store/abc123-nixos-system-xxx),再对比readlink /run/current-system的输出,如果两者一致,说明配置已经生效。

内容的提问来源于stack exchange,提问作者illabout

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:05:22