NixOS/zh: Difference between revisions

Ardenet (talk | contribs)
No edit summary
Ardenet (talk | contribs)
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 3: Line 3:
{{Expansion|reason=此篇文章需要是一个简单的入门介绍,因为它将是新用户在此处阅读的首批文章之一。因此,内容需要简化一些,更复杂的主题应转移到其他文章中。}}
{{Expansion|reason=此篇文章需要是一个简单的入门介绍,因为它将是新用户在此处阅读的首批文章之一。因此,内容需要简化一些,更复杂的主题应转移到其他文章中。}}


<div class="mw-translate-fuzzy">
[https://nixos.org/ NixOS] 是一个基于 [[Special:MyLanguage/Nix|Nix]] 包管理器与构建系统的 Linux 发行版。它支持 [[Wikipedia:Declarative programming|声明式]] 的系统级 [[Wikipedia:Configuration management|配置管理]] 以及 [[Wikipedia:Atomicity (database_systems)|原子化]] 升级和回滚,同时它仍支持 [[Wikipedia:Imperative programming|命令式]] 的包管理和用户管理。在 NixOS 中,发行版的所有组件 &mdash; 包括 [[Wikipedia:Linux kernel|系统内核]]、已安装的 [[Wikipedia:Package manager|软件包]] 和系统配置文件 &mdash; 均由 [[Special:MyLanguage/Nix|Nix]] 从被称为 [[Special:MyLanguage/Nix (language)|Nix 表达式]] 的 [[Wikipedia:Pure function|纯函数]] 中构建。
[https://nixos.org/ NixOS] 是一个基于 [[Special:MyLanguage/Nix|Nix]] 包管理器与构建系统的 Linux 发行版。它支持 [https://en.wikipedia.org/wiki/Declarative_programming 声明式] 的系统级 [https://en.wikipedia.org/wiki/Configuration_management 配置管理] 以及 [https://en.wikipedia.org/wiki/Atomicity_(database_systems) 原子化] 升级和回滚,同时它仍支持 [https://en.wikipedia.org/wiki/Imperative_programming 命令式] 的包管理和用户管理。在 NixOS 中,发行版的所有组件 &mdash; 包括 [https://en.wikipedia.org/wiki/Linux_kernel 系统内核]、已安装的 [https://en.wikipedia.org/wiki/Package_manager 软件包] 和系统配置文件 &mdash; 均由 [[Special:MyLanguage/Nix|Nix]] 从被称为 [[Special:MyLanguage/Nix Expression Language|Nix 表达式]] 的 [[Wikipedia:Pure function|纯函数]] 中构建。
</div>


<div class="mw-translate-fuzzy">
由于 Nix 使用了 [[Wikipedia:Executable|二进制]] 缓存机制,这便为面向二进制分发(如 Debian)和面向 [[Wikipedia:Source code|源码]] 分发(如 Gentoo)的方法提供了一种独特的折中方案。预编译的二进制程序被视作标准组件,在其无法获取时,自助编译的软件包与模块将被自动构建。
由于 Nix 使用了 [https://en.wikipedia.org/wiki/Executable 二进制] 缓存机制,这便为面向二进制分发(如 Debian)和面向 [https://en.wikipedia.org/wiki/Source_code 源码] 分发(如 Gentoo)的方法提供了一种独特的折中方案。预编译的二进制程序被视作标准组件,在其无法获取时,自助编译的软件包与模块将被自动构建。
</div>


<div class="mw-translate-fuzzy">
NixOS 稳定版本每年发布两次(大约在五月底和十一月底)。NixOS 由 [https://edolstra.github.io/ Eelco Dolstra] 和 [[Wikipedia:Armijn Hemel| Armijn Hemel]] 创建,并于 2003 年首次发布。目前由 [[Special:MyLanguage/Nix_Community#NixOS_Foundation|NixOS 基金会]] 管理下的社区开发与维护。
NixOS 稳定版本每年发布两次(大约在五月底和十一月底)。NixOS 由 [https://edolstra.github.io/ Eelco Dolstra] 和 [https://en.wikipedia.org/wiki/Armijn_Hemel Armijn Hemel] 创建,并于 2003 年首次发布。目前由 [[Special:MyLanguage/Nix_Community#NixOS_Foundation|NixOS 基金会]] 管理下的社区开发与维护。
</div>


<span id="Installation"></span>
<span id="Installation"></span>
Line 106: Line 100:
在使用频道时,您的系统或 [[Special:MyLanguage/User Environment|用户环境]] 会从一个 URL 拉取软件包定义和选项,该 URL 指向 Nix 软件包集合(Nixpkgs)及相关 NixOS 模块的特定快照。
在使用频道时,您的系统或 [[Special:MyLanguage/User Environment|用户环境]] 会从一个 URL 拉取软件包定义和选项,该 URL 指向 Nix 软件包集合(Nixpkgs)及相关 NixOS 模块的特定快照。


<div class="mw-translate-fuzzy">
关于如何使用和配置 Nix 频道的更多信息,请参阅 [[Special:MyLanguage/Channel branches|频道分支]]。
关于如何使用和配置 Nix 频道的更多信息,请参阅 [[Special:MyLanguage/channel branches|频道分支]]。
</div>


<span id="Internals"></span>
<span id="Internals"></span>
Line 118: Line 110:
''Main Article: [[Special:MyLanguage/Nix vs. Linux Standard Base|比较Nix和Linux标准基础]]''
''Main Article: [[Special:MyLanguage/Nix vs. Linux Standard Base|比较Nix和Linux标准基础]]''


<div class="mw-translate-fuzzy">
NixOS 与其他 Linux 发行版的主要区别在于,NixOS 不遵循 [[Wikipedia:Linux Standard Base|Linux 标准规范(LSB)]] 的文件系统结构。在遵循 LSB 的系统中,软件通常存储在 <code>/{,usr}/{bin,lib,share}</code> 目录下,而配置文件通常存储在 <code>/etc</code>。如果程序的可执行文件被放置在 LSB 的某个 <code>/bin</code> 目录下,那么它就可以在用户环境中被访问。当一个程序引用动态链接库时,它将在 LSB 目录(<code>/lib</code>、<code>/usr/lib</code>)中搜索所需的库。
NixOS 与其他 Linux 发行版的主要区别在于,NixOS 不遵循 [https://en.wikipedia.org/wiki/Linux_Standard_Base Linux 标准规范(LSB)] 的文件系统结构。在遵循 LSB 的系统中,软件通常存储在 <code>/{,usr}/{bin,lib,share}</code> 目录下,而配置文件通常存储在 <code>/etc</code>。如果程序的可执行文件被放置在 LSB 的某个 <code>/bin</code> 目录下,那么它就可以在用户环境中被访问。当一个程序引用动态链接库时,它将在 LSB 目录(<code>/lib</code>、<code>/usr/lib</code>)中搜索所需的库。
</div>


<div class="mw-translate-fuzzy">
然而,在 NixOS 中,<code>/lib</code> 和 <code>/usr/lib</code> 目录并不存在。相反,所有系统库文件、可执行文件、内核、固件和配置文件都存放在 [[Special:MyLanguage/Nix (package_manager)#Nix store|Nix store]] 中。<code>/nix/store</code> 下的文件和目录均由构建数据的描述信息经哈希后命名。所有位于 Nix Store 的文件与目录均不可变。
然而,在 NixOS 中,<code>/lib</code> 和 <code>/usr/lib</code> 目录并不存在。相反,所有系统库文件、可执行文件、内核、固件和配置文件都存放在 [[Special:MyLanguage/Nix#Nix store|Nix store]] 中。<code>/nix/store</code> 下的文件和目录均由构建数据的描述信息经哈希后命名。所有位于 Nix Store 的文件与目录均不可变。
<code>/bin</code> 和 <code>/usr/bin</code> 几乎不存在:它们分别只包含 <code>/bin/sh</code> 和 <code>/usr/bin/env</code>,以提供与使用 shebang 行的现有脚本的最低兼容性。用户级环境通过大量指向所需软件包和辅助文件的符号链接来实现。
<code>/bin</code> 和 <code>/usr/bin</code> 几乎不存在:它们分别只包含 <code>/bin/sh</code> 和 <code>/usr/bin/env</code>,以提供与使用 shebang 行的现有脚本的最低兼容性。用户级环境通过大量指向所需软件包和辅助文件的符号链接来实现。
这些环境被称作 [[Special:MyLanguage/Nix#Profiles|Profiles]],被存储于 <code>/nix/var/nix/profiles</code>,每个用户拥有其独有的 Profiles。
这些环境被称作 [[Special:MyLanguage/Nix#Profiles|Profiles]],被存储于 <code>/nix/var/nix/profiles</code>,每个用户拥有其独有的 Profiles。
通过这种结构化的系统组织方式,NixOS 获得了优于传统 Linux 发行版的核心优势,例如原子化操作和回滚支持。
通过这种结构化的系统组织方式,NixOS 获得了优于传统 Linux 发行版的核心优势,例如原子化操作和回滚支持。
</div>


<span id="Usage_of_the_Nix_store"></span>
<span id="Usage_of_the_Nix_store"></span>
Line 171: Line 159:
</nowiki>}}
</nowiki>}}


<div class="mw-translate-fuzzy">
请参阅 [https://nixos.org/manual/nixos/stable/index.html#sec-writing-modules NixOS 手册的模块部分] 以获取更多详细信息。
请参阅 [https://nixos.org/nixos/manual/index.html#sec-writing-modules NixOS 手册的模块部分] 以获取更多详细信息。
</div>


<span id="Generations"></span>
<span id="Generations"></span>
Line 203: Line 189:
</syntaxHighlight>
</syntaxHighlight>


<div class="mw-translate-fuzzy">
列出世代:
列出世代:
<syntaxHighlight lang=shell>
# 以 root 用户身份
$ nix-env --list-generations --profile /nix/var/nix/profiles/system
</syntaxHighlight>
</div>


<syntaxHighlight lang=console>
<syntaxHighlight lang=console>
Line 216: Line 196:
</syntaxHighlight>
</syntaxHighlight>


<div class="mw-translate-fuzzy">
切换世代:
切换世代:
<syntaxHighlight lang=shell>
# 以 root 用户身份切换至 204 世代
$ nix-env --profile /nix/var/nix/profiles/system --switch-generation 204
</syntaxHighlight>
</div>


<syntaxHighlight lang=console>
<syntaxHighlight lang=console>
Line 229: Line 203:
</syntaxHighlight>
</syntaxHighlight>


<div class="mw-translate-fuzzy">
删除损坏的世代:
删除损坏的世代:
<syntaxHighlight lang=shell>
# 以 root 用户身份删除损坏的 205 和 206 世代
$ nix-env --profile /nix/var/nix/profiles/system --delete-generations 205 206
</syntaxHighlight>
</div>


<syntaxHighlight lang=console>
<syntaxHighlight lang=console>