---
author: Sagar Sharma
category: 技术
comments_data: []
count:
  commentnum: 0
  favtimes: 0
  likes: 0
  sharetimes: 0
  viewnum: 4026
date: '2023-03-21 09:09:24'
editorchoice: false
excerpt: NixOS 中的打包系统是它最强大的地方。
fromurl: https://itsfoss.com/nixos-package-management/
id: 15645
islctt: true
largepic: /images/p/202303/21/090913cnq91ob2hn9b2qbh.jpg
permalink: /article-15645-1.html
pic: /images/p/202303/21/090913cnq91ob2hn9b2qbh.jpg.thumb.jpg
related:
- displayorder: 0
  raid: 15663
reviewer: wxy
selector: lkxed
summary: NixOS 中的打包系统是它最强大的地方。
tags:
- NixOS
thumb: false
title: 'NixOS 系列 #3：在 NixOS 中安装和删除软件包'
titlepic: true
translator: wxy
updated: '2023-03-21 09:09:24'
---

![](/images/p/202303/21/090913cnq91ob2hn9b2qbh.jpg)


NixOS 中的打包系统是它最强大的地方。Nix 软件包管理器使用的语法与 `apt`、`dnf` 和其他软件包管理器大不相同。


这也是 [人们应该尝试使用 NixOS 的原因之一](/article-15606-1.html)。


在本指南中，我将分享两种在 NixOS 上安装和删除软件包的方法：


* 使用 Nix 软件包管理器
* 使用 `configuration.nix` 配置文件



> 
> ⚠️ 使用 Nix 软件包管理器，你只能安装软件包，而不能安装 OpenSSH 或 Plex 服务器等服务。对于服务的安装，你必须使用 Nix 配置文件。
> 
> 
> 


要安装任何软件包，必须知道它的确切名称，为此，我将从如何在 NixOS 中搜索软件包开始。


### 搜索软件包


