该详细的教程说明了如何使用Linux中的Nix Package Manager进行诸如安装,删除,更新和升级软件包之类的软件包管理操作。
我们将以简短的介绍开始本指南,然后是常用的Nix命令,其中包含示例。
目录
NIX是一款软件包管理器,可以使安装和管理软件在Linux和Unix系统上简单可靠。它解决了常见问题,例如软件冲突,并确保每个软件安装都是可预测且安全的。
使用Nix,您可以在计算机上具有不同版本的程序,而无需它们彼此干扰。这意味着您可以更新,添加或删除软件,而不必担心破坏任何内容。
Nix对其处理软件的处理方式很聪明。它可以跟踪每个程序需要运行的所有部分。这样,当您安装程序时,它不会弄乱另一个程序。如果新软件更新出现问题,NIX可以让您轻松地回到以前的样子。
NIX软件包管理器不仅适合个人用户,而且适合开发人员和管理服务器的人员。它通过确保所有人都使用相同的软件设置来帮助每个人在同一页面上。将软件从一台计算机移动到另一台计算机时,这会减少惊喜。
尼克斯(Nix)有大量的软件可供选择,并且这些软件都是由用户社区维护的。无论您是独自工作还是与团队一起工作,这都是管理软件的可靠选择。
有关NIX的更多详细信息,请参阅我们以前的指南:
确保您已经安装了NIX软件包管理器。如果您尚未安装NIX,请参阅下面给出的NIX安装指南。
设置NIX软件包管理器后,您可以开始使用它来立即安装和管理应用程序。
尼克斯有许多命令。软件包管理的主要命令是Nix-env 。此命令用于列出,安装,更新,回滚,删除,查询软件包。让我们查看一些命令。
提示:如果您还不知道,则不需要成为root或sudo用户就可以使用NIX进行所有软件包管理操作。
NIX频道在NIX软件包管理器生态系统中起着重要作用。
NIXPKGS存储库包含所有软件包,NIXOS模块和表达式。虽然可以直接从Nixpkgs的主分支直接安装软件包,但这种方法可能会冒险,因为在彻底测试之前,将提交合并到主机中。
通道代表Nixpkgs中最新的“验证” GIT委托。每个渠道都有自己对“验证”含义的定义。
验证新的Git提交时,相应的频道将更新。频道用户从二进制缓存的经过验证的提交和二进制软件包中受益。
用简单的单词来说明这一点, NIX通道只是一个指向一个包含一组Nix表达式和清单的地方。
有几个渠道,它们可以大致分为稳定且不稳定的渠道,以及大型和小型渠道:
稳定/不稳定:
大/小:
默认情况下,安装nix时,将自动添加nixpkgs频道。
订阅的频道列表存储在〜/.nix-enannels文件中。您可以通过查看其内容来验证它。
$ cat〜/.nix-nix通道 https://nixos.org/channels/nixpkgs-unstable <strong>nixpkgs</strong>
如您所见,NIX默认情况下添加了NixPKGS频道。
您也可以手动在系统中添加通道,如下所示。
$ nix-channel -add https://nixos.org/channels/nixos-23.11
官方频道在https://nixos.org/channels上列出。
订阅(添加)频道后,您应该更新频道列表,以获取最新的可用NIX表达式:使用命令:
$ nix-channel-更新
此命令将更新所有频道。如果要更新特定的频道,例如nixos-23.11,则命令是:
$ nix-channel-上升尼克斯23.11
要在标准输出上打印所有订阅渠道的名称和URL,请运行:
$ nix-channel-列表
样本输出:
<strong>nixpkgs</strong> https://nixos.org/channels/nixpkgs-unstable <strong>Nixos</strong> https://nixos.org/channels/nixos-23.11
如您所知,现在我添加了两个频道,即Nixpkgs-unstable和Nixos-23.11 。请注意,Nixpkgs和Nixos只是Nixpkgs- Unstable和Nixos-23.11的别名。
要删除订阅的通道,例如Nixos-23.11 ,只需运行:
$ nix-channel-remove nixos-23.11
删除频道后,使用命令更新频道列表:
$ nix-channel-更新
Nix-env --Query命令在NIX软件包管理器中提供有关软件包的信息。
目的:
Nix-env - 标准操作显示有关以下信息的信息:
它仅打印有关其符号名称匹配指定名称之一的派生的信息。
标志和选项:
可以使用Nix-env -Query命令的常见标志和选项是:
要查看订阅频道中可用软件包的列表,请运行:
$ nix-env - Query-可用
或不久:
$ nix -env -qa
在这里,选项-Q指示查询操作,-a表示所有可用的(即,可安装)软件包。
样本输出:
0AD-0.0.26 0AD-DATA-0.0.26 0Verkill-Unstable-2011-01-13 0x Unstable-2022-07-11 0xproto-1.603 0xtools-1.2.4 1om-1.0 1Password-8.10.27 1Password-8.10.28-21.Beta 1Password-cli-2.26.1 2048-Cli-Unstable-2019-12-10 2048-Cli-Unstable-2019-12-10 2048-ens-ensinal-Unstable-2022-06-13 20Kly-1.5.0 2BWM-0.3 2FA-1.2.0 3270font-3.0.1 389-DS-BASE-2.4.3 3dpong-0.5 3llo-1.3.1 3mux-1.1.0 3Proxy-0.9.4 4th-3.64.1 [...]
如果要查询特定软件包,则命令将是:
$ nix -env -qa firefox
输出:
firefox-115.9.1esr Firefox-124.0.1 Firefox-124.0.1 Firefox-124.0.1 Firefox-125.0b3 Firefox-125.0b3
您还可以使用以下命令搜索特定软件包。
$ nix -env -qap | Grep Python3-3
样本输出:
[...] nixpkgs.python312 python3-3.12.2 nixpkgs.python313 Python3-3.13.0a5 nixpkgs.python313full python3-3.13.0a5 nixpkgs.python39 python3-3.9.19 nixpkgs.python39full python3-3.9.19
您可以使用正则表达式查询/列表软件包。以下是正则表达式的一些示例。
铬
匹配包装名称铬和任何版本。
Chromium-123.0.6312.86
匹配包装名称铬和版本123.0.6312.86。
例子:
$ NIX-ENV -QA CHROMIUM-123.0.6312.86
gtk \\
匹配软件包名称GTK 。角色必须使用后斜线逃脱,以防止其解释为量词,并且必须依次与另一个后斜切一起逃脱后斜线,以确保外壳将其通过。
。\*
匹配任何软件包名称。这是大多数命令的默认值。
'。*拉链。*'
匹配包含字符串zip的任何软件包名称。注意点:'*zip*'不起作用,因为在正则表达式中,字符*被解释为量词。
'。*(Firefox | Chromium)。*'
匹配任何包含琴弦Firefox或Chromium的包装名称。
要列出所有已安装的软件包,只需运行:
$ nix -env -q
样本输出:
NIX-2.21.1
由于它是一个新的系统,因此我们的系统仅显示NIX软件包管理器。
也可以看到可用软件包的状态。查看以下示例。
$ NIX -ENV -QAS GCC
样本输出:
IPS GCC-13.2.0
在这里,“ i”表示已安装了指定的软件包,“ p”表示该软件包存在于我们的系统上,“ S”表示该软件包有所谓的替代品。
如果未安装GCC软件包,您会看到:
-PS GCC-13.2.0
在Nixos中,所有软件包将存储在Nix Store中,通常是目录/Nix /Store 。
要安装软件包,只需运行:
$ nix-env-安装GCC
或(不久),
$ nix -env -i gcc
上面的命令将安装最新的可用GCC软件包。
上述命令的样本输出将是:
安装“ GCC-13.2.0” 这3条路径将被获取(1.58 MIB下载,7.24 MIB打开包装): /nix/store/3cfxjb2nkjkfiv0dq54kkfy5ysjnfs3k-gcc-13.2.0-checksum /nix/store/4i3ml2pzzgjwas18w31zzhn9f41qyshy-gcc-13.2.0-info /NIX/STORE/SMQ6F1JZ9A5L6L5YJIS4S85MQ01XWW33-GCC-13.2.0-MAN 复制路径'/nix/store/4i3ml2pzzgjwas18w31zzhhn9f41qyshy-gcc-13.2.0-info'来自'https://cache.nixos.org'... 复制路径'/nix/store/SMQ6F1JZ9A5L6L5YJIS4S85MQ01XWW33-GCC-13.2.0-MAN'来自https://cache.nixos.org'... 复制路径'/nix/store/3cfxjb2nkjkfiv0dq54kkfy5ysjnfs3k-gcc-13.2.0-checksum'来自https://cache.nixos.org'... 建筑物'/nix/store/xx629d9kbbdnnsyf4ihzhlmalfz6nm3g-user-environment.drv'...
让我们检查是否安装了GCC是否使用命令:
$ gcc -v
样本输出:
使用内置规格。 collect_gcc = GCC collect_lto_wrapper =<strong><mark> /nix/store/RQGA421D43Q40BLRRGMIW820P01A4NBA-GCC-13.2.0</mark> /libexec/gcc/x86_64-inknown-linux-gnu/13.2.0/lto-wrapper 目标:x86_64-Inninnown-linux-gnu Configured with: ../gcc-13.2.0/configure --prefix=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gcc-13.2.0 --with-gmp-include=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gmp-6.3.0-dev/include --with-gmp-lib=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gmp-6.3.0/lib --with-mpfr-include=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-mpfr-4.2.1-dev/include --with-mpfr-lib=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-mpfr-4.2.1/lib --with-mpc=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-libmpc-1.3.1 --with-native-system-header-dir=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-glibc-2.38-44-dev/include --with-build-sysroot=/ --with-gxx-include-dir=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-gcc-13.2.0/include/c /13.2.0/ -program-program-prefix = - enable-lto - 可disable-libstdcxx-pch- without-included-getText - with-system-zlib--启动静态 - 可稳定 - 可启用语言= c,c,c,c-- disable-disable-multilib-- disable-multilib - enable-plugin-plugin-disable-libcc11-disable-disable-libcc11 --with-isl=/nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-isl-0.20 --disable-bootstrap --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=x86_64-unknown-linux-gnu 线程模型:POSIX 支持的LTO压缩算法:Zlib <strong>GCC版本13.2.0(GCC)</strong></strong>
正如您在上述输出中注意到的那样,GCC已在一个名为RQGA421D43Q40BLRGMIW820P01A4NBA-GCC-13.2.0 ufter /nix /store的子目录中。
在这里,我们将目录RQGA421D43Q40BLRRGMIW820P01A4NBA-GCC-13.2.0称为唯一标识符。该子目录保留了GCC软件包的所有必需依赖项和库。
如果安装了GCC的另一个版本,NIX将创建一个新的子目录,例如/nix/store/rfhfyuq..43d8jfuh-gcc-xxx ,并在该目录中安装GCC。这样,这两个版本的GCC就不会彼此冲突。
NIX软件包管理器的另一个值得注意的功能是,您可以在不安装系统上测试软件包。请参阅以下指南,以了解如何在不安装软件包的情况下测试软件包。
Nix-Shell允许您为每个项目创建自定义的开发环境,并配有所有必要的工具和库。它是NIX软件包管理器的一部分。
要了解如何创建可再现和孤立的开发环境,请参阅以下指南:
要将软件包升级到下一个可用版本,只需运行:
$ nix-env-升级vim
或者,只是:
$ nix -env -u vim
上面的命令仅在有“较新”版本时升级VIM软件包。
另外,您可以通过运行以下命令立即升级所有已安装的软件包:
$ nix -env -u
请注意,以下说明专门针对Nixos用户。
更新NIXOS频道
首先,更新您的频道,以确保您具有最新的软件包定义。您可以使用以下命令来执行此操作:
$ nix-channel-更新
此命令更新您要订阅的所有通道,包括包含系统的软件包和配置定义的NIXOS频道。
应用更新
频道更新后,您将更新应用于系统。这是通过使用频道的最新软件包重建系统配置来完成的。为此,运行:
$ sudo nixos-rebuild开关
Nixos-Rebuild Switch命令使用频道中的最新软件包,根据您的配置文件(/etc/nixos/configuration.nix)重建系统的配置。重建后,它立即切换到新配置。
其他提示:
请记住,由于声明性配置和NIX的可重复性,尼克斯的更新通常是平滑且经过良好测试的。始终确保您的系统配置文件是最新的,并且可以控制版本,以获得无缝的更新体验。
这是NIX软件包经理的绝妙功能。在我们要查看如何回滚软件包之前,让我们了解哪些配置文件,用户环境和一代。
在NIX中,配置文件,用户环境和世代是相关的概念,可以安全且可重复地进行管理和配置。
配置文件是针对特定目的或用户的软件包和配置的集合。配置文件允许多个用户可以进行自定义设置,而不会相互影响。您可以在不同的配置文件之间切换,从而有效地管理各种环境或一组应用程序。
配置文件有两种主要类型:
用户环境是在NIX商店中安装的一组特定的软件包及其依赖项(例如,/nix/store/3aw2pdyx2jfc...--user-env)。
每当您使用Nix-env安装,升级或删除软件包时,都会创建它。用户环境本质上是软件包本身,它存储在Nix Store中,并以唯一的加密哈希作为目录名称。
用户环境通过符号链接链接到用户配置文件,从而使不同的用户具有不同的配置而不会干扰。
一代是您在特定时间点的用户环境(您已安装的软件包集合)的快照。每当您使用Nix-env安装,升级或删除软件包时,就会创建新一代。
每个一代都以唯一的加密哈希名称(例如/nix/store/3aw2pdyx2jfc...-user-user-env)存储在/nix/store目录中。在/nix/var/nix/profiles(例如默认为2-链接,默认3链接)中有符号链接,指向这些生成目录。
几代人的关键优点是,它们允许您使用nix-env-rollback和nix-env-switch-switch-generation命令来轻松地回滚或在不同的软件包配置之间切换。
用简单的话说这一点:
这种方法促进了系统的可靠性,可重复性,以及在不冒险当前设置的情况下安全实验不同的包装配置的能力。
要查看可用的几代人的列表:
$ nix-env-列表生成
此命令列出了您当前个人资料的所有可用世代。输出将显示生成编号,NIX商店中的路径,并指示当前有活性的生成。
示例输出:
1 2024-04-01 15:06:49 2 2024-04-01 15:17:14 3 2024-04-01 15:56:46(当前)
您安装了一个软件包,但是它没有用或无法正常工作。您需要同一软件包的较低版本。你会怎么做?简单的。只需使用命令回滚至以前的工作版本:
$ nix-env-滚动
此命令将您当前的用户环境恢复为上一代。例如,如果您目前正在第三代并运行Nix-env-Rollback,则它将切换为2代。
我们可以使用命令在不同世代之间切换:
$ nix-env-开关生成<no></no>
此命令使您可以切换到特定的一代。例如,即使这不是上一代,nix-env -switch-env-generation 2也会将您的用户环境切换为2代。
总而言之,这些世代提供了一种管理和回滚软件包配置的方法。 - 列表生成向您展示了哪些世代可用,nix-env -rollback命令是一种撤消最后更改的方便方式, - 开关生成可以让您选择特定的一代。
这种一代管理方法通过允许您轻松恢复不良更改或测试新配置而不会影响当前设置来促进系统可靠性。
要卸下ininstalla软件包,运行:
$ nix -env -e gcc
上面的命令将从您的系统中卸载称为GCC的软件包。
您可以删除多个软件包,如下所示。
$ nix -env -e gcc vim
样本输出:
卸载“ VIM-9.1.0148' 卸载“ GCC-13.2.0” 建筑路径(S)'/nix/store/mxpikbq3l08379h8ik8mrj3fcw6mh6y4-user-environment' 在用户环境中创建了6个符号链接
在NIX中,当您使用Nix-env更新(-U)或删除(-e)程序时,系统实际上并未从NIX Store(即/nix/store/Directory)删除旧版本。相反,它为您的个人资料提供了新的设置,而无需链接到删除程序。换句话说,只有符号链接将从您的个人资料中删除。
但是,由于我们无法在没有磁盘空间的情况下不断添加新程序,因此Nixos可以清理名为垃圾收集的未使用程序。垃圾收集器摆脱了不再需要的程序或其版本(几代)的程序。
但是,如果您的设置的任何旧版本仍然需要一个程序,则不会将其删除。此功能对于允许您在需要时返回以前的设置至关重要。
为了帮助垃圾收集器完成工作,最好清除不再使用的旧版本。您可以做到这一点:
删除所有旧版本,除了您的个人资料中的当前版本:
$ nix-env-旧生成
删除您不再需要的特定版本,例如版本10、11和14:
$ nix-env-脱落生成10 11 14
删除超过30天的版本:
$ nix-env-降低生成30d
清理旧版本后,运行垃圾收集器以删除未使用的程序:
$ NIX商店-GC
您可以在实际运行之前检查垃圾收集器将删除哪些文件:
$ NIX商店-GC-Print Dead
并查看将保留哪些文件:
$ NIX商店-GC- Print-Live
还有一个方便的工具,用于清洁,nix-Collect-garbage,可以一次删除每个配置文件中的所有旧版本。将其与-d选项:
$ nix-Collect-garbage -d
该命令是通过摆脱旧版本然后运行垃圾收集器来清除不需要的程序来整理系统的简便方法。
示例输出:
寻找垃圾收集器根... 删除垃圾... 删除'/nix/store/s4jr4dc9gghldr3xza23rw0gm9kp21kl-nix-prefetch-scripts.drv' 删除'/nix/store/km2gyzlvs9vkrr52wxfyhinv4r52ksrj-nix-prefetch-bzr.drv' 删除'/nix/store/7MI73SDC1P349VMPB5NYXSRV8YK5HLY-BAZAAR-2.7.0.0.drv' [...] 删除'/nix/store/8CKMCS9HX1QM0YXDNV892VRVX49ZM1SQ-SETUP-HOK-2.0.SH'' 删除'/nix/store/垃圾' 删除未使用的链接... 注意:当前硬链接保存-0.00 MIB 1447年已删除的商店路径,12.65 MIB释放
这实际上将删除卸载的软件包。
您应该定期运行此命令,以摆脱系统中未使用的软件包。
这是NIX软件包管理器命令的整洁作弊表。打印并将其保持在桌子旁边以方便参考。
行动 | 命令 | 例子 |
---|---|---|
安装软件包 | nix-env -i |
nix -env -i firefox |
卸载包 | nix-env -e |
nix -env -e Firefox |
搜索软件包 | nix -env -qap | nix -env -qap python |
更新包 | nix-env -u |
nix -env -u firefox |
列表安装的软件包 | nix -env -q | nix -env -q |
回滚变化 | nix-env-Rollback | nix-env-Rollback |
垃圾收集 | nix-Collect-garbage -d | nix-Collect-garbage -d |
该作弊表涵盖了您使用NIX管理软件包的基本命令,为入门和维护系统提供了直接的指南。
这是关于NIX软件包管理器的最常见问题(FAQ)。
问:什么是尼克斯?答:NIX是Linux和UNIX系统的强大软件包管理器,专注于可重复性,可靠性和便携性。它允许用户轻松地在不同版本的软件及其依赖项之间安装,管理和切换。
问:如何使用Nix安装软件包?答:要安装软件包,请使用nix -env -i命令,然后使用软件包名称。例如,nix -env -i Firefox安装Firefox Web浏览器。
问:如何卸载包装?答:要卸载软件包,请使用nix -env -e命令,然后使用软件包名称。例如,nix -env -e雷鸟卸载了雷鸟电子邮件客户端。
问:如何搜索可用的软件包?答:要搜索软件包,请使用nix -env -qap 。例如,要查找与Python相关的软件包,您可以使用NIX -ENV -QAP Python。
问:我可以更新特定的软件包吗?答:是的,要更新特定的软件包,请运行nix-env -u
答:要列出所有已安装的软件包,请使用命令nix -env -q。
问:如何列出频道中的所有可用软件包?答:要列出频道中的所有可用软件包,请运行nix -env -qa。
问:如何恢复到以前的状态或“回滚”更改?答:Nix跟踪“世代”的变化。要回到上一代,请使用Nix-env-Rollback。您可以列出具有Nix-env-list生成的几代人。
问:如何保持尼克斯系统清洁?答:使用nix-Collect-garbage -D删除未使用的软件包并免费空间。此命令清理任何配置文件未引用的软件包。
NIX软件包管理器提供了一种强大而灵活的方法来管理Linux和Unix系统上的软件包。
其处理软件包的方法可确保您可以在没有冲突或依赖性问题的情况下安装,更新和切换软件之间。
尽管Nix可能有一些学习曲线,尤其是对于那些概念的新曲线,但精确,可再现的软件包管理的好处很重要。
无论您是开发人员,系统管理员还是一个好奇的用户,花时间学习NIX都可以大大增强您对软件环境的控制并简化工作流程。
就目前而言。希望您对Nix软件包管理器的基本用法有了一个清晰的了解。我们在这里涵盖的内容应该足以让您开始使用Nix。
当然,有很多命令。要了解更多NIX命令,我强烈建议您推荐下面给出的NIX官方手册。
资源:
以上是NIX软件包经理:初学者指南2024的详细内容。更多信息请关注PHP中文网其他相关文章!