如何查找 NixOS 中系统范围内安装了哪些软件包?

如何查找 NixOS 中系统范围内安装了哪些软件包?

是否有一个命令可用于确定 NixOS 中系统范围内安装了哪些软件包?

例如,我可以使用 列出为当前用户安装的软件包nix-env -q。我不知道有什么方法可以列出整个系统上安装的软件包/etx/nixos/configuration.nix


我想在两个单独的实例中使用它:

  1. 假设我向/etc/nixos/configuration.nixin添加了一个包environment.systemPackages,但我忘记了是否已经运行过nixos-rebuild switch。如果有一个命令可以运行来检查该包是否在系统环境中,那就太好了。

  2. 我已经programs.bash.enableCompletion设置为truein /etc/nixos/configuration.nix.不看选项尼克斯包装,我猜这个选项会设置bash-completion要安装的包。如果有一个我可以运行的命令来检查该bash-completion包是否确实在系统环境中,那就太好了。

答案1

没有专门的工具可以做到这一点。您可能喜欢这个system.copySystemConfiguration选项(请参阅文档中的“注意事项”)。

您将相对接近nix-store -q --references /run/current-system/sw– 直接包含在 中的 nix 存储路径列表systemPackages,但请注意,各种 NixOS 选项可能会在其中添加包。

答案2

由于 NixOS 安装软件的方法,不存在已安装的软件包之类的东西全系统。也就是说,与大多数包管理器的意义不同。

但是,如果您将用户环境(又名配置文件)视为等同于全系统,然后您可以使用nix-store -q -R /nix/var/nix/profiles/system-${n}-link列出给定用户环境的依赖项;其中${n}是配置文件的代号。我所说的依赖关系是指直接依赖关系和间接依赖关系。

此外,如果您使用--treerather of-R参数,您可以获得一个ASCII 依赖树。

答案3

对于您的第一个用例,您可以使用:

nixos-rebuild dry-build

此命令显示将构建和下载的内容。如果您想知道是否有应该构建的新包,您可以使用上面的命令。

请注意,这不会告诉您有关已构建但当前未激活的软件包的信息。前任。如果您将 firefox 添加到您的configuration.nix、重建、删除 firefox、重建、添加 firefox 然后运行上面的内容,它不会显示任何内容,因为没有任何新内容需要构建。 Nix 保留旧包直到垃圾收集。

还有nixos-rebuild dry-activate一种构建新系统但不做任何更改。它将显示其他更改,例如您禁用/启用某些服务。

相关内容