要寻找软件包，你可以使用它的 [网页搜索](https://search.nixos.org/packages?ref=its-foss)。


你可以使用如下步骤：


* 在搜索栏中输入软件包的名称
* 选择适当的软件包（从给出的描述中决定）
* 点击 “nix-env” 标签页
* 复制 NixOS 命令（第一条）


例如，如果我想要 `librewolf` 包，我将执行以下操作：


![使用 Nix 软件包管理器的网络搜索寻找软件包](/images/p/202303/21/090925pbojm11fqodvf8ob.png)


你也可以通过终端做同样的事情。


要使用终端搜索软件包，你可以按照给定的命令语法进行：



```
nix-env -qaP --description [软件包名称]

```

例如，在这里，我搜索了 `librewolf`：


![使用终端搜索 NixOS 中的软件包](/images/p/202303/21/090925ed5v09vrutk95gxg.png)


你必须复制输出的第一行，因为那是你需要安装的软件包的名称。


在这里它是 `nixos.librewolf`。


是的，它听起来可能没有像使用 [APT](https://itsfoss.com/apt-command-guide/) 或 DNF 时软件包名字那么方便。但是，我认为这并不是大问题。


一些妥协或许会换来一些好处？


### 在 NixOS 中安装一个软件包


要安装一个软件包，你所要做的就是使用以下命令语法：



```
nix-env -iA [软件包名称]

```

而且，如果你使用网络搜索来寻找软件包，你就已经有了安装所需的确切命令。


所以，假设我想安装 `librewolf'，我将使用以下命令：



```
nix-env -iA nixos.librewolf

```

如果你想进行全系统的安装（让每个用户都能使用这个包），用 `sudo` 执行安装命令：



```
sudo nix-env -iA nixos.librewolf

```

就是这样！你将很快安装好你喜欢的软件包。


### 在 NixOS 中卸载一个软件包


要删除一个软件包，你可以参考下面的命令语法：



```
nix-env --uninstall [软件包名称]

```

因此，如果我必须删除 `librewolf` 包，我必须使用以下命令：



```
nix-env --uninstall librewolf

```

如果你仔细注意，我使用了 `librewolf` 而不是 `nixos.librewolf` 来安装。


这意味着你在删除软件包时要跳过 `nixos` 部分，这使事情变得简单而快速。


### 在 NixOS 中安装服务


正如我前面提到的，你不能使用 Nix 软件包管理器来安装像 OpenSSH、Plex 服务器、[Flatpak](https://itsfoss.com/what-is-flatpak/) 等服务。


从搜索服务到安装过程，都与你上面看到的不同。


所以让我先说说如何 **搜索服务**。


* 要搜索服务，请前往 Nix 软件包搜索 [网页](https://search.nixos.org/packages?ref=its-foss)
* 选择 “<ruby> NixOS 选项 <rt>  NixOS options </rt></ruby>”（页面顶部菜单行的第三个选项）
* 输入你要找的服务的名称
* 复制服务的名称


例如，在这里，我正在搜索 OpenSSH 服务。


![搜索 NixOS 中的 OpenSSH 服务](/images/p/202303/21/090925hki9gdkdiwad7aiz.png)


一旦你找到了这个名字，用下面的命令打开 `configuration.nix` 文件：



```
sudo nano /etc/nixos/configuration.nix

```

并在行末添加服务的名称（在 `}` 之前），如下：



```
[service_name] = true;

```

由于 **我想启用 OpenSSH**，我将添加以下内容：



```
services.openssh.enable = true;

```

![在 NixOS 上启用 OpenSSH](/images/p/202303/21/090926grv6io9frqc1681i.png)


一旦你在配置文件中添加了服务，[保存修改并退出 Nano](https://linuxhandbook.com/nano-save-exit/?ref=its-foss) 文本编辑器。


要启用该服务，请重建配置文件，并使用以下命令切换到所做的更改：



```
sudo nixos-rebuild switch

```

这就行了，你已经启用了该服务。


### 从 NixOS 卸载服务


要卸载一个服务，你所要做的就是在 `configuration.nix` 文件中删除或注释该服务的一行。


因此，首先，用以下命令打开配置文件：



```
sudo nano /etc/nixos/configuration.nix

```

寻找服务，并删除这一行或用 `#` 注释掉：


![从 NixOS 删除服务](/images/p/202303/21/090927isbibbsbub6i6wqp.png)


通过添加注释 `#`，我忽略了 OpenSSH 服务的加载，因为我不再需要它在我的系统上。


保存修改并退出文本编辑器。


最后，重建配置文件并进行切换：



```
sudo nixos-rebuild switch

```

### 使用 Nix 配置文件安装软件包


配置文件可以让你 **方便地一次性管理软件包**。


要使用 Nix 配置文件安装软件包，你必须在配置文件中输入软件包的名称、重建，然后切换到配置文件，就可以了。


首先，打开 `configuration.nix` 文件。



```
sudo nano /etc/nixos/configuration.nix

```

如果你想 **为一个特定的登录用户安装软件包**，将软件包的名称添加到用户的配置文件中。


用户配置文件看起来像这样：



```
users.users.sagar = {
    isNormalUser = true;
    description = "Sagar";
    extraGroups = [ "networkmanager" "wheel" ];
    packages = with pkgs; [
      firefox
    ];
  };

```

当然，它将显示你的用户名而不是 `sagar`。


你应该使用如下语法来添加软件包的名称：



```
packages = with pkgs; [
  软件包名称
  ]; 

```

所以我们假设我也想安装 `Thunderbird`，那么我将添加它的名字，如下所示：


![使用 Nix 配置文件在 NixOS 中安装一个包](/images/p/202303/21/090927x0z6dmkij406688k.png)


你必须在方括号内添加所有的软件包名称，不要用逗号。它必须像截图中描述的那样一个软件一个新的行。


但是如果你想在整个系统中安装这个包，那么你必须在 `environment.systemPackages` 下添加包的名字，比如：



```
environment.systemPackages = with pkgs; [
  软件包名称
];

```

![使用 Nix 配置文件在 NixOS 中全系统安装软件包](/images/p/202303/21/090927txnmz2rex2pehn1x.png)


一旦你完成了在系统配置文件或用户配置文件，甚至两者中添加所需软件包的名称，你将需要按照同样的命令来完成安装：



```
sudo nixos-rebuild switch

```

这样就可以了！


### 使用 Nix 配置文件删除软件包


要删除软件包，你所要做的就是按照给定的简单步骤进行：


* 打开 Nix 配置文件
* 删除或注释掉软件包的名称
* 重新构建配置并进行切换


所以，让我们从第一步开始（打开配置文件）：



```
sudo nano /etc/nixos/configuration.nix

```

接下来，注释掉用户配置文件或系统配置文件中的包的名称：


![在 NixOS 上使用 Nix 配置文件删除包](/images/p/202303/21/090928tnbnm7qmppiibiz7.png)


保存更改并退出配置文件。


最后，重建配置文件，并做一个切换来删除包：



```
sudo nixos-rebuild switch

```

这是这样！



> 
> ? 目前，还没有官方的 GUI 工具来帮助你安装/删除软件包。你可能会发现一些由社区开发的项目，如 [nix-gui](https://github.com/nix-gui/nix-gui?ref=its-foss) 和 [nix42b](https://gitlab.com/juliendehos/nix42b?ref=its-foss)，但它们不再被维护或仅仅处于早期开发阶段。
> 
> 
> 


### 接下来...


我希望你喜欢阅读 NixOS 系列，就像我写它一样。


在下一篇中，我将强调一些在你安装 NixOS 后需要马上做的重要事情。


如果你认为我遗漏了什么或有其他建议，请在评论中告诉我。




---


via: <https://itsfoss.com/nixos-package-management/>


作者：[Sagar Sharma](https://itsfoss.com/author/sagar/) 选题：[lkxed](https://github.com/lkxed/) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出