https://wiki.archlinux.org/api.php?action=feedcontributions&user=VictriD&feedformat=atom
ArchWiki - User contributions [en]
2024-03-29T08:31:18Z
User contributions
MediaWiki 1.41.0
https://wiki.archlinux.org/index.php?title=Bash_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=683475
Bash (简体中文)
2021-06-24T13:40:51Z
<p>VictriD: Update translation.</p>
<hr />
<div>[[Category:Command-line shells (简体中文)]]<br />
[[Category:GNU (简体中文)]]<br />
[[de:Bash]]<br />
[[en:Bash]]<br />
[[es:Bash]]<br />
[[it:Bash]]<br />
[[ja:Bash]]<br />
[[ru:Bash]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Bash (简体中文)/Functions (简体中文)}}<br />
{{Related|Bash (简体中文)/Prompt customization (简体中文)}}<br />
{{Related|Environment variables (简体中文)}}<br />
{{Related|Readline (简体中文)}}<br />
{{Related|Fortune}}<br />
{{Related|Pkgfile (简体中文)}}<br />
{{Related|Command-line shell}}<br />
{{Related articles end}}<br />
<br />
{{TranslationStatus (简体中文)|Bash|2021-06-24|681729}}<br />
<br />
[https://www.gnu.org/software/bash/ Bash] (Bourne-again Shell) 是一个来自 [[GNU (简体中文)|GNU]]的[[Command-line shell|命令行解释器]]/编程语言。它的名字是向它的前身——很早以前的 Bourne shell 致敬。Bash可以运行在大部分类 UNIX 操作系统中,包括 GNU/Linux。<br />
<br />
Bash是Arch Linux的默认命令行解释器。<br />
<br />
== 调用 ==<br />
<br />
Bash 的运行方式会取决于 Bash 被调用的方式。下面是一些不同模式的描述。<br />
<br />
如果 Bash 以TTY中的{{ic|login}}、[[SSH (简体中文)|SSH]] 守护进程、或者其它类似的方式派生出来,我们称之为登录 (login) shell。你可以使用命令行选项 {{ic|-l}} 或 {{ic|--login}} 来使用这种模式。<br />
<br />
如果 Bash 的标准输入输出和标准错误输出都连接到终端(比如说,一个终端模拟器),并且在启动的时候既没有使用 {{Ic|-c}} 选项和[https://unix.stackexchange.com/a/96805 非选项参数](比如说,{{ic|bash '''script'''}}),我们称之为交互 (interactive) shell。所有的交互式 shell 都会执行{{ic|/etc/bash.bashrc}} 和 {{ic|~/.bashrc}} 文件中的配置,而登录shell还会执行{{ic|/etc/profile}} 和 {{ic|~/.bash_profile}} 中的配置。<br />
<br />
{{注意|在 Arch Linux 中 {{ic|/bin/sh}} (过去是 Bourne shell 的执行文件名) 是 {{ic|/bin/bash}} 的符号链接。如果 Bash 通过 {{ic|sh}} 方式调用,它会尽量模拟历史上 {{ic|sh}} 的启动行为,包括 POSIX 兼容能力。}}<br />
<br />
通过在Bash启动时使用 {{Ic|--posix}} 命令行参数或者在启动后执行 ‘{{Ic|set -o posix}}’ 来使Bash在增强的POSIX标准下运行。<br />
<br />
=== 配置文件 ===<br />
<br />
Bash会在启动时按照不同的启动方式执行一系列启动文件。关于更详尽的描述,您可以参考GNU Bash 指南中{{ic|/usr/share/doc/bash/bashref.html}} ([https://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files Bash启动文件])这一节。<br />
<br />
{| class="wikitable"<br />
! 文件<br />
! 描述<br />
! 登录 shell <br />
<sup>(见下)</sup><br />
! 交互 shell<br />
<sup>非登录</sup><br />
|-<br />
| {{ic|/etc/profile}}<br />
| [[Help:Reading (简体中文)#Source|加载]]全部储存在 {{ic|/etc/profile.d/*.sh}} 和 {{ic|/etc/bash.bashrc}} 中的配置。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|~/.bash_profile}}<br />
| 针对每个用户,紧接 {{ic|/etc/profile}} 执行。如果这个文件不存在,会顺序检查 {{ic|~/.bash_login}} 和 {{ic|~/.profile}} 文件。框架文件 {{ic|/etc/skel/.bash_profile}} 同时会引用 {{ic|~/.bashrc}}。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|~/.bash_logout}}<br />
| 针对每个用户,退出登录 shell 后。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|/etc/bash.bash_logout}}<br />
| 取决于 {{ic|1=-DSYS_BASH_LOGOUT="/etc/bash.bash_logout"}} 编译标记。退出登录 shell 后。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|/etc/bash.bashrc}}<br />
| 取决于编译标志 {{ic|1=-DSYS_BASHRC="/etc/bash.bashrc"}}。加载 {{ic|/usr/share/bash-completion/bash_completion}} 配置。<br />
| {{否}}<br />
| {{是}}<br />
|-<br />
| {{ic|~/.bashrc}}<br />
| 针对每个用户,在 {{ic|/etc/bash.bashrc}} 后加载。<br />
| {{否}}<br />
| {{是}}<br />
|}<br />
<br />
{{注意|<br />
* 如果以 {{ic|--login}} 调用,登录 shell 可能不是交互式的。<br />
* 如果可以交互,''非登录'' shell '''不会''' 加载 {{ic|~/.bash_profile}}。它会继承调用他们的父进程(可能是一个登录 shell)的环境参数。更多信息,请参考[[GregsWiki:ProcessManagement#On processes, environments and inheritance]]。<br />
}}<br />
<br />
=== Shell 与环境变量 ===<br />
<br />
Bash的行为和通过它启动的程序会被许多环境变量影响。[[Environment variables (简体中文)|环境变量]]用于储存有用的值,比如命令搜索路径,或者默认浏览器。当一个新的 shell 或者脚本被启动时,这个 shell 会继承它的父进程的环境变量,从而这个 shell 会带有内部 shell 变量[http://www.kingcomputerservices.com/unix_101/understanding_unix_shells_and_environment_variables.htm ]。<br />
<br />
这些内部 shell 变量可以以此导出以变成环境变量:<br />
<br />
VARIABLE=content<br />
export VARIABLE<br />
<br />
或者<br />
<br />
export VARIABLE=content<br />
<br />
环境变量依照惯例放置在{{ic|~/.profile}}或者{{ic|/etc/profile}}中,这样其他兼容 Bourne shell 的 shell 也可以使用。<br />
<br />
关于更详尽的内容,您可以参考[[Environment variables (简体中文)]]。<br />
<br />
== 命令行 ==<br />
<br />
Bash 的命令行由一个叫做 [[Readline (简体中文)|Readline]] 的分离库来管理。Readline 提供了[[emacs (简体中文)|emacs]] 和 [[vi (简体中文)|vi]] 风格的快捷键用于操作命令行,比如说,以单词为基准前后移动、删除等。管理输入[[Readline (简体中文)#历史|历史]]也是 Readline 的职责。它还允许你创造[[Readline (简体中文)#Macros|宏]]。<br />
<br />
=== Tab 键补全 ===<br />
<br />
[[Wikipedia:Command-line_completion|Tab 键补全]],提供在按下 {{ic|tab}} 键后自动补全命令的功能(这个功能默认启用)。<br />
<br />
==== Tab 按下的次数 ====<br />
<br />
可能最多需要按三次 tab 才能显示所有的补全选项。如果希望减少这个数值,请参考 [[Readline#Faster completion|更快的补全操作]]。<br />
<br />
==== 常用命令的选项补全 ====<br />
<br />
通常来讲,Bash 中按下 tab 只会补全命令、文件名和变量。安装 {{Pkg|bash-completion}} 包,并加载 {{ic|/usr/share/bash-completion/bash_completion}} 文件中的配置(这个文件应该已经在Arch的/etc/bash.bashrc中加载了),可以提供更多针对常见命令的选项的 tab 补全。安装这个包后,常规的补全(比如说 {{ic|$ ls file.*<tab><tab>}})可能会表现得不同。但是,您可以通过{ic|$ compopt -o bashdefault ''program''}}命令来重新启用。(更多细节,请参考 [https://bbs.archlinux.org/viewtopic.php?id=128471] and [https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html]。)<br />
<br />
==== 自定义命令补全 ====<br />
<br />
{{注意|使用 {{ic|complete}} 功能可能与 {{Pkg|bash-completion}} 冲突。}}<br />
<br />
通常来讲,Bash 中按下 tab 只会补全命令后的文件名。通过{{ic|complete -c}}命令,Bash 可以规定某些命令后的补全形式为命令,比如:<br />
{{hc|~/.bashrc|<br />
complete -c man which<br />
}}<br />
或通过{{ic|-cf}}命令,规定补全形式为命令和文件,比如:<br />
{{bc|complete -cf sudo}}<br />
更多补全形式,请参考Bash的手册页。<br />
<br />
=== 历史 ===<br />
<br />
==== 历史补全 ====<br />
<br />
您可以绑定上下键来在 Bash 的历史中查找(请参考 [[Readline (简体中文)#历史]] and [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline 启动文件语法]):<br />
<br />
{{hc|~/.bashrc|<br />
bind '"\e[A": history-search-backward'<br />
bind '"\e[B": history-search-forward'<br />
}}<br />
<br />
或者所有 Readline 程序:<br />
<br />
{{hc|~/.inputrc|<br />
"\e[A": history-search-backward<br />
"\e[B": history-search-forward<br />
}}<br />
<br />
==== 更近的历史记录 ====<br />
<br />
{{ic|HISTCONTROL}}变量可以避免历史记录记录特定的命令,比如不记录重复的命令<br />
{{hc|~/.bashrc|2=export HISTCONTROL=ignoredups}}<br />
将其设置为 {{ic|erasedups}} 可以让 Bash 的历史记录对一条命令只保留一个历史记录(与顺序无关)。更多选项,请参考Bash的手册页。<br />
<br />
==== 禁用历史记录 ====<br />
<br />
临时禁用历史记录:<br />
<br />
$ set +o history<br />
<br />
现在输入的命令将不会存入{{ic|$HISTFILE}}。<br />
<br />
比如说,你现在可以执行 {{ic|printf secret {{!}} sha256sum}} 来生成密码文件的散列值,或是隐藏您使用GPG的历史,如执行{{ic|gpg -eaF secret-pubkey.asc}}命令。这些秘密不会被写入磁盘。<br />
<br />
开启历史记录:<br />
<br />
$ set -o history<br />
<br />
{{提示|如果 {{ic|HISTCONTROL}} 变量包含了 {{ic|ignorespace}},以空格开头的命令将不会记入历史。这样可以更加方便地控制历史记录。更多细节,请参考{{man|1|bash|Shell Variables}}。}}<br />
<br />
禁用所有的 Bash 历史:<br />
<br />
{{hc|~/.bashrc or /etc/profile|2=<br />
export HISTSIZE=0<br />
}}<br />
<br />
为了保险(这会永远清除所有的历史记录):<br />
<br />
$ wipe -i -l2 -x4 -p4 "$HISTFILE"<br />
$ ln -sv /dev/null "$HISTFILE"<br />
<br />
=== 模仿 Zsh 的帮助功能 ===<br />
<br />
[[Zsh (简体中文)|Zsh]] 可以在光标指向命令的时候按 {{ic|Alt+h}} 来调用这个命令的手册。<br />
相同的行为可以通过这个 [[Readline (简体中文)]] 绑定在 Bash 中开启:<br />
<br />
{{hc|~/.bashrc|<nowiki><br />
run-help() { help "$READLINE_LINE" 2>/dev/null || man "$READLINE_LINE"; }<br />
bind -m vi-insert -x '"\eh": run-help'<br />
bind -m emacs -x '"\eh": run-help'<br />
</nowiki>}}<br />
<br />
这个操作假设你使用(默认的)Emacs [[Readline#Editing mode|编辑模式]]。<br />
<br />
== 别名 ==<br />
<br />
[[Wikipedia:alias|别名]](alias)是可以让您用另一个字符串来替换一个字符串的命令。这个命令常常被用来缩短系统命令,或者用来将默认参数加入到常用命令中。<br />
<br />
推荐将针对用户的别名保存在{{ic|~/.bashrc}}, 而将系统级的别名(这些会影响所有用户)存放在{{ic|/etc/bash.bashrc}}。别名的示例,请参考 [https://gist.github.com/anonymous/a9055e30f97bd19645c2]。<br />
<br />
关于函数,请参考 [[Bash (简体中文)/Functions (简体中文)|函数]]。<br />
<br />
== 提示与技巧 ==<br />
<br />
=== 自定义提示符 ===<br />
<br />
参见 [[Bash (简体中文)/Prompt customization (简体中文)|自定义提示符]]。<br />
<br />
=== 找不到命令 ===<br />
<br />
[[pkgfile (简体中文)|pkgfile]] 提供了一个"找不到命令"的钩子,可以在输入未知命令后自动查找官方的软件包。<br />
<br />
你需要[[Help:Reading (简体中文)#Source|加载]]这个钩子来启用它,如下:<br />
<br />
{{hc|~/.bashrc|<br />
source /usr/share/doc/pkgfile/command-not-found.bash}}<br />
<br />
现在,运行一个不可用的命令将会显示如下信息:<br />
<br />
{{hc|$ abiword|<br />
abiword may be found in the following packages:<br />
extra/abiword 3.0.1-2 /usr/bin/abiword<br />
}}<br />
<br />
{{注意|需要先更新 pkgfile 的数据库才能运作。更多细节,请参考[[pkgfile (简体中文)#安装]]。}}<br />
<br />
另一个"找不到命令"的钩子由 {{AUR|command-not-found}} 包提供,它看起来像这个样子:<br />
<br />
{{hc|$ abiword|<br />
The command 'abiword' is provided by the following packages:<br />
'''abiword''' (2.8.6-7) from extra<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from staging<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from testing<br />
[ abiword ]<br />
}}<br />
<br />
=== 在终端内禁用Ctrl+Z ===<br />
<br />
你可以相这样包装你的命令,来关闭 {{ic|Ctrl+Z}} 功能(暂停/关闭程序)。通过在这个脚本中包装命令<br />
<br />
#!/bin/bash<br />
trap "" 20<br />
''adom''<br />
<br />
这时如果你在玩 {{AUR|adom}} 要按 {{ic|Shift+Z}} 组合键时不小心按下了 {{ic|Ctrl+Z}} 组合键,你的游戏就不会停止运行了,因为我们已经禁用了{{ic|Ctrl+Z}}。<br />
<br />
=== 登出后清空屏幕 ===<br />
<br />
当登出虚拟终端时,清空屏幕:<br />
{{hc|~/.bash_logout|<br />
clear<br />
reset<br />
}}<br />
<br />
=== 输入路径自动添加"cd" ===<br />
<br />
Bash 可以自动在输入的一个路径前添加 {{ic|cd }}。比如说:<br />
{{hc|$ /etc|<br />
bash: /etc: Is a directory<br />
}}<br />
<br />
但是如果在 {{ic|.bashrc}} 文件里添加一行:<br />
{{hc|~/.bashrc|<br />
...<br />
shopt -s autocd<br />
...<br />
}}<br />
<br />
你会得到:<br />
[user@host ~]$ /etc<br />
cd /etc<br />
[user@host etc]$<br />
<br />
=== 自动跳转 ===<br />
<br />
{{AUR|autojump-git}} 允许在用户访问最多的路径中搜索文件系统。<br />
<br />
安装完后,[[Help:Reading (简体中文)#Source|加载]] {{ic|/etc/profile.d/autojump.bash}} 来启动这项功能。<br />
<br />
=== 防止覆盖文件 ===<br />
<br />
在当前的会话中,防止 shell 输出重定向覆盖一个已有的文件:<br />
<br />
$ set -o noclobber<br />
<br />
这和{{ic|set -C}}命令是一样的。<br />
<br />
如果想让该用户一直生效:<br />
<br />
{{hc|~/.bashrc|output=...<br />
set -o noclobber}}<br />
<br />
在设定 {{ic|noclobber}} 的情况下强制覆盖文件:<br />
<br />
$ echo "output" >| file.txt<br />
<br />
== 错误排除 ==<br />
<br />
=== 修正窗口大小调整时的换行 ===<br />
<br />
如果您调整了[[List of applications (简体中文)/Utilities (简体中文)#终端模拟器|终端模拟器]]的大小,Bash 可能并没有得到大小重调的信号,你键入的文本就不会正确的换行,并且与已输入内容重叠。启用 {{ic|checkwinsize}} 选项可以在每一个命令后检查窗口的大小,并按需更新 {{ic|LINES}} 和 {{ic|COLUMNS}} 的值来调整。<br />
<br />
{{hc|~/.bashrc|<br />
shopt -s checkwinsize<br />
}}<br />
<br />
=== 设置 ignoreeof 后 shell 仍然退出 ===<br />
<br />
如果您设置了 {{ic|ignoreeof}} 选项,但是如果重复按下 {{ic|ctrl-D}} shell 仍然会退出。因为这个选项只允许忽略 10 次连续的EOF记号(即 {{ic|Ctrl+D}})。<br />
<br />
如果需要将这个次数调的更高,需要使用 IGNOREEOF 变量。<br />
<br />
比如:<br />
export IGNOREEOF=100<br />
<br />
=== 分析代码以检查错误 ===<br />
<br />
包 {{Pkg|shellcheck}} 可以分析bash脚本(以及其他脚本),显示可能存在的问题,并对优化代码质量提出意见。<br />
<br />
[https://www.shellcheck.net shellcheck.net] 网站也提供了基于此程序的相同功能。<br />
<br />
== 更多信息 (英语) ==<br />
<br />
* [[Wikipedia:Bash (Unix shell)]]<br />
* [https://www.gnu.org/software/bash/manual/bashref.html Bash 参考手册],或是 {{ic|/usr/share/doc/bash/bashref.html}}<br />
* [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline 启动文件语法]<br />
* [https://www.aosabook.org/en/bash.html The Bourne-Again Shell] - ''开源软件架构'' 第三章<br />
* [http://bashrcgenerator.com/ PS1 生成器] - 生成你的 .bashrc/PS1 脚本,这样就可以在命令行中使用鼠标拖拽了。<br />
* [https://serverfault.com/questions/3743/what-useful-things-can-one-add-to-ones-bashrc 有用的 .bashrc 命令]<br />
<br />
=== 教程 ===<br />
<br />
* [[GregsWiki:|Greg's Wiki]]<br />
* [[GregsWiki:BashGuide]]<br />
* [[GregsWiki:BashFAQ]]<br />
* [https://wiki.bash-hackers.org/doku.php Bash Hackers Wiki]<br />
* [https://wiki.bash-hackers.org/scripting/tutoriallist Bash Hackers Wiki: List of Bash online tutorials]<br />
* [https://www.grymoire.com/Unix/Quote.html Quote Tutorial]<br />
<br />
=== 社区 ===<br />
<br />
* [ircs://irc.libera.chat/bash 一个 Bash 的活跃友好的IRC频道]<br />
<br />
=== 例子 ===<br />
<br />
* [https://tldp.org/HOWTO/Xterm-Title-4.html 怎样修改 xterm 的标题]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Java_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=683474
Java (简体中文)
2021-06-24T13:33:46Z
<p>VictriD: Update translation status.</p>
<hr />
<div>[[Category:Programming languages (简体中文)]]<br />
[[cs:Java]]<br />
[[de:Java]]<br />
[[en:Java]]<br />
[[es:Java]]<br />
[[fa:Java]]<br />
[[fr:Java]]<br />
[[it:Java]]<br />
[[ja:Java]]<br />
[[pt:Java]]<br />
[[ru:Java]]<br />
{{Related articles start}}<br />
{{Related|Java package guidelines (简体中文)}}<br />
{{Related|Java Runtime Environment Fonts}}<br />
{{Related articles end}}<br />
<br />
{{TranslationStatus (简体中文)|Java|1971-01-01|0}}<br />
<br />
{{Translateme (简体中文)|机器翻译严重,而且前后文不搭调,有语义错误。}}<br />
<br />
摘自维基百科中的 [[Wikipedia:Java (programming language)|Java]] 词条:<br />
<br />
:Java是由最早由Sun微系统公司开发并在1995年作为Sun微系统Java平台的核心组件发布的编程语言。它很多语法是从C和C++派生出来的,但对象模型更简介,底层组件更少。Java的应用一般被编译成能在任何Java虚拟机([[Wikipedia:Java virtual machine|JVM]]),而不是特定架构上运行的字节码。<br />
<br />
Arch Linux官方支持开源的第7、8、11和16版的 [https://openjdk.java.net/ OpenJDK]。这些JVM可以并存,并能够通过帮助脚本{{Ic|archlinux-java}}切换。在 [[Arch User Repository (简体中文)]]中也有一些其他的,不被官方支持的可用Java环境。<br />
<br />
== 安装 ==<br />
<br />
{{注意|<br />
* Arch Linux官方只支持 [[#OpenJDK|OpenJDK]] 实现.<br />
* 刚安装完成的Java环境还无法被Shell({{Ic|$PATH}} 变量)识别。可以在命令行中使用{{Ic|source}}命令读取{{Ic|/etc/profile}},重启,或者注销并重新登入桌面环境来正确更新。}}<br />
<br />
两个''常见的''包经常会作为其他包的依赖,他们是 {{Pkg|java-runtime-common}} (包含Java运行环境(JRE)的公共文件) 和 {{Pkg|java-environment-common}} (包括Java开发包(JDK)的公共文件)。包提供的环境配置文件 {{Ic|/etc/profile.d/jre.sh}} 指向由 {{ic|archlinux-java}} 帮助脚本设置的链接 {{Ic|/usr/lib/jvm/default/bin}}。<br />
<br />
{{警告| '''务必'''使用 {{Ic|archlinux-java}}编辑 {{Ic|/usr/lib/jvm/default}} 和 {{Ic|/usr/lib/jvm/default-runtime}} 这两个链接。 }}<br />
<br />
这些链接被用来指示位于 {{Ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}</nowiki>}} 默认Java运行环境,或位于 {{Ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}/jre</nowiki>}} 的Java运行时。<br />
<br />
大多数安装的可执行文件都以链接的形式放在 {{Ic|/usr/bin}} 中,其他可执行文件则在 {{Ic|$PATH}} 指向的位置处。{{Ic|/etc/profile.d/jdk.sh}} 已经不再在包中提供了。<br />
<br />
=== OpenJDK ===<br />
<br />
[[Wikipedia:OpenJDK|OpenJDK]] 是一种Java平台、标准版(Java SE)的开源实现(Java SE).<br />
<br />
;Headless JRE: 最小的Java运行环境 - 需要被用来执行非GUI的Java程序.<br />
;Full JRE: 完全的Java运行环境 - 需要用来运行JavaGUI程序,依赖于headless JRE.<br />
;JDK:[[Wikipedia:Java Development Kit|Java Development Kit]] - 需要用来搭建Java开发环境, 依赖于 full JRE.<br />
<br />
{| class="wikitable"<br />
! 版本 !! Headless JRE !! Full JRE !! JDK !! 文献 !! 来源<br />
|-<br />
| [https://openjdk.java.net/projects/jdk/15/ OpenJDK 15] || {{Pkg|jre-openjdk-headless}} || {{Pkg|jre-openjdk}} || {{Pkg|jdk-openjdk}} || {{Pkg|openjdk-doc}} || {{Pkg|openjdk-src}}<br />
|-<br />
| [https://openjdk.java.net/projects/jdk/11/ OpenJDK 11] || {{Pkg|jre11-openjdk-headless}} || {{Pkg|jre11-openjdk}} || {{Pkg|jdk11-openjdk}} || {{Pkg|openjdk11-doc}} || {{Pkg|openjdk11-src}}<br />
|-<br />
| [https://openjdk.java.net/projects/jdk8/ OpenJDK 8] || {{Pkg|jre8-openjdk-headless}} || {{Pkg|jre8-openjdk}} || {{Pkg|jdk8-openjdk}} || {{Pkg|openjdk8-doc}} || {{Pkg|openjdk8-src}}<br />
|-<br />
| [https://openjdk.java.net/projects/jdk7/ OpenJDK 7] || {{Pkg|jre7-openjdk-headless}} || {{Pkg|jre7-openjdk}} || {{Pkg|jdk7-openjdk}} || {{Pkg|openjdk7-doc}} || {{Pkg|openjdk7-src}}<br />
|}<br />
<br />
{{App|IcedTea-Web|Java web第一步 但是是一个被弃用的Java浏览器插件.|https://icedtea.classpath.org/wiki/IcedTea-Web{{Dead link (简体中文)|2021|06|10|status=404}}|{{Pkg|icedtea-web}}}}<br />
{{App|OpenJFX 8|JavaFX的开源实现. 你[https://wiki.openjdk.java.net/display/OpenJFX/Repositories+and+Releases 不需要] 安装这个包,如果你使用Java SE的话 (下面要讲的Oracle的JRE和JDK实现). 这个包仅仅是因为担心Java开源实现的用户 (OpenJDK 项目).|https://openjdk.java.net/projects/openjfx/|{{Pkg|java-openjfx}}, {{Pkg|java-openjfx-doc}}, {{Pkg|java-openjfx-src}}}}<br />
{{App|OpenJDK EA|Oracle的OpenJDK为最新开发版本的早期接入.|https://jdk.java.net|{{AUR|openjdk-devel}}{{Broken package link (简体中文)|package not found}}}}<br />
{{App|OpenJFX EA|Oracle的OpenJFK为最新开发版本的早期接入.|https://jdk.java.net/openjfx/|{{AUR|java-openjfx-devel}}{{Broken package link (简体中文)|package not found}}}}<br />
<br />
=== 其他实现 ===<br />
<br />
{{App|Java SE|Oracle的JRE和JDK实现.|https://www.oracle.com/technetwork/java/javase/downloads/index.html|{{AUR|jre}} {{AUR|jre9}} {{AUR|jre8}} {{AUR|jre7}} {{AUR|jre6}} {{AUR|jdk}} {{AUR|jdk9}} {{AUR|jdk8}} {{AUR|jdk7}} {{AUR|jdk6}} {{AUR|jdk5}} {{AUR|jdk-devel}}}}<br />
{{App|OpenJ9|Eclipse的JRE实现,由IBM贡献|https://www.eclipse.org/openj9/|{{AUR|jdk9-openj9-bin}} {{AUR|jdk8-openj9-bin}}}}<br />
{{App|IBM J9|IBM的第八版Java实现.|https://developer.ibm.com/javasdk/|{{AUR|jdk8-j9-bin}} {{AUR|jdk7-j9-bin}} {{AUR|jdk7r1-j9-bin}}}}<br />
{{App|Parrot VM|一个对Java [http://trac.parrot.org/parrot/wiki/Languages]提供实验支持的虚拟机 ,通过两种方式,一种是 [https://code.google.com/p/parrot-jvm/ Java VM bytecode translator],另一种是[https://github.com/chrisdolan/perk Java compiler targeting the Parrot VM].|http://www.parrot.org/|{{AUR|parrot}}}}<br />
<br />
{{注意|32比特版本的JavaSE可以通过添加前缀 {{ic|bin32-}}来找到,例如 {{AUR|bin32-jre}} 和 {{AUR|bin32-jdk}}{{Broken package link (简体中文)|package not found}}. 他们使用的是 {{AUR|java32-runtime-common}},而这和 {{Pkg|java-runtime-common}}功能一样只要添加后缀就好了{{ic|32}}, 例如. {{ic|java32}}. 同样的方法也适用于 {{AUR|java32-environment-common}},它只用于32比特版本的JDK包.}}<br />
<br />
=== 开发工具 ===<br />
<br />
对于集成开发环境,查阅[[List of applications#Integrated development environments]] 和特定的 ''Java IDEs'' 的子分区<br />
<br />
为了阻止逆向工程,可以使用像{{AUR|proguard}}的混淆器.<br />
<br />
==== 反编译器 ====<br />
<br />
* {{App|Bytecode Viewer|Java逆向工程套件, 包括一个反编译器, 编辑器和调试器.|https://bytecodeviewer.com|{{AUR|bytecode-viewer}}}}<br />
* {{App|CFR|Java反编译器,支持Java 9,10和更高版本的现代功能|https://www.benf.org/other/cfr/|{{AUR|cfr}}}}<br />
* {{App|Fernflower|Java的分析反编译器, 被开发为[[IntelliJ IDEA]]的一部分.|https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine|{{AUR|fernflower-git}}}}<br />
* {{App|[[Wikipedia:JAD (software)|JAD]]|不被维护的Java反编译器.|https://varaneckas.com/jad|{{Pkg|jad}}}}<br />
* {{App|JD-Core-java|[[Wikipedia:Java Decompiler|Java反编译器]的薄包装]].|https://github.com/nviennot/jd-core-java|{{AUR|jd-core-java}}}}<br />
* {{App|Krakatau|Java的反编译器,汇编器和反汇编器.|https://github.com/Storyyeller/Krakatau|{{AUR|krakatau-git}}}}<br />
* {{App|Procyon decompiler|实验性质的Java反编译器, 被ILSpy and Mono.Cecil启发.|https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler|{{AUR|procyon-decompiler}}, GUI: {{AUR|luyten}}}}<br />
<br />
== 在JVM间切换 ==<br />
<br />
帮助脚本 {{Ic|archlinux-java}} 提供了如下功能:<br />
<br />
archlinux-java <COMMAND><br />
<br />
COMMAND:<br />
status List installed Java environments and enabled one<br />
get Return the short name of the Java environment set as default<br />
set <JAVA_ENV> Force <JAVA_ENV> as default<br />
unset Unset current default Java environment<br />
fix Fix an invalid/broken default Java environment configuration<br />
<br />
=== 列出兼容的安装了的Java环境 ===<br />
<br />
$ archlinux-java status<br />
<br />
例如:<br />
<br />
$ archlinux-java status<br />
Available Java environments:<br />
java-7-openjdk (default)<br />
java-8-openjdk/jre<br />
<br />
标着 ''(default)'' 表示 {{Ic|java-7-openjdk}} 被设为默认. {{Ic|java}} 的调用和其他二进制调用都依赖于这个安装的Java.同时前面的输出表示只有OpenJDK8的JRE部分被安装了.<br />
<br />
=== 改变默认Java环境 ===<br />
<br />
# archlinux-java set <JAVA_ENV_NAME><br />
<br />
例如:<br />
<br />
# archlinux-java set java-8-openjdk/jre<br />
<br />
{{Tip|想看可用的 {{ic|<JAVA_ENV_NAME>}} 名字, 使用 {{ic|archlinux-java status}}.}}<br />
<br />
注意到 {{Ic|archlinux-java}} 并不会让你设置一个不可用的Java环境. 在前面的例子中, {{pkg|jre8-openjdk}} 安装了但是 {{pkg|jdk8-openjdk}} 并 '''没有''' 所以尝试设置 {{Ic|java-8-openjdk}} 将会失败:<br />
<br />
# archlinux-java set java-8-openjdk<br />
'/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path<br />
<br />
=== 取消设置的默认Java环境 ===<br />
<br />
没必要取消设置的Java环境因为安装包会让它们注意这种情况. 如果你还想这么做的话,用这条命令 {{Ic|unset}}:<br />
<br />
# archlinux-java unset<br />
<br />
=== 解决默认Java环境的问题 ===<br />
<br />
如果一个不可用的Java环境链接被设置,用 {{Ic|archlinux-java fix}} 命令尝试修复它. 同时如果没有默认Java环境被设置,它会找可用的并尝试为你设置。官方支持的包 "OpenJDK 8" 将会比其他安装的环境被优先考虑.<br />
<br />
# archlinux-java fix<br />
<br />
=== 运行非默认Java版本的程序 ===<br />
<br />
如果你想运行其它版本而不是默认版本的程序(例如你有JRE7和JRE8同时装在系统里), 你可以把你的程序打包进一个小bash脚本里来暂时改变Java的默认版本。例如如果默认版本是JRE7而你想用JRE8:<br />
<br />
#!/bin/sh <br />
<br />
export PATH=/usr/lib/jvm/java-8-openjdk/jre/bin/:$PATH<br />
exec /path/to/application "$@"<br />
<br />
== 包支持{{Ic|archlinux-java}}的先决条件 ==<br />
<br />
{{注意|这条信息同样适用于 {{ic|archlinux32-java}} 的32位比特Java包, 如果它们的包或者可执行名字里有 {{ic|32}} ,都可适用.}}<br />
<br />
这个分区的信息针对愿意提供包作为备份JVM给 [[Arch User Repository (简体中文)]] 的贡献者, 并且能够用 {{Ic|archlinux-java}}集成Arch Linux JVM方案. 如果要这样的话,这些包应该:<br />
<br />
* 把所有文件放在这里 {{Ic|/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME} }}<br />
* 确认所有的 [https://archlinux.org/packages/extra/any/java-runtime-common/files/ java-runtime-common] 和 [https://archlinux.org/packages/extra/any/java-environment-common/files/ java-environment-common] 提供的可执行链接在相关包里都是可用的 <br />
* 把所有链接从 {{Ic|/usr/bin}} 移动到可执行文件里, 除非这些链接不属于 [https://archlinux.org/packages/extra/any/java-runtime-common/files/ java-runtime-common] 和 [https://archlinux.org/packages/extra/any/java-environment-common/files/ java-environment-common]<br />
* 用 {{Ic|-${VENDOR_NAME}${JAVA_MAJOR_VERSION} }} 的格式给手册页添加后缀 (查阅 [https://archlinux.org/packages/extra/x86_64/jre8-openjdk/files/ jre8-openjdk file list] 它的手册页用 {{Ic|-openjdk8}}做后缀)<br />
* 不要定义任何 [[PKGBUILD (简体中文)#conflicts|冲突]] 和[[PKGBUILD (简体中文)#replaces|替代]] ,用其他的JDK, {{Ic|java-runtime}}, {{Ic|java-runtime-headless}} 和 {{Ic|java-environment}}<br />
* 在''安装函数'' 里使用{{Ic|archlinux-java}} 脚本来把Java环境设置为默认 '''如果没有其他可用的Java环境准备设置的话''' (即: 这些包不应该 '''强制''' 被装为默认). 查阅 [https://github.com/archlinux/svntogit-packages/blob/packages/java7-openjdk/trunk officially supported Java environment package sources] 做例子<br />
<br />
同时也该注意到:<br />
* 包需要的 '''任何''' Java环境应该声明依赖,和往常一样在 {{Ic|java-runtime}}, {{Ic|java-runtime-headless}} 或者 {{Ic|java-environment}}里声明 <br />
* 包如果需要 '''特定Java提供商''' 应该在相关包里声明依赖。<br />
* OpenJDK 包现在应该声明 {{Ic|1=provides="java-runtime-openjdk=${pkgver}"}} 等. 这能让第三方的包在没有特定版本要求的OpenJDK里声明依赖<br />
<br />
== 故障排除 ==<br />
<br />
=== MySQL ===<br />
<br />
因为JDBC-驱动经常使用URL的端口来建立到数据库的连接, 所以通过 "远程" (i.e., MySQL不会根据默认设置监听端口)的办法应该被考虑,尽管它们可能运行在同一个主机上, 所有, 要用JDBC和MySQL的话你应该启用到MySQL的远程连接,, 在[[MariaDB#Grant remote access]]查询指导.<br />
<br />
=== IntelliJ IDEA ===<br />
<br />
如果你在设置JDK的时候选择了系统的JDK,同时碰到了错误提示 `The selected directory is not a valid home for JDK`,这个时候你需要重新安装一个jdk,在IntelliJ IDEA设置jdk的时候选择新安装的JDK.<br />
<br />
=== 冒充另一个窗口管理器 ===<br />
<br />
你可以使用 {{pkg|wmname}} ,从 [https://tools.suckless.org/x/wmname suckless.org]下载,来使JVM相信你是在运行一个不同的窗口管理器. 这可以解决在窗口管理器发生的Java GUIs渲染问题, 比如说 [[awesome (简体中文)]] 或者 [[Dwm (简体中文)]] 或者 [[Ratpoison (简体中文)]].<br />
<br />
$ wmname LG3D<br />
<br />
你必须在运行了这条命令后重启有问题的程序.<br />
<br />
这个能起作用是因为JVM包含了一个已知的、非重新父母窗口管理器的硬编码名单. 为了最大化反讽效果,一些用户喜欢冒充 {{ic|LG3D}}, 一种非重新父母窗口管理器 [[wikipedia:Project_Looking_Glass|由Sun公司用Java写成]].<br />
<br />
=== 难以辨认的字体 ===<br />
<br />
除了下述的建议 [[#更好的字体渲染]], 可能还是有一些字体难以辨认. 如果是这样的话,有一个很好的机会能用Microsoft的字体. 在[[AUR]]安装{{AUR|ttf-ms-fonts}} .<br />
<br />
=== 一些应用缺少文字 ===<br />
<br />
如果一些应用完全没有文字,你可以用下面的办法[[#建议和技巧]] 它在{{Bug|40871}}里被建议.<br />
<br />
=== 应用未调整WM大小,菜单快速关闭 ===<br />
<br />
标准Java GUI工具包有一个非重新父母窗口管理器的硬编码名单. 如果你使用的不在名单里, 运行一些Java 程序就可能产生一些问题. 最普遍的一个问题是 "灰斑", 这发生在Java程序渲染纯灰色的盒子而不是渲染GUI的时候. 另一个问题是菜单会响应你的点击,但是立马关闭.<br />
<br />
有很多事能帮到忙:<br />
<br />
* 对于 {{Pkg|jre7-openjdk}} 或者 {{Pkg|jre8-openjdk}}, 在 {{ic|/etc/profile.d/jre.sh}}文件里加入一行 {{Ic|1=export _JAVA_AWT_WM_NONREPARENTING=1}} . 然后,用source命令处理 {{ic|/etc/profile.d/jre.sh}} 或者重新登出登录.<br />
* 对于 Oracle 的 JRE/JDK, 用 [https://wiki.haskell.org/Xmonad/Frequently_asked_questions#Using_SetWMName SetWMName.] 然而,当使用{{ic|XMonad.Hooks.EwmhDesktops}}的时候它的作用可能被取消. 这种情况下,添加<br />
<br />
>> setWMName "LG3D"<br />
<br />
到 {{ic|LogHook}} 可以起作用.<br />
<br />
查阅[https://wiki.haskell.org/Xmonad/Frequently_asked_questions#Problems_with_Java_applications.2C_Applet_java_console] 可以获取更多信息.<br />
<br />
=== 当调试JavaFX程序的时候系统卡住 ===<br />
<br />
当你调试JavaFX程序的时候系统卡住了,你可以尝试提供JVM以下选项 {{Ic|1=-Dsun.awt.disablegrab=true}}.<br />
<br />
查阅 https://bugs.java.com/view_bug.do?bug_id=6714678<br />
<br />
=== JavaFX 的 MediaPlayer 构造函数抛出了一个 exception ===<br />
<br />
从JavaFX声音模板里创造 MediaPlayer 类的实例可能会抛出下面的exception (Oracle JDK 和 OpenJDK都会有)<br />
<br />
... (i.e. FXMLLoader construction exceptions) ...<br />
Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player!<br />
at javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146)<br />
at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:511)<br />
at javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:414)<br />
at <constructor call><br />
...<br />
<br />
这是JavaFX和Arch Linux库里提供的 {{pkg|ffmpeg}} 构建不兼容的结果.<br />
<br />
解决办法是安装 {{AUR|ffmpeg-compat-55}}.<br />
<br />
查阅 https://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/<br />
<br />
=== Java程序无法打开外部链接 ===<br />
<br />
如果Java程序不能打开链接到, 比如说, 你的浏览器, 安装{{Pkg|gvfs}}.这是 Desktop.Action.BROWSE 方法所必须的. 查阅 [https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1574879/comments/2]<br />
<br />
== 建议和技巧 ==<br />
<br />
{{注意|这个区里提的建议在所有程序里有用,如果你用的是明确的安装的 (外部) Java 运行的话.一些程序是用个人的 (私有的) Java运行或者是自己的GUI机制, 字体渲染机制, 等等., 这样的话下面写的都不保证能起作用.}}<br />
<br />
大多数Java程序的行为都可以通过向Java运行提供预定义变量来操控. 查阅 [https://bbs.archlinux.org/viewtopic.php?id=72892 this forum post], 一种这样做的方法包括添加下面的行到你的 {{Ic|~/.bashrc}}文件 (或者通过 {{Ic|/etc/profile.d/jre.sh}} 来影响不是通过用source命令处理{{Ic|~/.bashrc}}来运行的程序 , 比如., 用Gnome应用师徒来运行程序):<br />
<br />
export _JAVA_OPTIONS="-D'''<option 1>''' -D'''<option 2>'''..."<br />
<br />
比如,用系统的抗锯齿字体来使swing有GTK的视觉效果和感觉:<br />
<br />
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'<br />
<br />
=== 更好的字体渲染 ===<br />
<br />
开源和闭源的Java实现都有不合适的抗锯齿字体实现. 这可以通过以下办法来解决: {{Ic|1=-Dawt.useSystemAAFontSettings=on}}, {{Ic|1=-Dswing.aatext=true}}<br />
<br />
查阅 [[Java Runtime Environment fonts]] 来获取更多信息.<br />
<br />
=== 禁止命令行的 'Picked up _JAVA_OPTIONS' 消息 ===<br />
<br />
设置 _JAVA_OPTIONS 环境变量使 java (openjdk) 写入以下形式的stderr消息: 'Picked up _JAVA_OPTIONS=...'. 要在终端中禁止这些消息,可以取消设置shell启动文件中的环境变量,并使用别名java来传递与命令行参数相同的选项:<br />
<br />
_SILENT_JAVA_OPTIONS="$_JAVA_OPTIONS"<br />
unset _JAVA_OPTIONS<br />
alias java='java "$_SILENT_JAVA_OPTIONS"'<br />
<br />
=== GTK 视觉效果和感觉 ===<br />
<br />
如果你的Java程序看起来很丑, 你可能想为swing组件设置默认外表和感觉:<br />
<br />
{{Ic|1=swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}.<br />
<br />
一些Java程序坚持用跨平台的金属外表和感觉. 在这些情况下,你可以通过设置下面的属性强制这些app用GTK外表和感觉:<br />
<br />
{{Ic|1=swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}.<br />
<br />
==== GTK3支持 ====<br />
<br />
在Java的版本9之前, GTK的外观和感觉是与GTK2链接的,但是同时许多更新的桌面程序用的是GTK3. 这种GTK版本间的不兼容性可能打断程序使用Java的GUI插件,因为同一个进程里GTK2和GTK3的混合不被支持 (例如, LibreOffice 5.0). <br />
<br />
从 [https://openjdk.java.net/jeps/283 Java 9]以来, GTK的外观和感觉可以和GTK的版本 {{Ic|2}}, {{Ic|2.2}} 和 {{Ic|3}}一起运行, 默认GTK2. 这可以通过设置下面的属性来覆盖:<br />
<br />
{{Ic|1=jdk.gtk.version=3}}<br />
<br />
=== 更好的2D性能 ===<br />
<br />
切换到基于OpenGL的硬件加速管道会提升2D性能<br />
<br />
export _JAVA_OPTIONS='-Dsun.java2d.opengl=true'<br />
<br />
{{注意|开启这项选项会导致像Jetbrains的IDE这样的软件的UI表现不正常, 让它们的窗口、弹窗和工具栏只画一部分.}}<br />
<br />
=== 非重新父母窗口管理器 / 灰色窗口 / 程序被绘制得不恰当 ===<br />
<br />
非重新父母窗口管理器的用户应该在他们的 {{Ic|.xinitrc}}里设置以下环境变量<br />
<br />
export _JAVA_AWT_WM_NONREPARENTING=1<br />
<br />
不设置这个的话会导致Java程序被绘制得不恰当.<br />
<br />
== 参阅 ==<br />
<br />
* [https://math.hws.edu/javanotes/ Introduction to Programming Using Java]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Distcc_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=659968
Distcc (简体中文)
2021-04-15T15:03:30Z
<p>VictriD: Update translation</p>
<hr />
<div>{{Lowercase title}}<br />
[[Category:Package development (简体中文)]]<br />
[[Category:Distributed computing (简体中文)]]<br />
[[Category:Networking (简体中文)]]<br />
[[Category:Development (简体中文)]] <br />
[[en:Distcc]]<br />
[[it:Distcc]]<br />
[[ja:Distcc]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|TORQUE}}<br />
{{Related|Slurm}}<br />
{{Related articles end}}<br />
{{翻译状态|Distcc|2021-04-15|658186}}<br />
[[Wikipedia:distcc|distcc]] 是一个将 C、C++、Objective C 或 Objective C++ 等程序的编译任务分发到网络中多个主机的程序。distcc 力求实现和本地编译相同的结果,安装、使用都很方便,而且通常比本地编译快很多。distcc 也可以与 Arch 原生的编译工具,比如 makepkg,很好搭配使用。<br />
<br />
== 名词定义 ==<br />
<br />
; 客户机: 启动编译的计算机。<br />
; 志愿机: 接受客户机发送的编译请求的计算机。一个 distcc 编译集群可以包含一台或多台志愿机。<br />
<br />
== 开始使用 ==<br />
<br />
将整个编译集群中的计算机都[[Install|安装]]软件包 {{pkg|distcc}}。如果是其他的发行版,甚至包括使用 Cygwin 的 Windows 操作系统,请阅读 [http://distcc.samba.org/doc.html distcc 文档]或 {{man|1|distcc}} 和 {{man|1|distccd}} 的手册页。请保持 distcc 使用的端口畅通(默认是TCP 3632 端口),参见[[:Category:Firewalls]]。<br />
<br />
== 配置 ==<br />
=== 工作模式 ===<br />
Distcc 可以在普通模式(默认模式)或泵模式下使用。简单来讲,这两个模式的核心区别在于如何处理预处理过的源代码。普通模式会传递预处理器展开过的源代码和编译选项,由客户机负责预处理,而泵模式会把预处理和编译工作全部分发到 distcc 编译集群中,通常会更快、效率更高。更多细节请参见手册页 {{ic|man distcc}}。<br />
<br />
=== 志愿机配置 ===<br />
<br />
志愿机的配置文件储存在 {{ic|/etc/conf.d/distccd}} 处。最简单的例子,是添加 --allow-private 选项,这样就能够覆盖整个 ipv4 局域网的范围。保存日志到文件也是排错时经常需要的:<br />
<br />
DISTCC_ARGS="--allow-private --log-file /tmp/distccd.log"<br />
<br />
如果设备有很多网卡,请考虑添加 --listen <监听地址>。其它设置请参考 {{man|1|distccd}}。<br />
<br />
在所有志愿机上[[Start|启动]]服务 {{ic|distccd.service}}。要使服务开机自启,请[[enable|启用]]此服务。<br />
<br />
=== 客户机配置 ===<br />
==== makepkg 编译选项 ====<br />
编辑{{ic|/etc/makepkg.conf}}的这些部分:<br />
<br />
# 确保 BUILDENV 数组中的 distcc 没有被禁用(即前面没有感叹号)<br />
# 取消注释并编辑''DISTCC_HOSTS''行 ,加入可以使用的志愿机的 IP 地址或主机名。可以加上一个正斜杠("/")以及最大使用线程数。不同 IP 地址用空白隔开,这个清单应该按照处理器性能从高到低排列。<br />
# 修改 MAKEFLAGS 中的 -jN 为所有使用线程数的和的两倍。在下面的示例为 2x(9+5+5+3)=44。<br />
<br />
{{Note|虽然 IP 地址或主机名都可以描述志愿机,但如果使用 devtools 的编译脚本,现在仍然不支持主机名解析,此时请使用 IP 地址代替。另外,每次编译都进行的主机名解析可能会塞满一些DNS设备的日志(比如pi-hole),此时指定 IP 地址就不会有这些麻烦。}}<br />
<br />
{{注意| {{ic|CFLAGS}} 和 {{ic|CXXFLAGS}} 中不能使用 {{ic|1=-march=native}} 选项,否则 distccd 不会将编译任务发给其它机器。}}<br />
<br />
另外,没有一个万能配置能够覆盖全部(尤其是线程数与 MAKEFLAGS 的并行线程数)。请一个一个测试您的参数,并与其他参数的结果做比较,以获取最优的配置。下面是一些例子。<br />
<br />
===== 普通模式例子 =====<br />
<br />
BUILDENV=(distcc fakeroot color !ccache check !sign)<br />
MAKEFLAGS="-j44"<br />
DISTCC_HOSTS="localhost/9 192.168.10.2/5 192.168.10.3/5 192.168.10.4/3"<br />
<br />
===== 泵模式例子 =====<br />
<br />
BUILDENV=(distcc fakeroot color !ccache check !sign)<br />
MAKEFLAGS="-j70"<br />
DISTCC_HOSTS="localhost/9 192.168.10.2,cpp,lzo 192.168.10.3,cpp,lzo 192.168.10.4,cpp,lzo"<br />
<br />
请注意以下事项:<br />
* 并行数高的话,泵模式的表现通常更好。<br />
* 在泵模式下,IP 地址或主机名会跟上指示泵模式所需要的",cpp,lzo"的后缀。此处的本机localhost没有加上这个后缀,这意味着,distcc会按照普通模式严格向localhost安排9个任务,并激进地以泵模式向志愿机分发其他任务,这是一个大集群中的通常实践:客户机通常不希望编译任务阻塞他们,以此限制客户机的任务数。如果您一视同仁,也可以加上这个后缀。<br />
* 正如提到的那样,没有一个万能配置能够覆盖全部情况。如何选择一个最优的设置通常需要一些经验。<br />
<br />
==== 非 makepkg 编译选项 ====<br />
===== 普通模式例子 =====<br />
<br />
下面的最小 distcc 客户机配置包括了志愿者设置,并将他们附加到PATH环境变量上。<br />
<br />
$ export PATH="/usr/lib/distcc/bin:$PATH"<br />
$ export DISTCC_HOSTS="localhost/9 192.168.10.2/5 192.168.10.3/5 192.168.10.4/3"<br />
<br />
===== 泵模式例子 =====<br />
<br />
$ export PATH="/usr/lib/distcc/bin:$PATH"<br />
$ export DISTCC_HOSTS="localhost/9 192.168.10.2,cpp,lzo 192.168.10.3,cpp,lzo 192.168.10.4,cpp,lzo"<br />
<br />
==编译==<br />
=== makepkg 编译 ===<br />
<br />
==== 普通模式 ====<br />
<br />
只要按照上面的过程配置好 {{ic|/etc/makepkg.conf}} 就可以了。正常运行 makepkg 即可。<br />
<br />
==== 泵模式 ====<br />
<br />
用户必须在编译前启动分发泵。因为分发泵pump程序会在启动时检查DISTCC_HOSTS是否正确配置,因此我们需要先定义一个 DISTCC_HOSTS 搪塞过去。makepkg 会使用 {{ic|/etc/makepkg.conf}} 里定义的变量,因此不会影响。<br />
<br />
$ export DISTCC_HOSTS="localhost,cpp,lzo"<br />
$ eval `pump --startup`<br />
<br />
然后正常运行 makepkg 即可。<br />
<br />
结束时,执行以下指令把分发泵关掉:<br />
$ pump --shutdown<br />
<br />
=== 非 makepkg 编译 ===<br />
<br />
==== 普通模式 ====<br />
按照[[#非 makepkg 编译选项]]章节配置好需要的变量后,直接调用编译器即可:<br />
$ make -j44<br />
<br />
有些程序可能需要定义CC 和/或 CXX 变量才能正常工作:<br />
$ make -j44 CC=distcc CXX=distcc<br />
<br />
==== 泵模式 ====<br />
<br />
按照上面一节方法操作分发泵。其他内容和普通模式相同。<br />
<br />
=== CMake 编译 ===<br />
<br />
使用以下 CMake 选项来使用 distcc 编译一个使用 CMake 管理的项目:<br />
<br />
$ cmake -DCMAKE_C_COMPILER_LAUNCHER=distcc -DCMAKE_CXX_COMPILER_LAUNCHER=distcc ...<br />
<br />
== 监视进度 ==<br />
软件包 {{Pkg|distcc}} 提供了一个命令行界面的监视器 {{ic|distccmon-text}} 来检查编译进度。<br />
<br />
如果在调用这个命令行界面监视器加上一个空格和一个等待秒数,就可以按照秒数不端更新显示。<br />
<br />
{{bc|$ distccmon-text 3<br />
29291 Preprocess probe_64.c 192.168.10.2[0]<br />
30954 Compile apic_noop.c 192.168.10.2[0]<br />
30932 Preprocess kfifo.c 192.168.10.2[0]<br />
30919 Compile blk-core.c 192.168.10.2[1]<br />
30969 Compile i915_gem_debug.c 192.168.10.2[3]<br />
30444 Compile block_dev.c 192.168.10.3[1]<br />
30904 Compile compat.c 192.168.10.3[2]<br />
30891 Compile hugetlb.c 192.168.10.3[3]<br />
30458 Compile catalog.c 192.168.10.4[0]<br />
30496 Compile ulpqueue.c 192.168.10.4[2]<br />
30506 Compile alloc.c 192.168.10.4[0]<br />
}}<br />
<br />
== 使用 distcc 交叉编译 ==<br />
交叉编译也可使用 distcc 助力。<br />
* 客户机必须运行在目标架构上。<br />
* 其他架构的志愿机可以协助编译,但必须安装对应的工具链,并配置 distcc。<br />
<br />
=== ARM 架构 Arch Linux 客户机与 x86_64 架构的志愿机 ===<br />
下面一节介绍了如何使用 x86_64 架构的志愿机来帮助 Arch Linux ARM 架构设备编译。只需要一台 x86_64 架构的志愿机就能够加快 2 到 4 倍的编译速度,具体可以参见[https://github.com/graysky2/distccd-alarm 这些测试]。<br />
<br />
==== 志愿机 ====<br />
Arch ARM 开发者''强烈''推荐使用并在 x86_64 架构的志愿机上安装官方的[https://archlinuxarm.org/wiki/Distcc_Cross-Compiling 工具链]。与其手动配置,[[AUR]]提供了所有的工具链、配置文件,和系统服务: <br />
* {{AUR|distccd-alarm-armv5}}<br />
* {{AUR|distccd-alarm-armv6h}}<br />
* {{AUR|distccd-alarm-armv7h}}<br />
* {{AUR|distccd-alarm-armv8}}<br />
<br />
这些工具链的配置过程和[[#志愿机配置]]一节完全相似,除了配置文件和系统服务文件对应包名有所更改。比如 '''armv7h''' 的配置文件是 {{ic|/etc/conf.d/distccd-'''armv7h'''}},systemd 服务文件是 {{ic|distccd-'''armv7h'''.service}}。<br />
<br />
注意这些工具链的端口都不同,使得他们可以共存而不冲突。请一定保持他们使用的端口畅通。(参见[[:Category:Firewalls]] 和手册页 {{man|1|distcc}})<br />
<br />
{| class="wikitable" align="center"<br />
|-<br />
! 目标架构 !! distcc 端口<br />
|-<br />
| ''armv5'' || 3633<br />
|- <br />
| ''armv6h'' || 3634<br />
|- <br />
| ''armv7h'' || 3635<br />
|- <br />
| ''armv8h/aarch64'' || 3636<br />
|- <br />
|}<br />
<br />
==== 客户机 ====<br />
配置 Arch ARM 客户机的最简单办法是使用{{AUR|distccd-arch-arm}}包。这个包提供了针对Arch ARM架构的所有四个配置文件和系统服务配置文件。比如说如果运行的是'''armv7h'''固件,只需要配置 {{ic|/etc/conf.d/distccd-'''armv7h'''}} 文件并按照上述内容编辑默认值。再启动 {{ic|distccd-'''armv7h'''.service}} 服务以编译。<br />
<br />
更详细的介绍,请参见[https://github.com/graysky2/distccd-arch-arm#usage-examples 使用示例]。<br />
<br />
如果希望不使用AUR包而手动配置客户机,可以按照通用的方法配置客户机,但需要更改如下两个内容来更改默认端口。例如(端口假设是按照上面的表格):<br />
# {{ic|/etc/conf.d/distcc}}: armv7h 示例: {{ic|1=DISTCC_ARGS="--allow-private --log-level info --log-file /tmp/distccd-armv7h.log --port 3635"}}<br />
# {{ic|/etc/makepkg.conf}}: armv7h 示例: {{ic|1=DISTCC_HOSTS="192.168.10.2/5:3635 192.168.10.3/5:3635"}}<br />
<br />
=== x86_64 架构的 Arch Linux 客户机与 ARM 架构志愿机 ===<br />
下面一节介绍了如何使用 ARM 架构的志愿机来帮助x86_64 架构客户机编译。只需要一台 x86_64 架构的志愿机就能够显著加快编译速度,两台设备就能翻倍。具体可以参见[https://github.com/graysky2/crosstool-ng_for_distcc#real-speed-gains-compiling-x86-64-can-be-realized-with-arm-volunteers 这些测试]。<br />
<br />
==== 客户机 ====<br />
可以按照通用的方法配置客户机,其对应的标准端口是 3632。<br />
<br />
==== 志愿机 ====<br />
{{AUR|distccd-x86_64}} 提供了装在 Arch ARM 设备上的交叉编译工具。<br />
<br />
=== 附加工具链 ===<br />
* [https://embtoolkit.org/ EmbToolkit]: 创建交叉编译工具链的工具;支持 ARM 和 MIPS 架构;支持创建LLVM工具链<br />
* [http://crosstool-ng.org/ crosstool-ng]:和EmbToolkit相似,支持更多架构(更多信息参见其网站)<br />
* [https://www.linaro.org/downloads/ Linaro]:提供了ARM开发的工具链<br />
<br />
{{ic|EmbToolkit}} 有一个很好看的配置工具链的图形配置菜单({{ic|make xconfig}})。<br />
<br />
== 故障排除 ==<br />
=== 编译 Arch Linux 内核包时的奇怪现象 ===<br />
如果使用官方的PKGBUILD来编译内核,distcc 将无法工作,因为内核硬编码使用了一些GCC插件,因为一些技术原因distccd不能够支持他们。<br />
<br />
可以通过编辑内核、删掉这些对 GCC 插件的要求来迂回。可以在编译前在 PKGBUILD 中用一行 sed 命令搞定:<br />
<br />
sed -i '/HAVE_GCC_PLUGINS/d' arch/x86/Kconfig<br />
<br />
如果不这样就无法编译。参见 {{Bug|64275}}。<br />
<br />
另一种办法是编译时传递 CC=distcc 和 CXX=distcc 变量:<br />
<br />
make all CC=distcc CXX=distcc<br />
<br />
=== 编译 chromium 包时的奇怪现象 ===<br />
编译 {{pkg|chromium}} 会使用 clang,目前受到[https://github.com/distcc/distcc/issues/368 issue#386]的影响。规避这个bug可以在PKGBUILD的{{ic|_flags}}数组中添加这些:<br />
'is_cfi=false'<br />
'use_gold=false'<br />
'clang_use_default_sample_profile=false'<br />
'chrome_pgo_phase=0'<br />
<br />
=== Journalctl ===<br />
<br />
使用 {{ic|journalctl}} 查看什么地方出错了:<br />
<br />
$ journalctl $(which distccd) -e --since "5 min ago"<br />
<br />
=== 调整日志记录等级 ===<br />
<br />
通常来说,distcc会把log写到 {{ic|/var/log/messages.log}} 里。一个技巧(这个是distccd的手册页推荐的)是写到其他文件里面,比如写到内存(通过 /tmp)里去。另一个技巧是提高日志记录等级,只记录错误信息。这个等级可以是任何标准系统日志等级,即critical、error、warning、notice、info,或者debug。<br />
<br />
在客户机上按照这些参数启动distcc,或修改志愿机的{{ic|/etc/conf.d/distccd}}文件的DISTCC_ARGS参数:<br />
<br />
DISTCC_ARGS="--allow 192.168.10.0/24 --log-level error --log-file /tmp/distccd.log"<br />
<br />
=== 修改 $HOME/.distcc 文件夹位置以减少硬盘读写 ===<br />
<br />
distcc 默认会创建 {{ic|$HOME/.distcc}} 文件夹来暂时保存节点编译相关的信息。下面的命令可以减少不必要的硬盘读写,尤其对 SSD 友好:<br />
<br />
$ export DISTCC_DIR=/tmp/distcc<br />
<br />
=== distccd-alarm 相关 ===<br />
==== 没有那个文件或目录 ====<br />
与下例类似的错误表明用户错误地启动了 {{pkg|distcc}} 而不是 distccd-alarm 包(即{{AUR|distccd-alarm-armv5}}、{{AUR|distccd-alarm-armv6h}}、{{AUR|distccd-alarm-armv7h}},或 {{AUR|distccd-alarm-armv8}})提供的distccd。<br />
<br />
请一定针对目标架构启动正确的服务。<br />
<br />
{{bc|distcc[25479] (dcc_execvp) ERROR: failed to exec armv7l-unknown-linux-gnueabihf-g++: No such file or directory<br />
}}<br />
<br />
== 另请参见 ==<br />
<br />
* https://github.com/distcc/distcc<br />
<br />
* {{AUR|icecream}} - 一个更好配置的 distcc 分支。</div>
VictriD
https://wiki.archlinux.org/index.php?title=Bash_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=659655
Bash (简体中文)
2021-04-14T17:07:26Z
<p>VictriD: Update translation.</p>
<hr />
<div>[[Category:Command-line shells (简体中文)]]<br />
[[Category:GNU (简体中文)]]<br />
[[de:Bash]]<br />
[[en:Bash]]<br />
[[es:Bash]]<br />
[[it:Bash]]<br />
[[ja:Bash]]<br />
[[ru:Bash]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Bash (简体中文)/Functions (简体中文)}}<br />
{{Related|Bash (简体中文)/Prompt customization (简体中文)}}<br />
{{Related|Environment variables (简体中文)}}<br />
{{Related|Readline (简体中文)}}<br />
{{Related|Fortune}}<br />
{{Related|Pkgfile (简体中文)}}<br />
{{Related|Command-line shell}}<br />
{{Related articles end}}<br />
<br />
{{TranslationStatus (简体中文)|Bash|2021-04-15|649256}}<br />
<br />
[https://www.gnu.org/software/bash/ Bash] (Bourne-again Shell) 是一个来自 [[GNU (简体中文)|GNU]]的[[Command-line shell|命令行解释器]]/编程语言。它的名字是向它的前身——很早以前的 Bourne shell 致敬。Bash可以运行在大部分类 UNIX 操作系统中,包括 GNU/Linux。<br />
<br />
Bash是Arch Linux的默认命令行解释器。<br />
<br />
== 调用 ==<br />
<br />
Bash 的运行方式会取决于 Bash 被调用的方式。下面是一些不同模式的描述。<br />
<br />
如果 Bash 以TTY中的{{ic|login}}、[[SSH (简体中文)|SSH]] 守护进程、或者其它类似的方式派生出来,我们称之为登录 (login) shell。你可以使用命令行选项 {{ic|-l}} 或 {{ic|--login}} 来使用这种模式。<br />
<br />
如果 Bash 的标准输入输出和标准错误输出都连接到终端(比如说,一个终端模拟器),并且在启动的时候既没有使用 {{Ic|-c}} 选项和[https://unix.stackexchange.com/a/96805 非选项参数](比如说,{{ic|bash '''script'''}}),我们称之为交互 (interactive) shell。所有的交互式 shell 都会执行{{ic|/etc/bash.bashrc}} 和 {{ic|~/.bashrc}} 文件中的配置,而登录shell还会执行{{ic|/etc/profile}} 和 {{ic|~/.bash_profile}} 中的配置。<br />
<br />
{{注意|在 Arch Linux 中 {{ic|/bin/sh}} (过去是 Bourne shell 的执行文件名) 是 {{ic|/bin/bash}} 的符号链接。如果 Bash 通过 {{ic|sh}} 方式调用,它会尽量模拟历史上 {{ic|sh}} 的启动行为,包括 POSIX 兼容能力。}}<br />
<br />
通过在Bash启动时使用 {{Ic|--posix}} 命令行参数或者在启动后执行 ‘{{Ic|set -o posix}}’ 来使Bash在增强的POSIX标准下运行。<br />
<br />
=== 配置文件 ===<br />
<br />
Bash会在启动时按照不同的启动方式执行一系列启动文件。关于更详尽的描述,您可以参考GNU Bash 指南中{{ic|/usr/share/doc/bash/bashref.html}} ([https://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files Bash启动文件])这一节。<br />
<br />
{| class="wikitable"<br />
! 文件<br />
! 描述<br />
! 登录 shell <br />
<sup>(见下)</sup><br />
! 交互 shell<br />
<sup>非登录</sup><br />
|-<br />
| {{ic|/etc/profile}}<br />
| [[Help:Reading (简体中文)#Source|加载]]全部储存在 {{ic|/etc/profile.d/*.sh}} 和 {{ic|/etc/bash.bashrc}} 中的配置。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|~/.bash_profile}}<br />
| 针对每个用户,紧接 {{ic|/etc/profile}} 执行。如果这个文件不存在,会顺序检查 {{ic|~/.bash_login}} 和 {{ic|~/.profile}} 文件。框架文件 {{ic|/etc/skel/.bash_profile}} 同时会引用 {{ic|~/.bashrc}}。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|~/.bash_logout}}<br />
| 针对每个用户,退出登录 shell 后。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|/etc/bash.bash_logout}}<br />
| 取决于 {{ic|1=-DSYS_BASH_LOGOUT="/etc/bash.bash_logout"}} 编译标记。退出登录 shell 后。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|/etc/bash.bashrc}}<br />
| 取决于编译标志 {{ic|1=-DSYS_BASHRC="/etc/bash.bashrc"}}。加载 {{ic|/usr/share/bash-completion/bash_completion}} 配置。<br />
| {{否}}<br />
| {{是}}<br />
|-<br />
| {{ic|~/.bashrc}}<br />
| 针对每个用户,在 {{ic|/etc/bash.bashrc}} 后加载。<br />
| {{否}}<br />
| {{是}}<br />
|}<br />
<br />
{{注意|<br />
* 如果以 {{ic|--login}} 调用,登录 shell 可能不是交互式的。<br />
* 如果可以交互,''非登录'' shell '''不会''' 加载 {{ic|~/.bash_profile}}。它会继承调用他们的父进程(可能是一个登录 shell)的环境参数。更多信息,请参考[[GregsWiki:ProcessManagement#On processes, environments and inheritance]]。<br />
}}<br />
<br />
=== Shell 与环境变量 ===<br />
<br />
Bash的行为和通过它启动的程序会被许多环境变量影响。[[Environment variables (简体中文)|环境变量]]用于储存有用的值,比如命令搜索路径,或者默认浏览器。当一个新的 shell 或者脚本被启动时,这个 shell 会继承它的父进程的环境变量,从而这个 shell 会带有内部 shell 变量[http://www.kingcomputerservices.com/unix_101/understanding_unix_shells_and_environment_variables.htm ]。<br />
<br />
这些内部 shell 变量可以以此导出以变成环境变量:<br />
<br />
VARIABLE=content<br />
export VARIABLE<br />
<br />
或者<br />
<br />
export VARIABLE=content<br />
<br />
环境变量依照惯例放置在{{ic|~/.profile}}或者{{ic|/etc/profile}}中,这样其他兼容 Bourne shell 的 shell 也可以使用。<br />
<br />
关于更详尽的内容,您可以参考[[Environment variables (简体中文)]]。<br />
<br />
== 命令行 ==<br />
<br />
Bash 的命令行由一个叫做 [[Readline (简体中文)|Readline]] 的分离库来管理。Readline 提供了[[emacs (简体中文)|emacs]] 和 [[vi (简体中文)|vi]] 风格的快捷键用于操作命令行,比如说,以单词为基准前后移动、删除等。管理输入[[Readline (简体中文)#历史|历史]]也是 Readline 的职责。它还允许你创造[[Readline (简体中文)#Macros|宏]]。<br />
<br />
=== Tab 键补全 ===<br />
<br />
[[Wikipedia:Command-line_completion|Tab 键补全]],提供在按下 {{ic|tab}} 键后自动补全命令的功能(这个功能默认启用)。<br />
<br />
==== Tab 按下的次数 ====<br />
<br />
可能最多需要按三次 tab 才能显示所有的补全选项。如果希望减少这个数值,请参考 [[Readline#Faster completion|更快的补全操作]]。<br />
<br />
==== 常用命令的选项补全 ====<br />
<br />
通常来讲,Bash 中按下 tab 只会补全命令、文件名和变量。安装 {{Pkg|bash-completion}} 包,并加载 {{ic|/usr/share/bash-completion/bash_completion}} 文件中的配置(这个文件应该已经在Arch的/etc/bash.bashrc中加载了),可以提供更多针对常见命令的选项的 tab 补全。安装这个包后,常规的补全(比如说 {{ic|$ ls file.*<tab><tab>}})可能会表现得不同。但是,您可以通过{ic|$ compopt -o bashdefault ''program''}}命令来重新启用。(更多细节,请参考 [https://bbs.archlinux.org/viewtopic.php?id=128471] and [https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html]。)<br />
<br />
==== 自定义命令补全 ====<br />
<br />
{{注意|使用 {{ic|complete}} 功能可能与 {{Pkg|bash-completion}} 冲突。}}<br />
<br />
通常来讲,Bash 中按下 tab 只会补全命令后的文件名。通过{{ic|complete -c}}命令,Bash 可以规定某些命令后的补全形式为命令,比如:<br />
{{hc|~/.bashrc|<br />
complete -c man which<br />
}}<br />
或通过{{ic|-cf}}命令,规定补全形式为命令和文件,比如:<br />
{{bc|complete -cf sudo}}<br />
更多补全形式,请参考Bash的手册页。<br />
<br />
=== 历史 ===<br />
<br />
==== 历史补全 ====<br />
<br />
您可以绑定上下键来在 Bash 的历史中查找(请参考 [[Readline (简体中文)#历史]] and [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline 启动文件语法]):<br />
<br />
{{hc|~/.bashrc|<br />
bind '"\e[A": history-search-backward'<br />
bind '"\e[B": history-search-forward'<br />
}}<br />
<br />
或者所有 Readline 程序:<br />
<br />
{{hc|~/.inputrc|<br />
"\e[A": history-search-backward<br />
"\e[B": history-search-forward<br />
}}<br />
<br />
==== 更近的历史记录 ====<br />
<br />
{{ic|HISTCONTROL}}变量可以避免历史记录记录特定的命令,比如不记录重复的命令<br />
{{hc|~/.bashrc|2=export HISTCONTROL=ignoredups}}<br />
将其设置为 {{ic|erasedups}} 可以让 Bash 的历史记录对一条命令只保留一个历史记录(与顺序无关)。更多选项,请参考Bash的手册页。<br />
<br />
==== 禁用历史记录 ====<br />
<br />
临时禁用历史记录:<br />
<br />
$ set +o history<br />
<br />
现在输入的命令将不会存入{{ic|$HISTFILE}}。<br />
<br />
比如说,你现在可以执行 {{ic|printf secret {{!}} sha256sum}} 来生成密码文件的散列值,或是隐藏您使用GPG的历史,如执行{{ic|gpg -eaF secret-pubkey.asc}}命令。这些秘密不会被写入磁盘。<br />
<br />
开启历史记录:<br />
<br />
$ set -o history<br />
<br />
{{提示|如果 {{ic|HISTCONTROL}} 变量包含了 {{ic|ignorespace}},以空格开头的命令将不会记入历史。这样可以更加方便地控制历史记录。更多细节,请参考{{man|1|bash|Shell Variables}}。}}<br />
<br />
禁用所有的 Bash 历史:<br />
<br />
{{hc|~/.bashrc or /etc/profile|2=<br />
export HISTSIZE=0<br />
}}<br />
<br />
为了保险(这会永远清除所有的历史记录):<br />
<br />
$ wipe -i -l2 -x4 -p4 "$HISTFILE"<br />
$ ln -sv /dev/null "$HISTFILE"<br />
<br />
=== 模仿 Zsh 的帮助功能 ===<br />
<br />
[[Zsh (简体中文)|Zsh]] 可以在光标指向命令的时候按 {{ic|Alt+h}} 来调用这个命令的手册。<br />
相同的行为可以通过这个 [[Readline (简体中文)]] 绑定在 Bash 中开启:<br />
<br />
{{hc|~/.bashrc|<nowiki><br />
run-help() { help "$READLINE_LINE" 2>/dev/null || man "$READLINE_LINE"; }<br />
bind -m vi-insert -x '"\eh": run-help'<br />
bind -m emacs -x '"\eh": run-help'<br />
</nowiki>}}<br />
<br />
这个操作假设你使用(默认的)Emacs [[Readline#Editing mode|编辑模式]]。<br />
<br />
== 别名 ==<br />
<br />
[[Wikipedia:alias|别名]](alias)是可以让您用另一个字符串来替换一个字符串的命令。这个命令常常被用来缩短系统命令,或者用来将默认参数加入到常用命令中。<br />
<br />
推荐将针对用户的别名保存在{{ic|~/.bashrc}}, 而将系统级的别名(这些会影响所有用户)存放在{{ic|/etc/bash.bashrc}}。别名的示例,请参考 [https://gist.github.com/anonymous/a9055e30f97bd19645c2]。<br />
<br />
关于函数,请参考 [[Bash (简体中文)/Functions (简体中文)|函数]]。<br />
<br />
== 提示与技巧 ==<br />
<br />
=== 自定义提示符 ===<br />
<br />
参见 [[Bash (简体中文)/Prompt customization (简体中文)|自定义提示符]]。<br />
<br />
=== 找不到命令 ===<br />
<br />
[[pkgfile (简体中文)|pkgfile]] 提供了一个"找不到命令"的钩子,可以在输入未知命令后自动查找官方的软件包。<br />
<br />
你需要[[Help:Reading (简体中文)#Source|加载]]这个钩子来启用它,如下:<br />
<br />
{{hc|~/.bashrc|<br />
source /usr/share/doc/pkgfile/command-not-found.bash}}<br />
<br />
现在,运行一个不可用的命令将会显示如下信息:<br />
<br />
{{hc|$ abiword|<br />
abiword may be found in the following packages:<br />
extra/abiword 3.0.1-2 /usr/bin/abiword<br />
}}<br />
<br />
{{注意|需要先更新 pkgfile 的数据库才能运作。更多细节,请参考[[pkgfile (简体中文)#安装]]。}}<br />
<br />
另一个"找不到命令"的钩子由 {{AUR|command-not-found}} 包提供,它看起来像这个样子:<br />
<br />
{{hc|$ abiword|<br />
The command 'abiword' is provided by the following packages:<br />
'''abiword''' (2.8.6-7) from extra<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from staging<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from testing<br />
[ abiword ]<br />
}}<br />
<br />
=== 在终端内禁用Ctrl+Z ===<br />
<br />
你可以相这样包装你的命令,来关闭 {{ic|Ctrl+Z}} 功能(暂停/关闭程序)。通过在这个脚本中包装命令<br />
<br />
#!/bin/bash<br />
trap "" 20<br />
''adom''<br />
<br />
这时如果你在玩 {{AUR|adom}} 要按 {{ic|Shift+Z}} 组合键时不小心按下了 {{ic|Ctrl+Z}} 组合键,你的游戏就不会停止运行了,因为我们已经禁用了{{ic|Ctrl+Z}}。<br />
<br />
=== 登出后清空屏幕 ===<br />
<br />
当登出虚拟终端时,清空屏幕:<br />
{{hc|~/.bash_logout|<br />
clear<br />
reset<br />
}}<br />
<br />
=== 输入路径自动添加"cd" ===<br />
<br />
Bash 可以自动在输入的一个路径前添加 {{ic|cd }}。比如说:<br />
{{hc|$ /etc|<br />
bash: /etc: Is a directory<br />
}}<br />
<br />
但是如果在 {{ic|.bashrc}} 文件里添加一行:<br />
{{hc|~/.bashrc|<br />
...<br />
shopt -s autocd<br />
...<br />
}}<br />
<br />
你会得到:<br />
[user@host ~]$ /etc<br />
cd /etc<br />
[user@host etc]$<br />
<br />
=== 自动跳转 ===<br />
<br />
{{AUR|autojump-git}} 允许在用户访问最多的路径中搜索文件系统。<br />
<br />
安装完后,[[Help:Reading (简体中文)#Source|加载]] {{ic|/etc/profile.d/autojump.bash}} 来启动这项功能。<br />
<br />
=== 防止覆盖文件 ===<br />
<br />
在当前的会话中,防止 shell 输出重定向覆盖一个已有的文件:<br />
<br />
$ set -o noclobber<br />
<br />
这和{{ic|set -C}}命令是一样的。<br />
<br />
如果想让该用户一直生效:<br />
<br />
{{hc|~/.bashrc|output=...<br />
set -o noclobber}}<br />
<br />
在设定 {{ic|noclobber}} 的情况下强制覆盖文件:<br />
<br />
$ echo "output" >| file.txt<br />
<br />
== 错误排除 ==<br />
<br />
===修正窗口大小调整时的换行===<br />
<br />
如果您调整了[[List of applications (简体中文)/Utilities (简体中文)#终端模拟器|终端模拟器]]的大小,Bash 可能并没有得到大小重调的信号,你键入的文本就不会正确的换行,并且与已输入内容重叠。启用 {{ic|checkwinsize}} 选项可以在每一个命令后检查窗口的大小,并按需更新 {{ic|LINES}} 和 {{ic|COLUMNS}} 的值来调整。<br />
<br />
{{hc|~/.bashrc|<br />
shopt -s checkwinsize<br />
}}<br />
<br />
=== 设置 ignoreeof 后 shell 仍然退出 ===<br />
<br />
如果您设置了 {{ic|ignoreeof}} 选项,但是如果重复按下 {{ic|ctrl-D}} shell 仍然会退出。因为这个选项只允许忽略 10 次连续的EOF记号(即 {{ic|Ctrl+D}})。<br />
<br />
如果需要将这个次数调的更高,需要使用 IGNOREEOF 变量。<br />
<br />
比如:<br />
export IGNOREEOF=100<br />
<br />
== 更多信息 (英语) ==<br />
<br />
* [[Wikipedia:Bash (Unix shell)]]<br />
* [https://www.gnu.org/software/bash/manual/bashref.html Bash 参考手册],或是 {{ic|/usr/share/doc/bash/bashref.html}}<br />
* [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline 启动文件语法]<br />
* [http://www.aosabook.org/en/bash.html The Bourne-Again Shell] - ''开源软件架构'' 第三章<br />
* [http://shellcheck.net Shellcheck] - Bash 脚本常见错误检查指南 (基于 [https://github.com/koalaman/shellcheck shellcheck])<br />
* [http://bashrcgenerator.com/ PS1 生成器] - 生成你的 .bashrc/PS1 脚本,这样就可以在命令行中使用鼠标拖拽了。<br />
* [https://serverfault.com/questions/3743/what-useful-things-can-one-add-to-ones-bashrc 有用的 .bashrc 命令] <br />
<br />
=== 教程 ===<br />
<br />
* [[GregsWiki:|Greg's Wiki]]<br />
* [[GregsWiki:BashGuide]]<br />
* [[GregsWiki:BashFAQ]]<br />
* [http://wiki.bash-hackers.org/doku.php Bash Hackers Wiki]{{Dead link (简体中文)|2020|12|20|status=SSL error}}<br />
* [http://wiki.bash-hackers.org/scripting/tutoriallist Bash Hackers Wiki: List of Bash online tutorials]{{Dead link (简体中文)|2020|12|20|status=SSL error}}<br />
* [http://www.grymoire.com/Unix/Quote.html Quote Tutorial]<br />
<br />
=== 社区 ===<br />
<br />
* [ircs://chat.freenode.net/bash 一个 Bash 的活跃友好的IRC频道]<br />
<br />
=== 例子 ===<br />
<br />
* [https://tldp.org/HOWTO/Xterm-Title-4.html 怎样修改 xterm 的标题]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Xmodmap_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=659651
Xmodmap (简体中文)
2021-04-14T16:52:00Z
<p>VictriD: Update translation.</p>
<hr />
<div>[[Category:Input devices (简体中文)]]<br />
[[Category:X server (简体中文)]]<br />
[[de:Xmodmap]]<br />
[[fr:Xmodmap]]<br />
[[ja:Xmodmap]]<br />
[[ru:Xmodmap]]<br />
[[zh-hans:Xmodmap]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Xorg}}<br />
{{Related|Keyboard input}}<br />
{{Related|Extra keyboard keys in console}}<br />
{{Related|Xbindkeys}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Xmodmap|2021-4-15|647793}}<br />
<br />
''xmodmap''是一个用于修改 [[Xorg]] 中键位图和指针按钮映射的工具。<br />
<br />
''xmodmap''与 [[X keyboard extension]] (XKB)没有直接关系。这两个程序对于X中的如何处理"键码"的理解是不一样的(xmodmap 更早)。一般来说,它只被推荐用于最简单的任务。请参阅 [[X keyboard extension]] 了解高级布局配置。<br />
<br />
{{Note|1=<nowiki></nowiki><br />
* ''xmodmap''设置会被''setxkbmap''重置,它不仅将字母数字键改变为映射表中的值,还将所有其他键重置为启动时的默认值。[http://wiki.linuxquestions.org/wiki/Configuring_keyboards]<br />
* 由于Xorg的限制,''xmodmap''设置不会自动应用到热插拔设备上。如果在应用了自定义映射表后,系统中添加了一个新的键盘,则必须重新应用自定义映射表。[https://bugs.freedesktop.org/show_bug.cgi?id=25262]<br />
}}<br />
<br />
== 简介 == <br />
<br />
在 [[Xorg]] 中有两种类型的键盘值:键码和键符。<br />
<br />
; 键码 keycode<br />
: 键码是当按键或鼠标按钮被按下时,内核收到的表示数字。<br />
; 键符 keysym<br />
: 键符是键码所对应的符号表达值。例如,按{{ic|a}}产生{{ic|38}}号键码,它被映射到{{ic|0×61}}号键符,对应 [[Wikipedia:ASCII|ASCII表]]中的 {{ic|a}}。<br />
: 在[[Xorg]]中,键符通过一个定义键码-键符对应关系的表管理。这个表叫做[[#键映射表|键映射表]]。可以通过运行{{ic|xmodmap}}来显示。<br />
<br />
== 安装 ==<br />
<br />
''xmodmap'' 由 {{Pkg|xorg-xmodmap}} 包提供。<br />
<br />
也可以安装 {{Pkg|xkeycaps}},这是一个''xmodmap''的图形前端。<br />
<br />
== 键映射表 ==<br />
<br />
打印以表达式格式呈现的键映射表:<br />
<br />
{{hc|$ xmodmap -pke|2=<br />
[...]<br />
keycode 57 = n N<br />
[...]<br />
}}<br />
<br />
每个键码后面都跟着映射到的键符。上面的例子意思是:键码{{ic|57}}被映射到小写{{ic|n}}键符,而大写{{ic|N}}键符则对应按下{{ic|Shift}}输入的{{ic|57}}号键码。<br />
<br />
表中的每一列键符都对应着一个特定的修饰键组合,Key为键码所对应的按键:<br />
# {{ic|Key}}<br />
# {{ic|Shift+Key}}<br />
# {{ic|Mode_switch+Key}}<br />
# {{ic|Mode_switch+Shift+Key}}<br />
# {{ic|ISO_Level3_Shift+Key}}<br />
# {{ic|ISO_Level3_Shift+Shift+Key}}<br />
<br />
并非所有的键符都必须设置,但如果要跳过一个键符,请将其值设为{{ic|NoSymbol}}。<br />
<br />
要查看一个键对应的键码,请参见[[Keyboard input#Identifying keycodes in Xorg]]以了解''xev''实用程序的细节,它将在你按下一个键时输出相关的键码与键符信息。<br />
<br />
{{小贴士|多媒体键有预定义的描述性键符,例如 {{ic|XF86AudioMute}} 或 {{ic|XF86Mail}} 。这些键符可以在{ {ic|/usr/include/X11/XF86keysym.h}} 中找到。许多多媒体程序都被设计成可以直接通过这些键符控制,而不需要配置任何第三方应用程序。<br />
}}<br />
<br />
请注意,xmodmap会受到 xkbd 设置的影响,所以所有8个键符都可以用于美式键盘(国际)的 xkbd 布局,但不能用于默认的没事键盘(它缺少ISO Level3中定义的ralt_switch符号)。为了让所有8个键位都可用,你应该配置把键盘设置为美式键盘(国际)。 以美式键盘布局为例,在调用 xmodmap 之前调用 {{ic|$ setxkbmap -layout 'us(intl)'}} 以在当前X会话中测试您的更改。要永久地做这个改变,请编辑 xorg 配置或您的 .xprofile 或 .xinitrc 文件。完整解释参见[[Xorg/Keyboard configuration#Setting keyboard layout]]。<br />
<br />
== 自定义映射表 ==<br />
<br />
创建一个键映射表(即文件 {{ic|~/.Xmodmap}}):<br />
$ xmodmap -pke > ~/.Xmodmap<br />
<br />
测试您的更改:<br />
$ xmodmap ~/.Xmodmap<br />
<br />
=== 激活自定义映射表 ===<br />
<br />
对于[[GDM]]、[[XDM]]或[[LightDM]],不需要特别加入{{ic|~/.Xmodmap}}。对于[[startx]],请使用:<br />
<br />
{{hc|~/.xinitrc|<nowiki><br />
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap<br />
</nowiki>}}<br />
<br />
也可以编辑全局启动脚本 {{ic|/etc/X11/xinit/xinitrc}}。<br />
<br />
=== 测试更改 ===<br />
<br />
进行临时修改:<br />
$ xmodmap -e "keycode 46 = l L l L lstroke lstroke lstroke"<br />
$ xmodmap -e "keysym a = e E"<br />
<br />
== 修饰键 ==<br />
<br />
''xmodmap''也可以用来覆盖[[Wikipedia:Modifier key|修饰键]],例如交换{{ic|Control}}和{{ic|Super}}(即 [[Wikipedia:Windows key|Windows 键]])。<br />
<br />
打印当前完整的修饰符表:<br />
{{hc|$ xmodmap -pm|2=<br />
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):<br />
<br />
shift Shift_L (0x32), Shift_R (0x3e)<br />
lock Caps_Lock (0x42)<br />
control Control_L (0x25), Control_R (0x69)<br />
mod1 Alt_L (0x40), Meta_L (0xcd)<br />
mod2 Num_Lock (0x94)<br />
mod3 <br />
mod4 Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)<br />
mod5 ISO_Level3_Shift (0x5c), ISO_Level3_Shift (0x6c), Mode_switch (0x85), Mode_switch (0xcb)<br />
}} <br />
<br />
=== 找到键符的修饰键 ===<br />
<br />
;ISO_Level3_Shift<br />
:非美式键盘上的AltGr键调用修饰键ISO_Level3_Shift。(在美式键盘上,右alt {{ic|Alt_R}}与左alt {{ic|Alt_L}}具有相同的功能,因此将布局设置为美式键盘(国际)会更灵活。参见[[#键映射表]])<br />
;Mode_switch<br />
:默认情况下,Mode_switch修饰键可能会被映射到一个虚拟的键。<br />
<br />
{{Note|修饰键{{ic|ISO_Level3_Shift}}和{{ic|Mode_switch}}的名称对于xmodmap和[[X keyboard extension#xmodmap|X键盘扩展]]是不同的。参见[https://unix.stackexchange.com/questions/55076/what-is-the-mode-switch-modifier-for]。}}<br />
<br />
=== 重新安排修饰键位 ===<br />
<br />
{{Note|xmodmap是''区分大小写''的。使用不正确的大小写,如{{ic|Mode_Switch}},(正确的是 {{ic|Mode_switch}})会导致错误。}}<br />
<br />
在重排之前,需要清除修饰键。原来的键和新的键都得清除。例如,如果您打算将{{ic|Caps_Lock}}换到A键,将{{ic|B}}换成NumLock键,那么{{ic|Caps_Lock}},{{ic|Num_Lock}},A,B四个键都得清除,然后分配键位,最后再把他们加回来。<br />
<br />
{{hc|~/.Xmodmap|2=<br />
[...]<br />
clear lock<br />
clear mod2<br />
keycode 38 = Caps_Lock<br />
keycode 77 = Num_Lock<br />
add lock = Caps_Lock<br />
add mod2 = Num_Lock<br />
}}<br />
<br />
{{ic|!}}用于注释一行,所以在下面的例子中,只有 {{ic|Control}} 和 {{ic|Mod4}} 这两个修饰符被清除。然后,键符{{ic|Control_L}}、{{ic|Control_R}}、{{ic|Super_L}}和{{ic|Super_R}}被分配给对应相反的修饰键。将左键和右键都分配给同一个修饰键意味着两个键会被当成同一个键。<br />
<br />
{{hc|~/.Xmodmap|2=<br />
[...]<br />
!clear Shift<br />
!clear Lock<br />
clear Control<br />
!clear Mod1<br />
!clear Mod2<br />
!clear Mod3<br />
clear Mod4<br />
!clear Mod5<br />
!add Shift = Shift_L Shift_R<br />
!add Lock = Caps_Lock<br />
add Control = Super_L Super_R<br />
!add Mod1 = Alt_L Alt_R<br />
!add Mod2 = Mode_switch<br />
!add Mod3 =<br />
add Mod4 = Control_L Control_R<br />
!add Mod5 =<br />
}}<br />
<br />
{{Note|本例假设{{ic|Control_L}}和{{ic|Control_R}}键符分配给了{{ic|Control}}修饰键,{{ic|Super_L}}和{{ic|Super_R}}键符分配给了{{ic|Mod4}}修饰键。如果你得到以下错误信息{{ic|X Error of failed request: BadValue (integer parameter out of range for operation)}},您需要进行相应的调整。运行{{ic|xmodmap}}会产生一个修饰键和分配给它们的键符列表。}}<br />
<br />
下面的例子将{{ic|CapsLock}}修改为{{ic|Control}},将{{ic|Shift+CapsLock}}修改为{{ic|CapsLock}}:<br />
{{hc|~/.Xmodmap|2=<br />
clear lock<br />
clear control<br />
add control = Caps_Lock Control_L Control_R<br />
keycode 66 = Control_L Caps_Lock NoSymbol NoSymbol<br />
}}<br />
<br />
== 反向滚动 ==<br />
<br />
OS X Lion中可用的[https://who-t.blogspot.com/2011/09/natural-scrolling-in-synaptics-driver.html 自然滚动]功能(模仿智能手机或平板电脑滚动)可以通过''xmodmap''来[https://bbs.archlinux.org/viewtopic.php?id=126258 实现]。由于 synaptics 驱动程序使用 4/5/6/7 按钮进行上/下/左/右滚动,你只需要调换一下 {{ic|~/.Xmodmap}} 中按钮的声明顺序:<br />
<br />
{{hc|~/.Xmodmap|2=<br />
pointer = 1 2 3 '''5 4''' 7 6 8 9 10 11 12<br />
}}<br />
<br />
然后更新''xmodmap'':<br />
$ xmodmap ~/.Xmodmap<br />
<br />
== 交换鼠标按钮 ==<br />
<br />
鼠标左、中、右按钮分别对应于 synaptics 驱动程序中的按钮 1、2和3。如果要交换鼠标左键和右键,也只需将它们在{{ic|~/.Xmodmap}}中的顺序颠倒过来即可。<br />
<br />
{{hc|~/.Xmodmap|2=<br />
pointer = '''3 2 1'''<br />
}}<br />
<br />
这对于一个简单的鼠标设置来说应该足够了。再次更新''xmodmap''。<br />
$ xmodmap ~/.Xmodmap<br />
<br />
== 模板 ==<br />
<br />
=== 西班牙语 === <br />
<br />
{{hc|~/.Xmodmap|<br />
keycode 24 &#61; a A aacute Aacute ae AE ae<br />
keycode 26 &#61; e E eacute Eacute EuroSign cent EuroSign<br />
keycode 30 &#61; u U uacute Uacute downarrow uparrow downarrow<br />
keycode 31 &#61; i I iacute Iacute rightarrow idotless rightarrow<br />
keycode 32 &#61; o O oacute Oacute oslash Oslash oslash<br />
keycode 57 &#61; n N ntilde Ntilde n N n<br />
keycode 58 &#61; comma question comma questiondown dead_acute dead_doubleacute dead_acute<br />
keycode 61 &#61; exclam section exclamdown section dead_belowdot dead_abovedot dead_belowdot<br />
!Maps the Mode key to the Alt key<br />
keycode 64 &#61; Mode_switch<br />
}}<br />
<br />
=== 将 CapsLock 换成 Control ===<br />
<br />
将 {{ic|CapsLock}} 改为 {{ic|Control}} 的最简单的例子。<br />
<br />
{{hc|~/.Xmodmap|<nowiki><br />
clear lock<br />
clear control<br />
keycode 66 = Control_L<br />
add control = Control_L Control_R<br />
</nowiki>}}<br />
<br />
=== 将CapsLock转为Control,将左Control转为Hyper ===<br />
<br />
笔记本用户可能更喜欢将{{ic|CapsLock}}作为{{ic|Control}}。{{ic|Left Control}}键可以作为{{ic|Hyper}}修饰键(emacs、openbox或i3的附加修饰键)。<br />
<br />
{{hc|~/.Xmodmap|<nowiki><br />
clear lock <br />
clear control<br />
clear mod1<br />
clear mod2<br />
clear mod3<br />
clear mod4<br />
clear mod5<br />
keycode 37 = Hyper_L<br />
keycode 66 = Control_L<br />
add control = Control_L Control_R<br />
add mod1 = Alt_L Alt_R Meta_L<br />
add mod2 = Num_Lock<br />
add mod3 = Hyper_L<br />
add mod4 = Super_L Super_R<br />
add mod5 = Mode_switch ISO_Level3_Shift<br />
</nowiki>}}<br />
<br />
=== 把右 Super 变成右 Hyper ===<br />
<br />
如果用户希望在全键盘布局中使用 Hyper 键,不妨将右 Super 键作为 Hyper 键。<br />
<br />
{{hc|~/.Xmodmap|<nowiki><br />
remove mod4 = Super_R<br />
keycode 134 = Hyper_R<br />
add mod3 = Hyper_R<br />
</nowiki>}}<br />
<br />
=== 将Shift-数字键与数字键对换(克罗地亚语布局) ===<br />
<br />
对于类似克罗地亚语的布局应该也能正常工作。<br />
<br />
{{hc|~/.Xmodmap|<nowiki><br />
keycode 10 = exclam 1 1 exclam asciitilde dead_tilde asciitilde<br />
keycode 11 = quotedbl 2 2 quotedbl dead_caron caron dead_caron<br />
keycode 12 = numbersign 3 3 numbersign asciicircum dead_circumflex asciicircum<br />
keycode 13 = dollar 4 4 dollar dead_breve breve dead_breve<br />
keycode 14 = percent 5 5 percent degree dead_abovering degree<br />
keycode 15 = ampersand 6 6 ampersand dead_ogonek ogonek dead_ogonek<br />
keycode 16 = slash 7 7 slash grave dead_grave grave<br />
keycode 17 = parenleft 8 8 parenleft dead_abovedot abovedot dead_abovedot<br />
keycode 18 = parenright 9 9 parenright dead_acute apostrophe dead_acute<br />
keycode 19 = equal 0 0 equal dead_doubleacute doubleacute dead_doubleacute<br />
</nowiki>}}<br />
<br />
== 另见 ==<br />
<br />
* {{man|1|xmodmap}}。<br />
* Christian Weiske 写的 [http://cweiske.de/howto/xmodmap/allinone.html .Xmodmap 与多媒体键]<br />
*Pascal Bleser 写的 [https://dev-loki.blogspot.com/2006/04/mapping-unsupported-keys-with-xmodmap.html 使用 xmodmap 映射键盘上缺少的键]<br />
*[http://linuxquestions.org LinuxQuestions]上的[http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap Xmodmap识别的键符列表]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Cron_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=653633
Cron (简体中文)
2021-02-27T14:52:06Z
<p>VictriD: Update translation.</p>
<hr />
<div>[[Category:System administration (简体中文)]]<br />
[[de:Cron]]<br />
[[en:Cron]]<br />
[[fr:Cron]]<br />
[[ja:Cron]]<br />
[[ko:Cron]]<br />
[[sk:Cron]]<br />
[[zh-hant:Cron]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|systemd/Timers (简体中文)}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Cron|2021-02-27|638976}}<br />
摘自 [[Wikipedia:Cron|Wikipedia]]:<br />
<br />
:''cron'' 是一个在 Unix 及类似操作系统上执行计划任务的程序。cron 使用户能够安排工作(命令或shell脚本)在特定时间、日期或间隔定期运行,通常用于系统的自动化维护或者管理。<br />
<br />
== 安装 ==<br />
<br />
cron 有多个实现程序,但是基础系统默认使用 [[systemd/Timers (简体中文)|systemd 的 Timers]],下面的实现都不被默认安装。[http://www.gentoo.org/doc/en/cron-guide.xml Gentoo Linux Cron 指南] 提供了一个这些实现之间的比较。<br />
<br />
可用的包:<br />
<br />
* {{Pkg|cronie}}<br />
* {{Pkg|fcron}}<br />
* {{AUR|dcron}}<br />
* {{AUR|vixie-cron}}<br />
* {{AUR|scron-git}}<br />
<br />
== 配置 ==<br />
<br />
=== 激活及开机启动 ===<br />
<br />
安装后,默认的守护进程不会启动。安装的软件包通常提供了可以用 [[systemd#Using units|systemctl]] 控制的服务文件。例如 ''cronie'' 使用 {{ic|cronie.service}}。<br />
<br />
{{ic|/etc/cron.daily/}} 和类似的目录包含当前的任务,启动 cron 服务时会触发所有这类任务。<br />
<br />
{{Note|''cronie'' 提供了 {{ic|0anacron}} 任务,每小时执行一次,它允许[[#异步任务处理|延迟运行]]其他某些任务,比如因为未开机而延迟的任务。}}<br />
<br />
=== 处理任务中的错误 ===<br />
<br />
cron 会记录 ''stdout'' 和 ''stderr'' 的输出并尝试通过 {{ic|sendmail}} 命令发送邮件给用户。如果 Cronie 未找到 {{ic|/usr/bin/sendmail}},则会禁用邮件通知。要发送邮件到用户的 spool,需要在系统上运行一个 smtp 守护进程,例如 {{Pkg|opensmtpd}}。也可以安装提供 sendmail 命令的软件包,然后配置成通过外部邮件服务器发送邮件。或者使用 {{ic|-m}} 选项将错误记录到日志并通过定制的脚本进行处理。<br />
<br />
{{Tip|通过 [[Postfix_(简体中文)#系统本地用户邮件(Local_mail)|Postfix/localmail]] 可以发送邮件到本地系统。}}<br />
<br />
# [[Edit|编辑]] {{ic|cronie.service}} 服务。<br />
# 安装 {{AUR|esmtp}}, [[msmtp]], {{Pkg|opensmtpd}}, [[SSMTP|ssmtp]] 或编写自定义脚本。<br />
<br />
==== 使用 ssmtp 的例子 ====<br />
<br />
ssmtp 是一个仅包含发送功能的 sendmail 模拟器,可以从本地计算机向 smtp 服务器发送邮件。尽管目前已经没有活跃维护者,这个程序依然是发送邮件的最简单方式。不需要运行守护进程,配置可以简单到只需在一个配置文件中编辑三行即可(如果你的主机是受信任的,可以通过你的邮件服务提供商转发未经认证的邮件)。ssmtp 无法收取邮件、展开别名或管理队列。<br />
<br />
安装 {{AUR|ssmtp}},安装时会创建链接 {{ic|/usr/bin/sendmail}} 指向 {{ic|/usr/bin/ssmtp}}。安装后编辑 {{ic|/etc/ssmtp/ssmtp.conf}} 配置文件。详情请参考 [[SSMTP|ssmtp]],到 {{ic|/usr/bin/sendmail}} 的软链接可以确保 [[S-nail]] 等提供 {{ic|/usr/bin/mail}} 的程序可以无需修改直接使用。<br />
<br />
安装配置完成后重启 {{ic|cronie}} 以确保 cronie 能够检测到新配置的 {{ic|/usr/bin/sendmail}} 命令。<br />
<br />
==== 使用 msmtp 的例子 ====<br />
<br />
安装 {{Pkg|msmtp-mta}}, 安装时会创建链接 {{ic|/usr/bin/sendmail}} 指向 {{ic|/usr/bin/msmtp}}。重启 {{ic|cronie}} 以确保 cronie 能够检测到新配置的 {{ic|/usr/bin/sendmail}} 命令。你必须提供一种方法让 {{ic|msmtp}} 能够将你的用户名转换成电子邮件地址。<br />
<br />
然后要么在你的 crontab 中添加 {{ic|MAILTO}} 行:<br />
<br />
<nowiki>MAILTO=your@email.com</nowiki><br />
<br />
'''要么''' 创建 {{ic|/etc/msmtprc}} 文件,并添加这一行:<br />
<br />
aliases /etc/aliases<br />
<br />
并创建 {{ic|/etc/aliases}} 文件:<br />
<br />
your_username: your@email.com<br />
# 可选:<br />
default: your@email.com<br />
<br />
然后[[Systemd#Editing provided units|修改]] ''cronie'' 的配置,将''cronie'' 守护进程的 {{ic|ExecStart}} 命令替换为<br />
<br />
ExecStart=/usr/bin/crond -n -m '/usr/bin/msmtp -t'<br />
<br />
==== 使用 esmtp 的例子 ====<br />
<br />
安装 {{AUR|esmtp}} 和 {{Pkg|procmail}}。<br />
<br />
安装完成后,进行如下配置:<br />
{{hc|/etc/esmtprc|<br />
identity ''myself''@myisp.com<br />
hostname mail.myisp.com:25<br />
username ''"myself"''<br />
password ''"secret"''<br />
starttls enabled<br />
default<br />
mda "/usr/bin/procmail -d %T"<br />
}}<br />
<br />
Procmail 需要 root 权限才能在投递模式下工作,但如果你是以 root 身份运行 cronjobs,就不会有这个问题。<br />
<br />
要测试一切是否正常工作,请创建一个内容为 {{ic|"test message"}} 的 {{ic|message.txt}} 文件。<br />
<br />
在同一目录下运行:<br />
<br />
$ sendmail ''user_name'' < message.txt <br />
<br />
紧接着:<br />
<br />
$ cat /var/spool/mail/''user_name''<br />
<br />
现在您应该看到测试信息以及发送的时间和日期。<br />
<br />
所有作业的错误输出现在会被重定向到 {{ic|/var/spool/mail/''user_name''}}。<br />
<br />
由于权限问题,很难创建和发送邮件给root用户(比如 {{ic|su -c ""}})。你可以要求 {{ic|esmtp}} 将 root 的所有邮件转发给普通用户,方法是:<br />
{{hc|/etc/esmtprc|<br />
2=force_mda="''user-name''"<br />
}}<br />
<br />
{{Note|如果上述测试没有成功,您可以尝试在 {{ic|~/.esmtprc}} 中创建一个具有相同内容的本地配置。<br />
<br />
运行下面的命令以确保它有正确的权限: <br />
<br />
$ chmod 710 ~/.esmtprc<br />
<br />
然后用 {{ic|message.txt}} 文件重新运行一遍上面的测试。}}<br />
<br />
==== 使用 opensmtpd 的例子 ====<br />
<br />
安装 {{Pkg|opensmtpd}}。<br />
<br />
编辑 {{ic|/etc/smtpd/smtpd.conf}}。下面的配置允许本地投递:<br />
<br />
listen on localhost<br />
action "local" mbox alias <aliases><br />
match for local action "local"<br />
<br />
您现在可以进行测试。[[start|运行]] {{ic|smtpd.service}},然后执行:<br />
$ echo test | sendmail user<br />
<br />
''user'' 可以用任何 能够处理 mbox 格式的[[:Category:Email clients|邮件阅读器]]来检查邮件,或者直接查看 {{ic|/var/spool/mail/''user''}} 文件。如果一切都符合预期,您可以[[enable|启用]] openmtpd 使其开机运行。<br />
<br />
这种方法的好处是不需要向远程服务器发送本地 cron 通知。但缺点是需要运行一个新的守护进程。<br />
<br />
{{Note|<br />
* 在写这篇文章的时候,Arch 的 opensmtpd 包还没有在 {{ic|/var/spool/smtpd}} 下创建好所有需要的目录,但是守护进程会在需要指定所有者和权限时发出警告。只需按照警告创建即可。<br />
* 尽管上文的配置中程序并不会接受远程连接,但使用[[iptables]]或类似的方法来阻止端口 25 也是预防措施。<br />
}}<br />
<br />
==== 运行时间很长的 cron 任务 ====<br />
<br />
假设 cron 调用了这个脚本:<br />
<br />
#!/bin/sh<br />
echo "我有一个可恢复错误!"<br />
sleep 1h<br />
<br />
这时会发生以下事件:<br />
# cron 运行这个脚本<br />
# 一旦 cron 检查到脚本有输出,就会启动你的邮件传输程序,并向通过管道其传递一些必要的头部内容。因为脚本还没有结束,还会有更多的输出,管道就没有关闭。<br />
# 邮件传输程序打开到邮件服务器的链接,并等待后续的输出。<br />
# 邮件服务器会在特定时间后关掉这个空闲的链接,你会受到类似这样的错误postfix closes the idle connection after less than an hour and you get an error like this :<br />
smtpmsg='421 ... Error: timeout exceeded' errormsg='the server did not accept the mail' (服务器没有接受邮件)<br />
<br />
要解决这个问题,你可以使用 {{Pkg|moreutils}} 中的 chronic 或 sponge 命令。<br />
它们各自的手册页面中写道:<br />
; chronic(时序): chronic 运行一个命令时,会缓存它的标准输出和标准错误输出,并只在命令失败(返回值非零或崩溃)的情况下才会一并输出。如果命令成功执行,任何无关的输出将被隐藏。<br />
; sponge(海绵): sponge 读取标准输入并将其写入指定的文件。不同于 shell 重定向,sponge 在打开输出文件之前会吸收所有的输入……如果没有指定输出文件,sponge 会输出到标准输出。<br />
<br />
Chronic也会在打开标准输出之前缓冲命令输出。<br />
<br />
== Crontab 格式 ==<br />
<br />
crontab 的基本格式是:<br />
<br />
''分'' ''时'' ''日'' ''月'' ''星期'' ''命令''<br />
<br />
* ''分'' 值从 0 到 59。<br />
* ''时'' 值从 0 到 23。<br />
* ''日'' 值从 1 到 31。<br />
* ''月'' 值从 1 到 12。<br />
* ''星期'' 值从 0 到 6, 0 代表星期日。<br />
<br />
空格用来分开字段,要微调你的时间表,也可以用下面特殊字符来设定范围:<br />
<br />
{| class="wikitable" style="text-align: center"<br />
!符号!!描述<br />
|-<br />
| '''*''' || 通配符,表示所有支持的时间值<br />
|-<br />
| ''',''' || 用逗号分隔多个时间<br />
|-<br />
| '''-''' || 连接两个数值,给出一个范围<br />
|-<br />
| '''/''' || 指定一个周期或频率<br />
|-<br />
|}<br />
<br />
例如,下面一行:<br />
<br />
*/5 9-16 * 1-5,9-12 1-5 ~/bin/i_love_cron.sh<br />
<br />
将会在周内从早上 9 点到下午 4 点 55 分,每隔 5 分钟执行一次脚本 {{ic|i_love_cron.sh}},夏季除外(6月、7月和8月)。<br />
<br />
此外,crontab 还有一些特殊的关键字。<br />
<br />
@reboot 启动时<br />
@yearly 每年一次<br />
@annually ( 同 @yearly)<br />
@monthly 每月一次<br />
@weekly 每周一次<br />
@daily 每天一次<br />
@midnight (午夜,同 @daily)<br />
@hourly 每小时一次<br />
<br />
例如:<br />
<br />
@reboot ~/bin/i_love_cron.sh<br />
<br />
将在启动时执行脚本 {{ic|i_love_cron.sh}}。<br />
<br />
更多信息参见: http://www.adminschoice.com/crontab-quick-reference<br />
<br />
更多的例子和高级配置技巧可以在下面找到。<br />
<br />
== 基本命令 ==<br />
<br />
Crontabs 绝不应该被直接编辑;用户应该使用 ''crontab'' 程序来处理他们的 crontabs。为了能够访问这个命令,用户必须添加到 users 用户组(见 gpasswd 命令)。<br />
<br />
要查看 crontabs,用户应该运行下面的命令:<br />
<br />
$ crontab -l<br />
<br />
要编辑 crontabs,可以使用:<br />
<br />
$ crontab -e<br />
<br />
{{Note|默认情况下,{{ic|crontab}} 命令使用 {{ic|vi}} 编辑器。可以通过[[export]] {{ic|EDITOR}} 或 {{ic|VISUAL}} 来配置,或通过这样的命令直接指定编辑器:{{ic|1=EDITOR=vim crontab -e}}。}}<br />
<br />
要移除 crontabs, 可以使用:<br />
<br />
$ crontab -r<br />
<br />
如果用户有一个保存好的 crontab 想要用它完全覆盖旧的 crontab,可以使用:<br />
<br />
$ crontab ''saved_crontab_filename''<br />
<br />
想从命令行([[Wikipedia:stdin]])覆盖一个 crontab,使用:<br />
<br />
$ crontab - <br />
<br />
想编辑别的用户的 crontab, 使用root运行下面的命令:<br />
<br />
# crontab -u ''username'' -e<br />
<br />
同一个格式(在命令后追加 {{ic|-u ''username''}})也可以用来列出或删除 crontabs。<br />
<br />
== 范例 ==<br />
<br />
下面的条目:<br />
<br />
01 * * * * /bin/echo Hello, world!<br />
<br />
将会在每个月的每一天的每一个小时的第一分钟(例如,在12:01,1:01,2:01等)执行命令 {{ic|/bin/echo Hello, world!}} <br />
<br />
类似地,<br />
<br />
*/5 * * jan mon-fri /bin/echo Hello, world!<br />
<br />
将会在一月的每个工作日每五分钟(例如,在12:00,12:05,12:10等)执行一次相同的命令。<br />
<br />
和前文 ''Crontab 格式''一章相同,这一行<br />
<br />
*0,*5 9-16 * 1-5,9-12 1-5 /home/user/bin/i_love_cron.sh<br />
<br />
将会在周内从早上 9 点到下午 4 点 55 分,每隔 5 分钟执行一次脚本 {{ic|i_love_cron.sh}},夏季除外(6月、7月和8月)。<br />
<br />
也可以像这样输入周期性设置:<br />
<br />
{{bc|1=# Chronological table of program loadings <br />
# Edit with "crontab" for proper functionality, "man 5 crontab" for formatting<br />
# User: johndoe<br />
<br />
# mm hh DD MM W /path/progam [--option]... ( W = weekday: 0-6 [Sun=0] )<br />
21 01 * * * /usr/bin/systemctl hibernate<br />
@weekly $HOME/.local/bin/trash-empty<br />
}}<br />
<br />
下面是一些不言自明的crontab语法例子:<br />
<br />
{{bc|<br />
30 4 echo "四点半了。"<br />
0 22 echo "晚上十点了。"<br />
30 15 25 12 echo "现在是圣诞节下午三点半。"<br />
30 3 * * * echo "每天早上三点半提醒我。"<br />
0 * * * * echo "新的一个小时到来了。"<br />
0 6 1,15 * * echo "每月1号和15号的早上六点。"<br />
0 6 * * 2,3,5 echo "周二三四的早上六点。"<br />
59 23 * * 1-5 echo "周内每天的最后一分钟。"<br />
0 */2 * * * echo "每两个小时。"<br />
0 20 * * 4 echo "周四的晚上八点。"<br />
0 20 * * Thu echo "周四的晚上八点。"<br />
*/15 9-17 * * 2-5 echo "周内朝九晚五的每一刻钟。"<br />
@yearly echo "新年好!"<br />
}}<br />
<br />
== 默认编辑器 ==<br />
<br />
要修改默认编辑器,请在 shell 初始化脚本中定义 {{ic|EDITOR}} 环境变量,如[[Environment variables|环境变量]]所述。<br />
<br />
作为普通用户,需要使用 {{ic|su}} 代替 {{ic|sudo}} 来正确拉取环境变量:<br />
<br />
$ su -c "crontab -e"<br />
<br />
如果希望给这个命令取别名,因为 su 会在一个新启动的子 shell 中启动,为了防止一些以外的发生,需要用 {{ic|printf}} 加一个任意字符串,来提醒你仍然在 root 下运行:<br />
<br />
alias scron="su -c $(printf "%q " "crontab -e")"<br />
<br />
== 运行基于 X.org 的应用程序 ==<br />
<br />
Cron 不在 X.org 下运行,因此它无法知道启动 X.org 应用程序所需的环境变量,因此必须显式定义。我们可以使用类似 {{AUR|xuserrun-git}} 这样的程序来完成:<br />
<br />
17 02 * ... /usr/bin/xuserrun /usr/bin/xclock<br />
<br />
或者可以手动定义它们({{ic|echo $DISPLAY}} 将给出当前的 DISPLAY 环境变量值):<br />
<br />
17 02 * ... env DISPLAY=:0 /usr/bin/xclock<br />
<br />
如果需要在 cron 中运行 notify-send 进行桌面通知,因为 notify-send 通过 dbus 发送值。需要告诉 dbus 连接到正确的总线。<br />
通过检查 DBUS_SESSION_BUS_ADDRESS 环境变量,并设置为相同的值,就可以找到地址。因此:<br />
<br />
17 02 * ... env DBUS_SESSION_BUS_ADDRESS=your-address notify-send 'Foo bar'<br />
<br />
如果是通过SSH完成的,需要给与权限:<br />
<br />
# xhost +si:localuser:$(whoami)<br />
<br />
== 异步任务处理 ==<br />
<br />
如果你经常关机,但又不想错过任务的执行,这里有一些解决方案(从最简单到最难):<br />
<br />
=== Cronie ===<br />
{{Pkg|cronie}} 内含 anacron。其项目主页介绍道:<br />
<br />
Cronie 包含了标准的 UNIX 守护进程 crond,它可以在预定的时间运行指定的程序和相关工具。<br />
它基于最初的 cron,并增强了安全性和配置功能,比如可以使用 pam 和 SELinux。<br />
<br />
=== Dcron ===<br />
<br />
Vanilla {{AUR|dcron}} 支持异步任务处理。只要用@hourly、@daily、@weekly或者@monthly加上任务名就可以了:<br />
<br />
@hourly ID=greatest_ever_job echo This job is very useful.<br />
<br />
=== Cronwhip ===<br />
<br />
{{AUR|cronwhip}} 是一个自动运行遗漏的 cron 任务的脚本。它与以前的默认 cron 实现 ''dcron'' 一起工作。<br />
另见这个[https://bbs.archlinux.org/viewtopic.php?id=57973 论坛帖子]。<br />
<br />
=== Anacron ===<br />
Anacron 是 ''dcron'' 的完全替代者,它可以异步处理任务。<br />
<br />
它由 {{Pkg|cronie}} 提供,通过 {{ic|/etc/anacrontab}} 进行配置。关于格式的信息可以在 {{ic|anacrontab(5)}} [[man page]] 中找到。运行 {{ic|anacron -T}} 可以测试 {{ic|/etc/anacrontab}} 的有效性。<br />
<br />
=== Fcron ===<br />
<br />
和''anacron''一样,{{Pkg|fcron}} 假设计算机并不总是在运行。但与''anacron''不同的是,它可以在比一天更短的时间内安排这些事件,这对于经常暂停/休眠的系统(例如笔记本电脑)可能很有用。和 cronwhip 一样, fcron 也可以运行那些本应在计算机停机期间运行的作业。<br />
<br />
用 fcron 取代 {{Pkg|cronie}} 时,spool 目录会变为 {{ic|/var/spool/fcron}},并使用 {{ic|fcrontab}} 命令代替 ''crontab'' 来编辑用户的 crontabs。这些 crontab 以二进制格式存储,其旁边的文本版本在 spool 目录中为 ''foo''.orig。由于这种行为上的差异,任何手动编辑的用户 crontabs 可能需要进行调整。<br />
<br />
一个快速的脚本小程序,可以帮助您将传统的用户 crontabs 转换为 fcron 格式:<br />
<br />
{{bc|<br />
cd /var/spool/cron && (<br />
for ctab in *; do<br />
fcrontab ${ctab} -u ${ctab}<br />
done<br />
)<br />
}}<br />
<br />
另见这个[https://bbs.archlinux.org/viewtopic.php?id=140497 论坛主题]。<br />
<br />
== 确保排他性 ==<br />
<br />
如果您有可能运行很久的任务(比如说变化很多或者网速突然变慢,备份可能会偶尔运行很长时间),那么 {{ic|flock}}({{Pkg|util-linux}})可以确保 cron 任务在同一时间点只有一个运行。<br />
<br />
5,35 * * * * /usr/bin/flock -n /tmp/lock.backup /root/make-backup.sh<br />
<br />
== Cronie ==<br />
<br />
cronie 的相关文件层次结构如下:<br />
<br />
/etc/<br />
|----- cron.d/<br />
| ----- 0hourly<br />
|----- cron.minutely/<br />
|----- cron.hourly/<br />
| ----- 0anacron<br />
|----- anacrontab<br />
|----- cron.daily/<br />
|----- cron.monthly/<br />
|----- cron.weekly/<br />
|----- crontab<br />
|----- cron.deny<br />
<br />
Cronie 提供了 ''cron'' 和 ''anacron'' 两种功能:只要系统在指定的时间可用,''cron'' 以固定的时间间隔(粒度为一分钟)运行工作,,而''anacron''则在以天为单位指定的时间间隔执行命令。与 cron 不同的是,它并不假设系统连续运行。当系统启动时,''anacron'' 就会检查是否有任何漏掉的任务,并进行相应的处理。<br />
<br />
''cron''任务可以在 {{ic|/etc/cron.d}} 目录中类似 crontab 的文件中定义,或者在 {{ic|/etc/crontab}} 文件中添加。注意后者在默认情况下并不存在,但如果存在就会被使用。按照 {{ic|/etc/cron.d/0hourly}} 的内容,{{ic|/etc/cron.hourly}} 中的任何可执行文件将每小时运行一次(默认为每小时的第1分钟),而在 {{ic|/etc/cron.minutely}} 中的可执行文件将每分钟执行一次。这些可执行文件通常是 shell 脚本,也可以使用可执行文件的符号链接。<br />
{{ic|/etc/cron.deny}} 文件包括不允许使用 crontab 的用户列表,如果没有这个文件,只有 {{ic|/etc/cron.allow}} 中列出的用户才能使用它。<br />
<br />
''Anacron''的工作原理类似,通过执行根据所需的作业频率放置在 {{ic|/etc/cron.daily}}、{{ic|/etc/cron.weekly}} 和 {{ic|/etc/cron.monthly}}目录下的文件,cron 作业 {{ic|/etc/cron.hourly/0anacron}} 确保 ''anacron'' 每天运行一次,以执行其待办任务。<br />
<br />
{{Note|<br />
* Cronie 使用 {{ic|run-parts}} 来执行不同目录下的脚本。文件名中不应该包含任何点号(.),因为 {{ic|run-parts}} 在默认模式下会忽略它们(参见{{man|8|run-parts}})。名字必须只由大小写字母、数字、下划线和减号组成。<br />
* {{ic|systemctl status cronie}} 的输出可能会显示诸如 {{ic|CAN'T OPEN (/etc/crontab): No such file or directory}} 的内容。您可以忽略这些内容,因为这个文件 cronie 不是必须的。<br />
* Cronie 对 {{ic|/etc/cron.d/0hourly}} 的权限要求很严格。如果 {{ic|/etc/cron.d/{hourly,weekly,daily}...}} 中的任务损坏或权限不正确,{{ic|/etc/cron.d/0hourly}} 中的所有任务都不会被运行(包括 anacron 启动器)。{{ic|pacman -Qkk cronie}} 可以显示是否有这样的问题。<br />
}}<br />
<br />
{{Tip|如果不需要某些命令的输出和电子邮件提醒,请在该 cron 任务的行末添加 {{ic|>/dev/null 2>&1}},将输出重定向到/dev/null:<br />
<br />
0 1 5 10 * /path/to/script.sh >/dev/null 2>&1<br />
<br />
您也可以在您的 crontab 文件中设置 {{ic|1=MAILTO=""}} 变量来禁用全部电子邮件提醒。}}<br />
<br />
== Dcron ==<br />
<br />
cron守护进程会解析一个名为{{ic|crontab}}的配置文件。系统中的每个用户都可以维护一个单独的crontab文件来单独调度命令。root 用户的 crontab 用于调度全系统的任务(用户可以选择使用 {{ic|/etc/crontab}} 或 {{ic|/etc/cron.d}} 目录,这取决于他们选择的 cron 实现)。<br />
<br />
The cron daemon parses a configuration file known as {{ic|crontab}}. Each user on the system can maintain a separate crontab file to schedule commands individually. The root user's crontab is used to schedule system-wide tasks (though users may opt to use {{ic|/etc/crontab}} or the {{ic|/etc/cron.d}} directory, depending on which cron implementation they choose).<br />
<br />
{{hc|/var/spool/cron/root|<nowiki><br />
# Run command at a scheduled time<br />
# Edit this 'crontab -e' for error checking, man 1 crontab for acceptable format<br />
<br />
# <@freq> <tags and command><br />
@hourly ID=sys-hourly /usr/sbin/run-cron /etc/cron.hourly<br />
@daily ID=sys-daily /usr/sbin/run-cron /etc/cron.daily<br />
@weekly ID=sys-weekly /usr/sbin/run-cron /etc/cron.weekly<br />
@monthly ID=sys-monthly /usr/sbin/run-cron /etc/cron.monthly<br />
<br />
# mm hh DD MM W /path/command (or tags) # W = week: 0-6, Sun=0<br />
21 01 * * * /usr/bin/systemctl suspend<br />
</nowiki>}}<br />
<br />
下面几行是 crontab 条目的一种可接受格式,即以空格分隔的字段:<br />
<br />
# @period<br />
# ID=jobname (这个是 dcron 独有的)<br />
# command<br />
<br />
crontab 条目的另一种标准格式是:<br />
<br />
# minute<br />
# hour<br />
# day<br />
# month<br />
# day of week<br />
# command<br />
<br />
crontab文件本身通常存储为 {{ic|/var/spool/cron/username}}。例如,root 的 crontab 文件位于 {{ic|/var/spool/cron/root}}。<br />
<br />
参见 crontab [[man page]] 获取更多信息和配置示例。<br />
<br />
== 另请参见 ==<br />
<br />
* [http://www.gentoo.org/doc/en/cron-guide.xml Gentoo Linux Cron 指南]<br />
* [https://crontab.guru/ crontab.guru] - cronjob 表达式在线编辑器。</div>
VictriD
https://wiki.archlinux.org/index.php?title=Systemd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)/Timers_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=653624
Systemd (简体中文)/Timers (简体中文)
2021-02-27T10:26:06Z
<p>VictriD: Renew translation</p>
<hr />
<div>{{Lowercase title}}<br />
[[Category:System administration (简体中文)]]<br />
[[de:Systemd/Timers]]<br />
[[en:Systemd/Timers]]<br />
[[es:Systemd (Español)/Timers]]<br />
[[fr:Systemd/cron]]<br />
[[ja:Systemd/タイマー]]<br />
[[pt:Systemd (Português)/Timers]]<br />
[[ru:Systemd (Русский)/Timers]]<br />
{{Related articles start}}<br />
{{Related|systemd (简体中文)}}<br />
{{Related|Systemd (简体中文)/User (简体中文)}}<br />
{{Related|systemd FAQ (简体中文)}}<br />
{{Related|cron (简体中文)}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Systemd/Timers|2021-02-27|637931}}<br />
Timers 是以 {{ic|.timer}} 为后缀名的 [[systemd]] 单元文件,用于控制 {{ic|.service}} 文件或事件。Timers 可用来替换 [[cron_(简体中文)|cron]](阅读 [[#替代 cron]])。Timers 内置了实时定时事件和单调定时事件的支持,并可以异步执行这些事件。<br />
<br />
== 定时器单元 ==<br />
<br />
Timers 是以 {{ic|.timer}} 为后缀的 ''systemd'' 单元文件。Timers 和其他[[systemd_(简体中文)#编写单元文件|单元配置文件]]是类似的,它通过相同的路径加载,不同的是包含了 {{ic|[Timer]}} 部分。 {{ic|[Timer]}} 部分定义了何时以及如何激活定时事件。Timers 可以被定义成以下两种类型:<br />
<br />
* '''实时定时器''' (亦称"挂钟定时器") 通过日历事件激活(类似于 cronjobs )定时任务。使用 {{ic|1=OnCalender=}} 来定义实时定时器。<br />
* '''单调定时器''' 即在一个时间点经过一段时间后激活定时任务。所有的单调计时器都遵循如下形式: {{ic|1=On''Type''Sec=}}。 {{ic|OnBootSec}} 和 {{ic|OnActiveSec}} 是常用的单调定时器。<br />
<br />
<br />
要查阅完整的定时器选项,参见 {{man|5|systemd.timer}}。关于日历事件和时间段的定义参见 {{man|7|systemd.time}}。<br />
<br />
== 服务单元 ==<br />
<br />
每个 {{ic|.timer}} 文件所在目录都得有一个对应的 {{ic|.service}} 文件(如 {{ic|foo.timer}} 和 {{ic|foo.service}})。{{ic|.timer}} 文件激活并控制 {{ic|.service}} 文件。对应的 {{ic|.service}} 文件中不需要包含 {{ic|[Install]}} 部分,因为这由 ''timer'' 单元接管。必要时可以通过在定时器的 {{ic|[Timer]}} 部分指定 {{ic|1=Unit=}} 选项来控制一个与定时器不同名的服务单元。<br />
<br />
== 管理 ==<br />
<br />
使用 ''timer'' 单元只需像其他单元一样 [[enable]] 或 [[start]] 即可(别忘了添加 {{ic|.timer}} 后缀)。要查看所有已启用的定时器,运行:<br />
<br />
{{hc|$ systemctl list-timers|<br />
NEXT LEFT LAST PASSED UNIT ACTIVATES<br />
Thu 2014-07-10 19:37:03 CEST 11h left Wed 2014-07-09 19:37:03 CEST 12h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service<br />
Fri 2014-07-11 00:00:00 CEST 15h left Thu 2014-07-10 00:00:13 CEST 8h ago logrotate.timer logrotate.service<br />
}}<br />
<br />
{{注意|<br />
* 列出所有定时器(包括非活动的),使用下列命令: {{ic|systemctl list-timers --all}}。<br />
* 一个由定时器启动的服务的状态,如果不是正好被触发的话,通常是未激活的。<br />
* 若一个定时器不再同步,它可能会删除它在 {{ic|/var/lib/systemd/timers}} 下的 {{ic|stamp-*}} 文件。这些空文件只用于表示每个定时器上次运行的时间。删除后,他们将在下次定时器运行时自动重建。}}<br />
<br />
== 示例 ==<br />
<br />
通过定时器预定执行的服务文件一般无需任何修改。以下示例将预定执行 {{ic|foo.service}},因此它的定时器应该被命名为 {{ic|foo.timer}}。<br />
<br />
=== 单调定时器 ===<br />
<br />
定义一个在系统启动 15 分钟后执行,且之后每周都执行一次的定时器:<br />
<br />
{{hc|/etc/systemd/system/foo.timer|<nowiki><br />
[Unit]<br />
Description=Run foo weekly and on boot<br />
<br />
[Timer]<br />
OnBootSec=15min<br />
OnUnitActiveSec=1w <br />
<br />
[Install]<br />
WantedBy=timers.target<br />
</nowiki>}}<br />
<br />
=== 实时定时器 ===<br />
<br />
定义一个每周执行一次(具体来讲,指周一凌晨零点)的定时器。如果上次未执行(比如说系统当时没有开机,这个行为由 {{ic|1=Persistent=true}} 定义)就立即执行服务。<br />
<br />
{{hc|/etc/systemd/system/foo.timer|2=<br />
[Unit]<br />
Description=Run foo weekly<br />
<br />
[Timer]<br />
OnCalendar=weekly<br />
Persistent=true<br />
<br />
[Install]<br />
WantedBy=timers.target}}<br />
<br />
更精确的时间可以通过 {{ic|OnCalendar}} 参数以下列方式指定:<br />
{{ic|星期 年-月-日 时:分:秒}}<br />
可以用星号来表示任意值,用逗号分列可能值。以 {{ic|..}} 分隔的两个值指两个值间的连续序列。<br />
<br />
这是在每个月的前四天晚上中午 12 点,但仅当这一天是周一和周四时运行的例子:<br />
<br />
OnCalendar=Mon,Tue *-*-01..04 12:00:00<br />
<br />
在每个月的第一个星期六运行:<br />
<br />
OnCalendar=Sat *-*-1..7 18:00:00<br />
<br />
如果不需要以星期几来界定,比如说在每天四点运行,请去掉星期项:<br />
<br />
OnCalendar=*-*-* 4:00:00<br />
<br />
在不同的时间运行一个服务可以以多次指定 {{ic|OnCalendar}} 的方式表示。在下面的例子中,这个服务在周内的 22:30 和周末的 20:00 运行:<br />
<br />
OnCalendar=Mon..Fri 22:30<br />
OnCalendar=Sat,Sun 20:00<br />
<br />
更多信息请参阅 {{man|7|systemd.time}}。<br />
<br />
{{提示|<br />
* 可以用 ''systemd-analyze'' 工具检测 {{ic|OnCalendar}} 项是否填写正确,并计算下一次这个条件成立的时间。比如说可以用 {{ic|systemd-analyze calendar weekly}} 或 {{ic|systemd-analyze calendar "Mon,Tue *-*-01..04 12:00:00"}}。<br />
* {{Pkg|libfaketime}} 包提供的 {{ic|faketime}} 命令在测试各种情况时非常有用。<br />
* 特殊的事件表达式如 {{ic|daily}} 和 {{ic|weekly}} 表示 ''特定的启动时间'',因此任何共享该日历事件的定时器将同时启动。如果该定时器的服务会竞争系统资源,那么共享该日历事件的定时器可能会引起系统性能下降。使用 {{ic|[Timer]}} 部分中的 {{ic|RandomizedDelaySec}} 选项可以通过随机推迟定时器启动来避免这个问题。参见 {{man|5|systemd.timer}}。<br />
* 向 {{ic|[Timer]}} 部分添加 {{ic|1=AccuracySec=1us}} 选项可以避免原有默认的精确值 ''1 分钟''造成的误差。参见 {{man|5|systemd.timer}}。<br />
}}<br />
<br />
== 瞬态 .timer 单元 ==<br />
<br />
可以使用 {{ic|systemd-run}} 创建一个瞬态 {{ic|.timer}} 单元。即可以在不创建服务文件的情况下设置定时运行某个命令。比如说下面的命令可以在 30 秒钟后创建一个文件:<br />
<br />
# systemd-run --on-active=30 /bin/touch /tmp/foo<br />
<br />
也可以建立指定一个已经存在但没有定义 timer 的服务文件。比如说,下面的命令会在 12 小时 30 分钟后启动名为 {{ic|''someunit''.service}} 的服务:<br />
<br />
# systemd-run --on-active="12h 30m" --unit ''someunit''.service<br />
<br />
更多信息和例子参见 {{man|1|systemd-run}}。<br />
<br />
== 替代 cron ==<br />
<br />
尽管 [[cron_(简体中文)|cron]] 毋庸置疑是最有名的计划任务管理器,''systemd'' 定时器仍可以作为一个替代品。<br />
<br />
=== 优势 ===<br />
<br />
使用定时器的最主要的优势在于每个任务都有它自己的 ''systemd'' 服务。这样做的好处包括:<br />
<br />
* 任务可以简单地独立于他们的定时器启动,简化调试。<br />
* 每个任务可配置运行于特定的环境中(参见 {{man|5|systemd.exec}})。<br />
* 任务可以使用 [[cgroups]] 特性。<br />
* 任务可以配置依赖于其他 ''systemd'' 单元。<br />
* 任务会被记录于 ''systemd'' 日志,便于调试。<br />
<br />
=== 注意事项 ===<br />
<br />
有些可以用 cron 轻易做到的事情仅仅使用 timer 组件会比较难办:<br />
<br />
* 创建过程:相比于在 crontab 中只需添加一行任务,使用 ''systemd'' 配置计划任务需要创建两个文件并运行好几次 {{ic|systemctl}} 命令。<br />
* 邮件:目前还没有内置与 cron {{ic|MAILTO}} 类似的任务失败时发送邮件的功能。可以在每个服务文件中配置 {{ic|1=OnFailure=}} 来实现同样的功能。<br />
<br />
另外, [[Systemd (简体中文)/User (简体中文)|用户]]定时器默认只会在用户登录时进行。但是,[[Systemd_(简体中文)/User_(简体中文)#随系统自动启动_systemd_用户实例|lingering]] 允许在启动,且用户没有活动登录会话时激活。<br />
<br />
<br />
<br />
* 随机延时:目前没还有内置与 cron 类似的 {{ic|RANDOM_DELAY}} 功能来指定一个数字用于定时器延时执行。(参见 [https://bugs.freedesktop.org/show_bug.cgi?id=82084 bug report])。 你不想同时执行的服务必须手动设置它们的定时器。<br />
<br />
:{{注意|{{ic|AccuracySec}} 选项对于随机错开定时器执行时间是 '''没有''' 作用的,因为它"会在所有本地定时器单元间同步" ({{ic|systemd.timer(5)}})。换句话说, {{ic|AccuracySec}} 会以相同的量改变所有定时器激活时间。例如,所有 {{ic|1=OnCalendar=daily}} 的定时器单元,指定 {{ic|1=AccuracySec=15m}} 将同时在 00:00 到 00:15 触发相关的服务。}}<br />
<br />
=== 发送邮件 ===<br />
<br />
可以配置 systemd 在单元失败时发送电子邮件。Cron 的 {{ic|MAILTO}} 会在任务向标准输出或标准错误输出时发送邮件,许多任务只在发生错误时输出。首先需要两个文件:一个用来发送邮件的可执行文件和一个用于启动这个可执行文件的 ''.service'' 文件。在本例中,可执行文件只是一个由提供 {{ic|smtp-forwarder}} 的包中给出的调用 {{ic|sendmail}} 的shell 脚本:<br />
<br />
{{hc|/usr/local/bin/systemd-email|<nowiki>#!/bin/sh<br />
<br />
/usr/bin/sendmail -t <<ERRMAIL<br />
To: $1<br />
From: systemd <root@$HOSTNAME><br />
Subject: $2<br />
Content-Transfer-Encoding: 8bit<br />
Content-Type: text/plain; charset=UTF-8<br />
<br />
$(systemctl status --full "$2")<br />
ERRMAIL</nowiki>}}<br />
<br />
不论你用什么可执行文件,应该都会像这个脚本一样接收至少两个参数:目标邮箱地址和用来获取状态的单元文件名。我们创建的 ''.service'' 文件会传递这些参数:<br />
<br />
{{hc|/etc/systemd/system/status_email_''user''@.service|2=[Unit]<br />
Description=status email for %i to ''user''<br />
<br />
[Service]<br />
Type=oneshot<br />
ExecStart=/usr/local/bin/systemd-email ''address'' %i<br />
User=nobody<br />
Group=systemd-journal}}<br />
<br />
其中,{{ic|''user''}} 是被通知的用户名,{{ic|''address''}} 是该用户的邮件地址。尽管这个地址被硬编码在代码里,但是报告的单元文件会在实例参数中指定,因此可以作为许多其他单元的邮件服务端。此时你可以 [[启动|start]] {{ic|status_email_''user''@dbus.service}} 服务来检查你能否收信。<br />
<br />
成功后,仅需 [[Systemd_(简体中文)#修改现存单元文件|编辑]] 你需要发送失败邮件的服务,向 {{ic|[Unit]}} 部分添加 {{ic|1=OnFailure=status_email_''user''@%n.service}}。{{ic|%n}} 会向模板传递单元的名字。<br />
<br />
{{note|<br />
* 如果你根据 [[SSMTP#Security]] 配置了 SSMTP 安全,{{ic|nobody}} 用户会没有访问 {{ic|/etc/ssmtp/ssmtp.conf}} 文件的权限,{{ic|systemctl start status_email_''user''@dbus.service}} 命令就会失败。一个解决办法是使用 {{ic|root}} 作为 {{ic|status_email_''user''@.service}} 单元的执行者。<br />
* 如果你希望在你的邮件脚本中使用 {{ic|mail -s somelogs ''address''}},{{ic|mail}} 会以 fork 的形式启动,systemd 会把在你的脚本退出时一并将这个进程结束掉。可以用 {{ic|mail -Ssendwait -s somelogs ''address''}} 来让 mail 不以 fork 的形式启动。<br />
}}<br />
<br />
=== 使用 crontab ===<br />
<br />
有些注意事项中的部分可以通过安装一些将传统 crontab 项目翻译成 timers 配置的包来完成,例如[[AUR (简体中文)|AUR]] 中的 {{aur|systemd-crontab-generator}} 和 {{aur|systemd-cron}} 包。他们也可以提供缺失的 {{ic|MAILTO}} 特性。<br />
<br />
同样,与 crontab 一样,可以通过 {{ic|systemctl}} 来获取一个统一的计划任务视图。参见 [[#管理]]章节。<br />
<br />
== 参见 ==<br />
<br />
* {{man|5|systemd.timer}}<br />
* [https://fedoraproject.org/wiki/Features/SystemdCalendarTimers Fedora Project wiki page] ''systemd'' 的实时定时器<br />
* [https://wiki.gentoo.org/wiki/Systemd#Timer_services Gentoo wiki section] on ''systemd'' timer services<br />
* {{App|systemd-cron-next|一个从 crontab 和 anacrontab 文件生成 timers/services 文件的工具|https://github.com/systemd-cron/systemd-cron-next|{{Aur|systemd-cron-next}}}}<br />
* {{App|systemd-cron|提供 systemd 单元运行 cron 脚本;使用 ''systemd-crontab-generator'' 转换 crontabs|https://github.com/systemd-cron/systemd-cron|{{Aur|systemd-cron}}}}</div>
VictriD
https://wiki.archlinux.org/index.php?title=ArchWiki:Translation_Team_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626874
ArchWiki:Translation Team (简体中文)
2020-07-26T13:03:47Z
<p>VictriD: /* 页面维护列表 */ Adding PKGBUILD translation.</p>
<hr />
<div>[[Category:ArchWiki (简体中文)]]<br />
[[Category:Teams (简体中文)]]<br />
[[ar:ArchWiki:Translation Team]]<br />
[[cs:ArchWiki:Translation Team]]<br />
[[el:ArchWiki:Translation Team]]<br />
[[en:ArchWiki:Translation Team]]<br />
[[es:ArchWiki:Translation Team]]<br />
[[fr:ArchWiki Translation Team]]<br />
[[hr:ArchWiki:Translation Team]]<br />
[[it:ArchWiki:Translation Team]]<br />
[[ja:ArchWiki:翻訳チーム]]<br />
[[ko:ArchWiki:Translation Team]]<br />
[[nl:ArchWiki:Translation Team]]<br />
[[pl:ArchWiki:Translation Team]]<br />
[[pt:ArchWiki:Translation Team]]<br />
[[ru:ArchWiki:Translation Team]]<br />
[[sk:ArchWiki:Translation Team]]<br />
[[uk:ArchWiki:Translation Team]]<br />
[[zh-hant:ArchWiki:Translation Team]]<br />
ArchWiki 上有许多中文页面,这其中大部分是从外文翻译过来的,这些页面是无数中文志愿者劳动的结晶。随着时间推移,有些页面因为没有及时维护,内容严重过时。而目前的翻译工作缺少组织,效率偏低。所以参照西班牙和意大利翻译组的做法,添加这个页面。<br />
<br />
如果你希望对 ArchWiki 做贡献,参与 Wiki 建设,比如翻译英文页面和对已翻译过的中文页面进行维护,只需要编辑下面的[[#页面维护列表]],添加相应的条目,并将自己加为相关页面的维护者。如果你在列表中还没有找到想要翻译的页面,可以自行添加。另外,如果因为时间原因无法再维护页面,请及时将自己从维护者列表中删除。<br />
<br />
== 创建翻译 ==<br />
<br />
{{警告|如果不准备翻译页面的大部分内容,请尽量不要新建简体中文页面。检查英文页面的更新需要花费不少精力,没有翻译的页面会增加维护负担。}}<br />
# 如果还不知道如何编辑 wiki,请阅读[[Help:Editing (简体中文)|编辑帮助]]。<br />
# 阅读 [[Help:i18n (简体中文)|i18n 帮助]],文章给出了 ArchWiki 国际化和本地化的指南。<br />
# [[Special:UserLogin|登录]]以进行编辑。<br />
# 选择要翻译的页面,例如从[[Special:Random|随机页面]]或[[#页面维护列表|页面维护列表]]中选择一个未翻译完成的页面。假设要翻译 [[ArchWiki:Translation Team]]。<br />
# 进入选择的英文页面,点击页面顶部的'''编辑'''。<br />
# 添加要翻译文件的语言间链接, 简体中文的话加入 <nowiki>[[zh-hans:Some Page]]</nowiki>,其它语言参见 [[Help:i18n#Interlanguage links]])。<br />
# 复制所有页面代码。<br />
# 预览页面 (新加了语言链接)<br />
# 访问页面左边新添加的语言链接,应该会进到 [[ArchWiki Translation Team (Language)]](打开新标签页,不要关闭预览的页面)<br />
# 因为页面不存在,点击'''创建'''。<br />
# 将显示一个编辑器 - 粘贴复制的英文页面。<br />
# 将文章分类修改为本地化版本,例如将 {{ic|<nowiki>[[Category:ArchWiki]]</nowiki>}} 修改为 {{ic|<nowiki>[[Category:ArchWiki (简体中文)]]</nowiki>}},参阅 [[Help:Category (简体中文)]].<br />
# 修改语言间链接,指向英文页面(将 {{ic|zh-hans}} 修改为 {{ic|en}},并将英文页面的语言间链接移到文章顶部)。<br />
# 翻译页面,进行保存,还需要使用合适的[[Help:Style (简体中文)#编辑摘要|编辑摘要]],例如 {{ic|translate <nowiki>[[ArchWiki Translation Team]]</nowiki>}}。碰到不好翻译的段落,可以保留英文。尽量不要让原文和不太确认的翻译同时存在,会让页面看上去比较杂乱。<br />
# 在翻译页面的底部,列出了该页面所包含的类别。检查所有这些类别是否存在,即,链接不应为红色。否则,请点击红色链接,然后创建所有缺少的类别 - 类别的创建方式与常规页面相同。<br />
# 返回预览的页面并保存页面。<br />
# (可选)将 [[Template:TranslationStatus (简体中文)]] 添加到已翻译的页面。有关使用方法,请参见 [[Template:TranslationStatus (简体中文)#用法]]。<br />
# (可选)创建另一个页面,例如 [[ArchWiki Translation Team 的翻译的标题]],其标题将是 [[ArchWiki Translation Team (Language)]] 的标题的翻译,输入 {{ic|<nowiki>#redirect [[ArchWiki Translation Team (Language)</nowiki>]]}} 作为其唯一内容并保存。<br />
<br />
== 模版 ==<br />
<br />
下表列出了应翻译的英文[[Help:Template (简体中文)|模版]]及其等效的简体中文模板。<br />
<br />
{| class=wikitable<br />
! 英文模版 || 简体中文模版<br />
|-<br />
! colspan=2| 文章模版<br />
|-<br />
| [[Template:Related articles start]] || [[Template:Related articles start (简体中文)]]<br />
|-<br />
| [[Template:Unsupported]] || [[Template:Unsupported (简体中文)]]<br />
|-<br />
| [[Template:Yes]] || [[Template:是]]<br />
|-<br />
| [[Template:No]] || [[Template:否]]<br />
|-<br />
| [[Template:Tip]] || [[Template:提示]]<br />
|-<br />
| [[Template:Note]] || [[Template:注意]]<br />
|-<br />
| [[Template:Warning]] || [[Template:警告]]<br />
|-<br />
| [[Template:Dead link]] || [[Template:失效链接]]<br />
|-<br />
| [[Template:Broken package link]] || [[Template:Broken package link (简体中文)]]<br />
|-<br />
| [[Template:Broken section link]] || [[Template:Broken section link (简体中文)]]<br />
|-<br />
! colspan=2| 翻译状态模板<br />
|-<br />
| [[Template:Bad translation]] || [[Template:Bad translation (简体中文)]]<br />
|-<br />
| [[Template:Translateme]] || [[Template:Translateme (简体中文)]]<br />
|-<br />
| [[Template:TranslationStatus]] || [[Template:TranslationStatus (简体中文)]]<br />
|-<br />
! colspan=2| 导航模版<br />
|-<br />
| [[Template:HCL/Laptops table header]] || [[Template:HCL/Laptops table header (简体中文)]]<br />
|-<br />
| [[Template:Laptops navigation]] || [[Template:Laptops navigation (简体中文)]]<br />
|-<br />
| [[Template:List of applications navigation]] || [[Template:List of applications navigation (简体中文)]]<br />
|-<br />
| [[Template:Package guidelines]] || [[Template:Package guidelines (简体中文)]]<br />
|-<br />
! colspan=2| 特殊模版<br />
|-<br />
| [[Template:Cat main]] || [[Template:Cat main (简体中文)]]<br />
|-<br />
| [[Template:Template]] || [[Template:Template (简体中文)]]<br />
|-<br />
| [[Template:META Error]] || [[Template:META Error (简体中文)]]<br />
|-<br />
| [[Template:META Unexplained Status Template]] || [[Template:META Unexplained Status Template (简体中文)]]<br />
|-<br />
| [[Template:Comment]] || [[Template:Comment (简体中文)]]<br />
|-<br />
| [[Template:Committed identity]] || [[Template:Committed identity (简体中文)]]<br />
|-<br />
| [[Template:Unsigned]] || [[Template:Unsigned (简体中文)]]<br />
|}<br />
<br />
== 翻译中应省略的模板 ==<br />
<br />
当页面或部分标记有 [[Template:Accuracy]],[[Template:Style]],[[Template:Archive]],[[Template:Remove]] 或 [[Template:Out of date]] 时 — 在解决问题并且删除模板之前,不要翻译有问题的页面/部分。<br />
<br />
如果看到 [[Template:Expansion]],[[Template:Merge]],[[Template:Move]] 或 [[Template:Redirect]],则可以安全地翻译页面,但不要将这些模板复制到翻译的文章中。<br />
<br />
如果看到 [[Template:Broken package link]],[[Template:Broken section link]] 或 [[Template:Dead link]],请不要将这些模板复制到翻译的文章中。要么在原始文本中将其修复,然后复制并在要翻译时翻译修复的链接,要么在翻译时忽略与它们有关的整个句子或部分。<br />
<br />
== 完善翻译 ==<br />
<br />
[https://wiki.archlinux.org/index.php?title=Special:WhatLinksHere/Template:Translateme_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&limit=100 这个特殊页面]包含了需要完善翻译的简体中文页面。完善翻译的基本步骤:<br />
# 选择自己比较熟悉的文章进行翻译<br />
# 先检查英文页面的对应段落,更新成最新的英文后再翻译,避免翻译过时的内容,减少信息遗漏。<br />
# 翻译完成后删除页面中的 <nowiki>{{translateme (简体中文)}}</nowiki> 标记<br />
# (可选)给翻译完成的页面加上[[Template:TranslationStatus (简体中文)|翻译状态]],请参见 [[#创建翻译]]。<br />
<br />
== 更新过期页面 ==<br />
<br />
如果发现有 Wiki 页面过期或错误:<br />
* 小的改动,有时间可以立即进行修改同步,维护者并不控制页面的编辑权限,越多的人参与维护越好。如果改动较大,请先联系维护者,避免重复劳动。<br />
* 没有时间查看更改,请给页面加上 {{ic|<nowiki>{{out of date}}</nowiki>}} 模版,这样其他贡献者更容易发现需要更新的页面,而读者看到过期标记就可以直接查看英文页面,以免被错误内容误导,白白耽误时间。<br />
* 没有时间翻译,请将过期的中文部分删去,从英文页面中复制更改的部分到中文页面的相应部分,去掉{{ic|<nowiki>{{out of date}}</nowiki>}}模板(如果页面上有的话)并加上{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他贡献者就更容易发现需要翻译的页面,而读者也不会被过期的内容误导。<br />
如果发现有页面未翻译:<br />
* 有时间的话,请将页面中的英文部分翻译为中文,并去掉{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板。<br />
* 没有时间翻译,请为页面添加{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他的贡献者就能更容易发现需要翻译的页面。<br />
{{注意|在修改页面上的模板时,请同时更新页面维护列表的翻译状态。}}<br />
<br />
== 维护翻译 ==<br />
<br />
完成页面的翻译只是初步完成任务,及时同步英文页面改动、更新翻译是一个持续性的工作,可能会耗费更多的时间。<br />
<br />
=== 页面认领 ===<br />
<br />
所有人都可以认领页面。认领后的责任包括进行翻译,关注英文页面的改动,及时同步翻译。<br />
<br />
为了更好的跟踪英文页面的修改,请务必在设置中启用监视列表邮件通知,并监视对应的英文页面(从设置中找到监视列表,加入英文页面。或者直接到英文页面点击页面顶端的监视标签。这样只要有改动,就会收到邮件通知)。<br />
<br />
{{小贴士|如果收到邮件通知后没有访问页面或者访问了页面却没有登录用户,下次页面改动时就不会再发邮件通知。可以点击监视列表中的'''标记所有页面为已读'''再次获取更新。}}<br />
<br />
如果页面有维护者但长期得不到更新,将会在维护列表中删除维护者。<br />
<br />
=== 翻译状态模板 ===<br />
<br />
Arch 作为滚动发行版,软件变化比较快,对应的文档变化也比较快。许多翻译的文章由于缺乏更新,会产生命令运行出错或不起作用等问题。而由于这些过期页面没有及时标记出来,所以用户无法及时获得更新。[[Template:TranslationStatus (简体中文)|翻译状态模板]]就是为了解决这个问题而创建。<br />
<br />
此模板可以起到如下作用:<br />
* 为用户提供翻译状况,包括翻译时间、英文页面的最后版本等<br />
* 用户可以点击查看翻译后,英文页面的改动,这样英文不是很好的用户可以只查看很小一部分英文内容,并判断出是否影响操作。<br />
* 翻译人员可以跟踪页面状况,通过[[Special:WhatLinksHere/Template:TranslationStatus_(简体中文)|模板的反向链接]]可以查找到所有标记页面,查看需要更新翻译的部分。<br />
<br />
[[Template:TranslationStatus (简体中文)|模板页面]]有详细的使用方法。<br />
<br />
=== 页面维护列表 ===<br />
<br />
{{注意|请按照拉丁字母顺序添加页面。}}<br />
<br />
翻译状态说明:<br />
;过期:页面内容未与英文页面同步,对应 {{ic|<nowiki>{{out of date}}</nowiki>}} 模版<br />
;未翻译:页面中含有英文内容,对应 {{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}} 模板<br />
;完成:页面已与英文页面同步<br />
<br />
{| class="wikitable sortable collapsible" border="1"<br />
|-<br />
! 页面<br />
! 翻译状态<br />
! 维护者<br />
! class="unsortable" width="30%" | 备注<br />
|-<br />
| [[Amateur radio (简体中文)]]<br />
| 翻译中<br />
| liu-shuyuan<br />
| <br />
|-<br />
| [[Arch-based distributions (简体中文)]]<br />
| 完成<br />
| Joshua<br />
| 勘误中<br />
|-<br />
| [[Arch boot process (简体中文)]]<br />
| 翻译中<br />
| Bangbo Zheng<br />
| <br />
|-<br />
| [[Arch Security Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Arch Testing Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ArchWiki:Maintenance Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ArchWiki:News (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ASCII art (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[AUR helpers (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 部分用词可能需要修改<br />
|-<br />
| [[Bash (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[Common Desktop Environment (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Conky (简体中文)]]<br />
| 完成<br />
| upi<br />
| 无<br />
|-<br />
| [[Core utilities (简体中文)]]<br />
| 完成<br />
| rentaro, Arisaka<br />
| 无<br />
|-<br />
| [[Dark mode switching (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Discord (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Django (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Dynamic Kernel Module Support (简体中文)]]<br />
| 完成<br />
| Mithrandir<br />
| 完善中<br />
|-<br />
| [[Emacs (简体中文)]]<br />
| 翻译中<br />
| Jaurung yuanhang<br />
| 未完成<br />
|-<br />
| [[Equinox Desktop Environment (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[FHEM (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Fish (简体中文)]]<br />
| 完成<br />
| liu-shuyuan<br />
| <br />
|-<br />
| [[Flatpak (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Fwupd (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Gcin (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[GIMP (简体中文)]]<br />
| 完成<br />
| [[User:驿窗|驿窗]]<br />
| 长期维护中<br />
|-<br />
| [[GNOME (简体中文)]]<br />
| 完成<br />
| skywet<br />
| <br />
|-<br />
| [[Google Authenticator (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[GRUB (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[GRUB/Tips and tricks (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[Heirloom (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Inkscape (简体中文)]]<br />
| 完成<br />
| [[User:驿窗|驿窗]]<br />
| 长期维护中<br />
|-<br />
| [[International communities (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Java (简体中文)]]<br />
| 翻译中<br />
| CaCaCarrot<br />
| 无<br />
|-<br />
| [[Kernel live patching (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[Libvirt (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 需要格式改进<br />
|-<br />
| [[Liri (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[List of applications (简体中文)]]<br />
| 部分翻译<br />
| DavidChen<br />
| 翻译中<br />
|-<br />
| [[Lua (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Lumina (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Minecraft (简体中文)]]<br />
| 完成<br />
| Xavier Lau<br />
| 页面已经与英文版同步,长期维护中<br />
|-<br />
| [[Moksha (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[MySQL (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Notion (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[OpenSSH (简体中文)]]<br />
| 完成<br />
| Arisaka<br />
| 无<br />
|-<br />
| [[pkgstats (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[PKGBUILD (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|- <br />
| [[ranger (简体中文)]]<br />
| 完成<br />
| Jason Zhang<br />
| 完善中<br />
|-<br />
| [[Rockbox (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Roles (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Rxvt-unicode (简体中文)]]<br />
| 完成<br />
| KyanCh<br />
| 无<br />
|-<br />
| [[Scheme (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[SDDM (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Steam (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Syslinux (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[TLP (简体中文)]]<br />
| 完成<br />
| Skywet<br />
| 持续更新中<br />
|-<br />
| [[Trac (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Trusted Users (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Twm (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Unofficial mirrors (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Unofficial user repositories (简体中文)]]<br />
| 翻译中<br />
| TransistorLogic<br />
| 无<br />
|-<br />
| [[UP Squared (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Vivaldi (简体中文)]]<br />
| 完成<br />
| [[User:Aaron Chen|Aaron Chen]]<br />
| 长期维护<br />
|-<br />
| [[Webmin (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[X2Go (简体中文)]]<br />
| 过期<br />
| [[User:Aaron Chen|Aaron Chen]]<br />
|</div>
VictriD
https://wiki.archlinux.org/index.php?title=PKGBUILD_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626873
PKGBUILD (简体中文)
2020-07-26T13:02:09Z
<p>VictriD: Renew contents translation with original.</p>
<hr />
<div>[[Category:Package development (简体中文)]]<br />
[[cs:PKGBUILD]]<br />
[[da:PKGBUILD]]<br />
[[el:PKGBUILD]]<br />
[[en:PKGBUILD]]<br />
[[es:PKGBUILD]]<br />
[[fa:PKGBUILD]]<br />
[[fr:PKGBUILD]]<br />
[[it:PKGBUILD]]<br />
[[ja:PKGBUILD]]<br />
[[pl:PKGBUILD]]<br />
[[pt:PKGBUILD]]<br />
[[ru:PKGBUILD]]<br />
[[sr:PKGBUILD]]<br />
[[zh-hant:PKGBUILD]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Arch packaging standards (简体中文)}}<br />
{{Related|Arch Build System (简体中文)|ABS}}<br />
{{Related|Creating packages (简体中文)}}<br />
{{Related|.SRCINFO}}<br />
{{Related|:Category:Package development}}<br />
{{Related|Pacman tips (简体中文)}}<br />
{{Related2|Arch User Repository (简体中文)|AUR}}<br />
{{Related2|makepkg (简体中文)|makepkg}}<br />
{{Related2|pacman (简体中文)|pacman}}<br />
{{Related|Pacman/Tips and tricks}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|PKGBUILD|2020-07-26|626517}}<br />
本页面讨论 PKGBUILD 中使用的变量。若要获取关于 PKGBUILD 功能,和创建通用软件包的信息,请参考[[Creating packages (简体中文)|创建软件包]]和 {{man|5|PKGBUILD}}.<br />
<br />
{{ic|PKGBUILD}} 是一个 shell 脚本,包含 [[Arch Linux (简体中文)|Arch Linux]] 在构建软件包时需要的信息。<br />
<br />
Arch Linux 用 [[makepkg (简体中文)|makepkg]] 创建软件包。当 ''makepkg'' 运行时,它会在当前目录寻找 {{ic|PKGBUILD}} 文件,并依照其中的指令编译或获取所需的依赖文件,并生成 {{ic|''pkgname''.pkg.tar.xz}} 软件包。生成的包内有二进制文件和安装指令,可以使用 [[pacman (简体中文)|pacman]] 进行安装。<br />
<br />
{{ic|pkgname}},{{ic|pkgver}},{{ic|pkgrel}} 和 {{ic|arch}} 是必须包含的变量。{{ic|license}}在构建包时并不强制要求,但若要分享 PKGBUILD 文件,推荐加上该变量,否则 {{ic|makepkg}} 会有警告。<br />
<br />
一般来说,建议按照下面的顺序在 PKGBUILD 文件中定义这些变量。但这并不是强制性的,只要使用正确的 [[Bash (简体中文)|Bash]] 语法就行了。<br />
<br />
{{提示|使用 [[namcap]] 来检查 {{ic|PKGBUILD}} 文件中的常见打包错误。}}<br />
<br />
== 软件包名称 ==<br />
<br />
=== pkgbase ===<br />
<br />
在建立常规的软件包时,这个变量不应该在 {{ic|PKGBUILD}} 文件中显式指出。这个值默认会与 [[#pkgname]] 的值相同。<br />
<br />
构建[https://jlk.fjfi.cvut.cz/arch/manpages/man/PKGBUILD.5#PACKAGE_SPLITTING 拆分包]时,这个变量 pkgbase 可以在 ''makepkg'' 的输出和纯源代码包中指定软件包组。此变量不允许以下划线开头。若该变量没有明确定义,则会默认对应到 pkgname 序列的第一个元素。<br />
<br />
拆分软件包中的所有选项和指令都默认使用全局 PKGBUILD 设置的值。除了{{ic|makedepends,source variables, integrity variables}}, 其他变量都可以在拆分包的 {{ic|package()}} 函数中进行额外设置。但是,也可以在拆分包的打包函数中重载这些选项:[[#pkgdesc]], [[#arch]], [[#url]], [[#license]], [[#groups]], [[#depends]], [[#optdepends]], [[#provides]], [[#conflicts]], [[#replaces]], [[#backup]], [[#options]], [[#install]], 和 [[#changelog]] 。如有多重限制,你可以重复设置它们。<br />
<br />
=== pkgname ===<br />
<br />
对于常规的软件包,这个变量设定软件包的名称,例如 {{ic|1=pkgname='foo'}}。对于拆分包则是一个名称的序列,例如{{ic|1=pkgname=('foo' 'bar')}}。名称只能由由小写字母、数字和{{ic|@ . _ + -}} (at 符号、英文句点、下划线、加号、连字符)构成,且不能以连字符开头。为了保证一致性,{{ic|pkgname}} 应该与源文件打包文件相匹配。比如:源文件包名为 {{ic|foobar-2.5.tar.gz}},那么应该使用 {{ic|1=pkgname=foobar}}。<br />
<br />
== 版本 ==<br />
<br />
=== pkgver ===<br />
<br />
软件包的版本号,应该与软件上游发布的版本号一致。变量的值可以由字母、数字和英文句点 {{ic|.}},下划线 {{ic|_}} 组成,但''不能''包含连字符({{ic|-}})。如果上游版本号中使用了连字符,则应该用下划线 {{ic|_}} 来替代。在之后的 PKGBUILD 指令中 {{ic|pkgver}} 中的下划线可以用下面这个方法替代为连字符:<br />
source=("$pkgname-${pkgver//_/-}.tar.gz")<br />
<br />
{{注意|如果上游使用时间戳格式的版本,例如 {{ic|30102014}},请修改为年份在前的格式 {{ic|20141030}} ([[Wikipedia:ISO 8601|ISO 8601]] 格式)。否则新版本判断会失效。}}<br />
<br />
{{提示| <br />
* 不常用变量的顺序可以通过 [[pacman (简体中文)|pacman]] 软件包提供的 {{man|8|vercmp}} 进行测试。<br />
* 在 PKGBUILD 中定义{{ic|pkgver()}},[[makepkg]] 就可以自动[http://allanmcrae.com/2013/04/pacman-4-1-released/ 更新]此变量。详情参阅 [[VCS_package_guidelines_(简体中文)#The_pkgver()_function|pkgver() 函数]]。}}<br />
<br />
=== pkgrel ===<br />
<br />
软件的发布号。这通常是一个正整数,用来区分同一版本软件的多次构建。当软件包的补丁和附加功能被添加进入 {{ic|PKGBUILD}},从而导致生成的软件包发生变化时,{{ic|pkgrel}} 应该增加 1。而当这个软件包发布一个新版本时,发布号重置为 1。在个别情况下,也会有其他的发布号形式。比如 ''主版本号.次要版本号''。<br />
<br />
=== epoch ===<br />
<br />
{{警告|除了特别、绝对、显式要求需要这样做,否则不允许使用 {{ic|epoch}} 变量。}}<br />
<br />
用于强制升级软件包。在判定逻辑中,不论版本号如何,只要 {{ic|epoch}} 值较大,就会被视为更新的软件包。这个值应为非负整数,且默认值为0。通常当一个软件的版本编号方式改变(或者使用某些字母-数字混编的版本符号),导致正常的版本比较逻辑无法进行时,会使用这个变量来控制升级。比如:<br />
<br />
{{hc|1=<br />
pkgver=5.13<br />
pkgrel=2<br />
epoch=1<br />
|2=<br />
1:5.13-2<br />
}}<br />
<br />
更多关于版本比较的信息,参见 {{man|8|pacman}}。<br />
<br />
== 一般变量 ==<br />
<br />
=== pkgdesc ===<br />
<br />
软件包描述。建议最多 80 个字符,并不要自己引用自己的名字,除非软件包名和程序名不相同。比如:{{ic|1=pkgdesc="Nedit is a text editor for X11"}} 应该被写成 {{ic|1=pkgdesc="Text editor for X11"}}。<br />
<br />
合理地在描述中使用关键字,这样可以使软件包在相关的搜索中的展示次数增加。<br />
<br />
=== arch ===<br />
<br />
一个描述软件包所有能够生成并使用的架构的序列。Arch 官方仅支持 {{ic|x86_64}}, 但是其它项目提供了其它架构支持。比如说,[https://archlinux32.org/ Arch Linux 32] 提供了 {{ic|i686}} 支持,[http://archlinuxarm.org/ Arch Linux ARM] 项目提供 {{ic|arm}} (armv5),{{ic|armv6h}} (带有硬件浮点运算模块的 armv6),{{ic|armv7h}} (带有硬件浮点运算模块的 armv7),和 {{ic|aarch64}} (64 位 armv8) 的支持。<br />
<br />
这个序列可以以两种类型呈现:<br />
<br />
* {{ic|1=arch=('any')}} 表明软件包可以在任意架构上生成,并且编译后的形式与架构无关(例如 shell 脚本、字体、主题、各种扩展等)。<br />
<br />
* {{ic|1=arch=('x86_64')}} 和其他的一些架构,表明这个软件包可以在上述的任意架构上生成,但生成产物只能在特定的架构上运行。对于这些软件包,您必须在 {{ic|PKGBUILD}} 文件中指定所有官方支持的架构。对于官方软件源和 AUR 软件包,这指的是 ''x86_64''。可选的,AUR 软件包可以选择添加一些已知的可运行架构的支持。<br />
<br />
在运行过程中可以通过 {{ic|$CARCH}} 变量来获知目标架构。<br />
<br />
=== url ===<br />
<br />
待打包软件官方站点的网址。<br />
<br />
=== license ===<br />
<br />
软件发布所规定的许可。软件包 {{Pkg|licenses}}(这个包在 {{Pkg|base}} [[meta package|包组]]中)中包含了许多通用的许可证协议,您可以在 {{ic|/usr/share/licenses/common}} 中找到。如果软件包是发布在这些许可证中的任何一个,这个值应该被设定成许可证的目录名,比如 {{ic|1=license=('GPL')}}。如果软件包适用的许可证不在上述文件夹中,您需要完成以下几个步骤:<br />
<br />
# 将 {{ic|custom}} 添加到 {{ic|license}} 序列中。可选的,您也可以用 {{ic|custom:''许可证名称''}} 来替代 {{ic|custom}}。当一个许可证被两个以上的官方软件源的软件包(包括 [[Official_repositories_(简体中文)#community|community]] 仓库)使用,它就会被添加到 {{Pkg|licenses}} 软件包中。<br />
# 将许可证安装到 {{ic|/usr/share/licenses/'''pkgname'''/}} 目录下,例如 {{ic|/usr/share/licenses/foobar/LICENSE}}。您可以使用下面命令 {{bc|install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE}} 来实现。<br />
# 如果许可证的内容仅保存在网站上,那么你需要单独保存一个版本。<br />
<br />
* [[Wikipedia:BSD License|BSD]]、[[Wikipedia:ISC license|ISC]]、[[Wikipedia:MIT License|MIT]]、[[Wikipedia:ZLIB license|zlib/png]]、[[Wikipedia:Python License|Python]] 和 [[Wikipedia:SIL Open Font License|OFL]] 是几个例外的情况,它们不能加入 {{Pkg|licenses}} 包。但在 {{ic|license}} 序列中,您可以按照通常的许可证来添加他们 (就是说,按照 {{ic|1=license=('BSD')}}, {{ic|1=license=('ISC')}}, {{ic|1=license=('MIT')}}, {{ic|1=license=('ZLIB')}}, {{ic|1=license=('Python')}} 和 {{ic|1=license=('OFL')}} 来添加),但是技术上来讲,这些都是定制的许可证,因为这些许可证中都包含各自特定的版权声明。任何以这五个许可协议分发的软件包都应该在 {{ic|/usr/share/licenses/''pkgname''}} 下存放它们独有的许可证文件。<br />
* 一些软件包可能不止一个许可证,这种情况下,在 {{ic|license}} 列表中置入多个值,比如说,{{ic|1=license=('GPL' 'custom:''name of license''')}}。<br />
*(L)GPL 许可证有很多版本和版本的变种。对于一个 (L)GPL 软件,约定如下:<br />
** (L)GPL - 指代 (L)GPLv2 或之后的任意版本<br />
** (L)GPL2 - 仅 (L)GPL2<br />
** (L)GPL3 - 指代 (L)GPL3 或之后的任意版本<br />
*如果最终无法决定使用哪种许可证,[https://projects.archlinux.org/pacman.git/tree/proto/PKGBUILD.proto PKGBUILD.proto] 建议使用 {{ic|unknown}}。但是这种情况下,应该联系上游的软件发布者,来确定这个软件在哪些情况下是可以使用的。<br />
<br />
{{提示|有些软件作者没有提供单独的版权文件,而是在 {{ic|ReadMe.txt}} 中声明。可以在 {{ic|build()}} 时将这些声明提取为单独文件,比如通过这条命令:{{Ic|sed -n '/'''This software'''/,/''' thereof.'''/p' ReadMe.txt > LICENSE}}。}}<br />
<br />
更多信息,请参考[[Nonfree applications package guidelines|非自由软件打包指引]]。<br />
<br />
关于自由/开源软件协议的更多信息请参考:<br />
*[[w:Free software licence]]<br />
*[[w:Comparison of free and open-source software licenses]]<br />
*[https://www.softwarefreedom.org/resources/2008/foss-primer.html A Legal Issues Primer for Open Source and Free Software Projects]<br />
*[https://www.gnu.org/licenses/license-list.html GNU Project - Various Licenses and Comments about Them]<br />
*[https://www.debian.org/legal/licenses/ Debian - License information]<br />
*[http://www.opensource.org/licenses/alphabetical Open Source Initiative - Licenses by Name]<br />
<br />
=== groups ===<br />
<br />
软件包所在的[[Package group|包组]]。例如:当你安装 {{Grp|base}},它会安装 {{Grp|base}} 组里的所有包。<br />
<br />
== 依赖关系 ==<br />
<br />
{{注意|架构相关的额外依赖可以通过在名称后添加下划线和架构的方式指定。例如{{ic|1=optdepends_x86_64=()}}。}}<br />
<br />
=== depends ===<br />
<br />
软件的生成'''和'''运行时必须先行安装的软件列表。如果是只在运行时需要先行安装的软件,可以在 {{ic|package()}} 函数中定义。<br />
<br />
可以使用比较运算符来描述版本限制。例如 {{ic|1=depends=('foobar>=1.8.0')}}。如有多重限制,你可以重复设置它们。例如 {{ic|1=depends=('foobar>=1.8.0' 'foobar<2.0.0')}}<br />
<br />
{{ic|depends}} 应该列出所有的直接依赖,即使在依赖之间存在传递依赖关系时也应该如此。否则,比如说,如果一个软件包 ''foo'' 依赖 ''bar'' 和 ''baz'' 两个软件包,而 ''bar'' 软件包也依赖于 ''baz'' 软件包,当 '''bar''' 软件包不再依赖于 '''baz''',极有可能会导致不希望发生的行为。这个时候, pacman 不会在安装 '''foo''' 软件包时安装 '''baz''' 软件包。同时,当 pacman 清除不再被依赖的孤儿软件包时,由于 '''baz''' 软件包被依赖而没有被安装,'''foo''' 可能崩溃或者发生运行错误。<br />
<br />
但在一些情况下,上面所述的某些依赖是没有必要,或者不应该被列出的。比如说每个操作系统都或多或少需要 C 运行库,因此 {{Pkg|glibc}} 是不能够被卸载的。或者说,当这个软件包已经依赖于一个以 ''python-'' 开头的模块,就不需要包括 {{Pkg|python}} 软件包。因为这样的模块必须绝对地依赖于 {{Pkg|python}} 软件包,而不允许从依赖中删除。<br />
<br />
通常的依赖应该包括生成所有可选功能所需的依赖。否则,任何依赖于不包含在其中的软件的功能需要通过一个配置的功能显式地排除在外。如果不这样做,会给软件包添加了所谓"[https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Automagic_dependencies 自动魔法依赖]":一些在生成时可选的功能因为生成软件包的机器上安装的一些传递依赖或者不相关的软件被启用了,但是没有表现在包的依赖中。<br />
<br />
如果依赖的名称写成了库的名称(例如 {{ic|1=depends=('libfoobar.so')}}),makepkg 会在编译完成的包中添加依赖这个库的二进制文件所依赖的版本,或者你可以自己加上版本号来停用自动检测。比如说 {{ic|1=depends=('libfoobar.so=2')}}。<br />
<br />
=== optdepends ===<br />
<br />
可选软件包序列。这些可选软件包不影响软件主要功能,但能提供额外特性。这通常暗示除非安装了对应的可选软件包软件包的个别程序可能无法正常使用[https://lists.archlinux.org/pipermail/arch-general/2014-December/038124.html]。如果软件有一些替代依赖,您可以将其在此处,而不是 {{ic|depends}} 序列中,全部列出。<br />
<br />
应该简要说明每个包所能提供的额外功能,例如:<br />
<br />
optdepends=('cups: printing support'<br />
'sane: scanners support'<br />
'libgphoto2: digital cameras support'<br />
'alsa-lib: sound support'<br />
'giflib: GIF images support'<br />
'libjpeg: JPEG images support'<br />
'libpng: PNG images support')<br />
<br />
=== makedepends ===<br />
<br />
仅在软件'''生成'''时需要的软件包列表。可以像{{ic|depends}}序列里提到的一样指定依赖的版本限制。{{ic|depends}} 序列里面的软件包默认也是生成时需要的,此处不应该重复。<br />
<br />
{{提示|用下面程序查看一个依赖关系是否已经包含在 {{Grp|base-devel}} 组,或被这个组的成员所依赖:<br />
<br />
<nowiki>$ LC_ALL=C pacman -Si $(pactree -rl ''package'') 2>/dev/null | grep -q "^Groups *:.*base-devel"</nowiki><br />
<br />
}}<br />
<br />
{{注意|在使用 makepkg 构建软件包时,{{Grp|base-devel}} 组会被视为已安装。该组的成员'''不应该'''出现在 {{ic|makedepends}} 列表中。}}<br />
<br />
=== checkdepends ===<br />
<br />
运行测试组件时需要,而运行时不需要的包列表。该列表中的包遵循和 {{ic|depends}} 相同的格式。这些依赖只在 [[Creating_packages_(简体中文)#check()|check()]] 函数存在,且被 makepkg 执行时会被处理。<br />
<br />
{{注意|在使用 makepkg 构建软件包时,{{Grp|base-devel}} 组被视为已安装。该组的成员'''不应该'''出现在 {{ic|checkdepends}} 列表中。}}<br />
<br />
== 软件相关性 ==<br />
<br />
{{注意|架构相关的额外相关性可以通过在名称后添加下划线和架构的方式指定。例如{{ic|1=conflicts_x86_64=()}}。}}<br />
<br />
=== provides ===<br />
<br />
这个序列说明当前包能提供的功能(或者像 cron、sh 这样的虚拟包)。只要没有在 {{ic|conflicts}} 序列中被标记,提供相同功能的软件包可以同时安装。<br />
<br />
{{注意|如果你需要使用这个变量,应当加上所替代软件的版本号({{ic|pkgver}},可能的话还有{{ic|pkgrel}})。就是说,如果你提供一个修改过的 ''qt'' 包其版本号为 3.3.8,命名为 ''qt-foobar'',那么 {{ic|provides}} 应该写成 {{ic|1=provides=('qt=3.3.8')}}。如果忽略了版本号,会导致所有依赖于 ''qt'' 的某个特定版本的包编译失败。不要把 {{ic|pkgname}} 加入 {{ic|provides}} 序列。这个操作会自动进行。}}<br />
<br />
=== conflicts ===<br />
<br />
与当前软件包发生冲突的包与功能的列表。安装此软件时,所有这个列表中的软件包,和提供这个功能的软件包都会被删除。可以像 {{ic|depends}} 那样指定冲突包的版本号。<br />
<br />
如果你在制作已有的软件包(例如官方源或 AUR)的替代时,你需要在 {{ic|conflicts}} 中指定它们与你的包冲突。<br />
<br />
有时候,指定所有软件包的冲突很难实现。比如说很多人都创建了提供这个功能的软件包,要让每个这些包的维护者都在他们的 {{ic|conflicts}} 列表中全部加入您的包,是一个很麻烦的事情。<br />
<br />
所以如果软件包的 {{ic|provides}} 和其它软件包的 {{ic|provides}} 提供了相同的功能,就不需要将冲突的包添加进 {{ic|conflicts}} 列表中。<br />
<br />
例如:<br />
<br />
* {{pkg|netbeans}} 显式地提供 {{ic|netbeans}}(因为 {{ic|pkgname}} 就是如此)。<br />
* {{aur|netbeans-javase}} 提供 {{ic|netbeans}} 功能,并和 {{ic|netbeans}} 冲突。 <br />
* {{aur|netbeans-php}} 提供 {{ic|netbeans}} 功能,而且和 {{ic|netbeans}} 冲突。显然这与同时提供 {{ic|netbeans}} 功能的 {{aur|netbeans-javase}} 包冲突。但是您不需要在 {{ic|conflicts}} 中说明。Pacman 可以发现它们相互冲突,因为他们提供了相同的功能,而且他们提供的这项功能与其他提供者都冲突。<br />
:反过来说,{{aur|netbeans-javase}} 因为和 {{aur|netbeans-php}} 提供相同的功能,于是不必显式声明相互冲突。<br />
<br />
=== replaces ===<br />
<br />
会因安装当前包而取代的过时的包的列表。比如:{{Pkg|wireshark-qt}} 中的 {{ic|1=replaces=('wireshark')}}。在'''同步'''软件数据库后,pacman 会立刻用软件库中的另一个包替换掉 {{ic|replaces}} 中已安装的包。如果你只是提供已存在包的一个替代品,或者上传到 AUR, 请不要使用 {{ic|replace}},而是使用 {{ic|conflicts}} 和 {{ic|provides}} 两个变量——它们仅在安装冲突软件包时被检查。<br />
<br />
== 其它 ==<br />
<br />
=== backup ===<br />
<br />
当包被升级或卸载时,应当备份的文件(的路径)序列。这些文件一般是用户会更改的文件,如主要放置在 {{ic|/etc}} 中的配置文件。<br />
<br />
列表中的文件应该使用没有绝对路径标识({{ic|/}})的相对路径(如 {{ic|etc/pacman.conf}}),而不是绝对路径(如 {{ic|/etc/pacman.conf}})。<br />
<br />
在升级时,新版本会被命名为 {{ic|file.pacnew}} 以避免覆盖旧有且被用户修改过的文件。类似地,当卸载包时,用户修改过的文件会以 {{ic|file.pacsave}} 为名而保留下来——除非用 {{ic|pacman -Rn}} 命令卸载。<br />
<br />
参见 [[Pacman_(简体中文)/Pacnew_and_Pacsave_(简体中文)|pacnew 和 pacsave 文件]]获取更多信息。<br />
<br />
=== options ===<br />
<br />
这个序列允许你重载 ''makepkg'' 的部分定义在 {{ic|/etc/makepkg.conf}} 中的默认行为。要设置一个选项,请在序列中指定选项名。要禁用一个默认行为,则还需要在前面加上'''{{ic|!}}'''。<br />
<br />
参见 {{man|5|PKGBUILD}} 以获取所有可用选项。<br />
<br />
=== install ===<br />
<br />
''.install'' 脚本的名称。这个值应该和 {{ic|pkgname}} 相同。''pacman'' 可以在安装、卸载或升级一个软件包时存储及执行一些特定的脚本。在不同的情况下,脚本包含了下面几个函数,并且在特定时刻执行它们:<br />
<br />
* {{ic|pre_install}} - 安装前运行的脚本。可以传递一个参数:版本号。<br />
* {{ic|post_install}} - 安装后运行的脚本。可以传递一个参数:版本号。<br />
* {{ic|pre_upgrade}} - 升级前运行的脚本。可以按以下顺序传递两个参数:新版本号,旧版本号。<br />
* {{ic|post_upgrade}} - 升级后运行的脚本。可以按以下顺序传递两个参数:新版本号,旧版本号。<br />
* {{ic|pre_remove}} - 卸载前运行的脚本,可以传递一个参数:版本号。<br />
* {{ic|post_remove}} - 卸载后运行的脚本,可以传递一个参数:版本号。<br />
<br />
每一个函数都是在 pacman 安装目录下通过 [[chroot (简体中文)|chroot]] 运行。参见[https://bbs.archlinux.org/viewtopic.php?pid=913891 这个帖子].<br />
<br />
{{提示|<br />
* 一个 {{ic|.install}} 文件的模板(原型)可以在[https://projects.archlinux.org/pacman.git/plain/proto/proto.install /usr/share/pacman/proto.install 这里]找到。<br />
* [[Pacman_(简体中文)#Hooks|Pacman 钩子]]也提供相似的功能。<br />
}}<br />
<br />
{{注意|脚本不要以 {{ic|exit}} 结束,否则包含的函数无法被执行。}}<br />
<br />
=== changelog ===<br />
<br />
软件包的更新日志的文件名。要查看安装软件的更新日志(如果有):<br />
<br />
$ pacman -Qc ''pkgname''<br />
<br />
== 源码 ==<br />
<br />
=== source ===<br />
<br />
构建软件包时需要的文件列表。它必须包含软件源的位置,大多数情况下是一个完整的 HTTP 或 FTP 地址。您可以在此处调用前面提到的变量 {{ic|pkgname}} 和 {{ic|pkgver}},来实现高效的命名。(如 {{ic|<nowiki>source=("https://example.com/$pkgname-$pkgver.tar.gz")</nowiki>}})。<br />
<br />
文件也可以放到与 {{ic|PKGBUILD}} 文件相同目录,并将文件名添加到这个列表。在实际的编译过程开始之前,所有该列表中引用的文件都会被下载或检查是否存在,如果有文件丢失 {{ic|makepkg}} 就不会继续。<br />
<br />
''.install'' 文件会被 ''makepkg'' 自动识别,而不应该被包含在这个列表中。''makepkg'' 会自动把 ''.sig'', ''.sign'' 或 ''.asc'' 结尾的文件当成 PGP 签名,并自动验证对应的源文件的完整性。<br />
<br />
{{警告|因为所有包的 [[Makepkg_(简体中文)#包输出|SRCDEST]] 的值可能相同,所以下载的文件的文件名需要唯一。比如说,如果一个项目只用版本号来命名,可能会与其他有相同版本号的不同项目冲突。在这种情况下,你可以为下载的文件指定不同的文件名:{{ic|1=source=(<nowiki>'</nowiki>''unique_package_name'''''::'''''file_uri''<nowiki>'</nowiki>)}}。例如{{ic|<nowiki>source=("$pkgname-$pkgver.tar.gz::https://github.com/coder/program/archive/v$pkgver.tar.gz")</nowiki>}}。<br />
}}<br />
<br />
{{注意|<br />
* 架构相关的额外相关性可以通过在名称后添加下划线和架构的方式指定。例如 {{ic|1=source_x86_64=()}}。必须提供对应的完整性校验和序列,例如 {{ic|1=sha256sums_x86_64=()}}。<br />
* 有些服务器通过 ''User-Agent'' 来筛选并限制下载。这个限制可以通过 [[Nonfree_applications_package_guidelines#Custom_DLAGENTS|DLAGENTS]] 规避。<br />
}}<br />
<br />
=== noextract ===<br />
<br />
一个在 {{ic|source}} 中列出,但不应该在运行 {{ic|makepkg}} 时被解包的文件列表。这通常包括那些压缩文件不能被 {{ic|/usr/bin/bsdtar}} 处理,或者本来就不需要解压、按照原样提供的文件。对于前者,需要将额外的解包工具(如{{ic|unzip}}、{{ic|p7zip}},{{pkg|lrzip}}等)加入 {{ic|makedepends}} 序列,并用 [[Creating_packages_(简体中文)#prepare()|prepare()]] 函数手动解压。例如: <br />
<br />
prepare() {<br />
lrzip -d ''source''.tar.lrz<br />
}<br />
<br />
注意当 {{ic|source}} 是一些 URL 时,{{ic|noextract}} '''仅仅'''取文件名部分:<br />
<br />
<nowiki>source=("http://foo.org/bar/foobar.tar.xz")</nowiki><br />
noextract=('foobar.tar.xz')<br />
<br />
不提取任何东西时,可以像这样:<br />
<br />
* 如果 {{ic|source}} 只包含了纯 URL,而没有自定义的文件名是,将内容从最后一个斜杠之前像这样从 source 序列中提出来:<br />
: {{bc|1=noextract=("${source[@]##*/}")}}<br />
* 如果 {{ic|source}} 只包含了自定义的文件名,将内容从分隔符 {{ic|::}} 之前像这样从 source 序列中提出来(这是从 [https://github.com/archlinux/svntogit-packages/blob/packages/firefox-i18n/trunk/PKGBUILD#L123 firefox-i18n 的 PKGBUILD 中找到的]):<br />
: {{bc|1=noextract=("${source[@]%%::*}")}}<br />
<br />
=== validpgpkeys ===<br />
<br />
PGP 指纹列表。如果使用,''makepkg'' 仅接受这里定义的签名,并且忽略密钥环中的值。如果源代码用子密钥签名,''makepkg'' 仍然会使用主密钥进行比较。<br />
<br />
此处仅接受完整的指纹。它们必须是大写字母而且不能有空白字符。<br />
<br />
{{注意|可以使用 {{ic|gpg --list-keys --fingerprint <KEYID>}} 查找 key 的合适指纹。}}<br />
<br />
请参阅 [[Makepkg_(简体中文)#验证签名|Makepkg 验证签名]]了解签名验证过程的详细信息。<br />
<br />
== 完整性检验 ==<br />
<br />
下面描述的这些序列中的变量是 [[#source|source]] 序列中对应文件的校验和。可以插入 {{ic|SKIP}} 跳过某个不需要检验的文件。<br />
<br />
校验和的数值和版本应该始终使用上游,比如在新版本公告中,提供的数值。当存在多种版本的时候,最好选用最强的校验版本,也就是说,按照如下从强到弱的顺序:{{ic|sha256}} > {{ic|sha1}} > {{ic|md5}}。这样可以最大限度地保证从上游的公告到软件包的生成整个流程中下载文件的完整性。<br />
<br />
{{注意|另外,当上游具备[[w:Digital signature|数字签名]]文件时,这个签名文件应该被添加到 [[#source|source]] 序列中,PGP 密钥添加到 [[#validpgpkeys|validpgpkeys]] 序列中。这样允许在生成软件包时进行验证。}}<br />
<br />
[[makepkg]] 的 {{ic|-g}}/{{ic|--geninteg}} 选项可以自动生成校验值,通常可以通过 {{ic|makepkg -g >> PKGBUILD}} 命令写入。{{ic|updpkgsums}} 也可以自动更新 PKGBUILD 中的数值。两个工具都会自动检测 PKGBUILD 中的算法, 如果两个都没找到就回滚到 {{ic|md5sums}}。<br />
<br />
{{注意|架构相关的额外完整性检验可以通过在名称后添加下划线和架构的方式指定。例如{{ic|1=sha256sums_x86_64=()}}。}}<br />
<br />
=== md5sums ===<br />
<br />
{{ic|source}} 列表文件中的 128 位 [[Wikipedia:MD5|MD5]] 校验和。<br />
<br />
===sha1sums===<br />
<br />
{{ic|source}} 列表文件中 [[Wikipedia:SHA-1|SHA-1]] 160 位校验和。<br />
<br />
=== sha256sums ===<br />
<br />
256 位 [[Wikipedia:SHA-2|SHA-2]] 校验和。<br />
<br />
===sha224sums, sha384sums, sha512sums===<br />
<br />
SHA-2 校验和列表,分别对应224,384 和 512 位。这些是较为不常见的 {{ic|sha256sums}} 替代品。<br />
<br />
=== b2sums ===<br />
<br />
512 位 [[Wikipedia:BLAKE_(hash_function)#BLAKE2|BLAKE2]] 校验和。<br />
<br />
== 参阅 ==<br />
* {{man|5|PKGBUILD}} 手册页 [https://www.archlinux.org/pacman/PKGBUILD.5.html]<br />
* [https://projects.archlinux.org/pacman.git/plain/proto/PKGBUILD.proto PKGBUILD 实例文件]</div>
VictriD
https://wiki.archlinux.org/index.php?title=General_recommendations_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626456
General recommendations (简体中文)
2020-07-23T16:16:28Z
<p>VictriD: Sync with English contents.</p>
<hr />
<div>[[Category:Installation process (简体中文)]]<br />
[[ar:General recommendations]]<br />
[[bs:General recommendations]]<br />
[[cs:General recommendations]]<br />
[[el:General recommendations]]<br />
[[en:General recommendations]]<br />
[[es:General recommendations]]<br />
[[fa:توصیههای عمومی]]<br />
[[it:General recommendations]]<br />
[[ja:一般的な推奨事項]]<br />
[[ko:General recommendations]]<br />
[[lt:General recommendations]]<br />
[[pl:General recommendations]]<br />
[[pt:General recommendations]]<br />
[[ru:General recommendations]]<br />
[[tr:General recommendations]]<br />
[[uk:General recommendations]]<br />
[[zh-hant:General recommendations]]<br />
{{Related articles start (简体中文)}}<br />
{{Related2|FAQ (简体中文)|常见问题}}<br />
{{Related2|Installation Guide (简体中文)|安装指南}}<br />
{{Related2|List of applications (简体中文)|软件列表}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|General recommendations|2020-07-24|623880}}<br />
本文是各种重要或常用的文章的详细索引。阅读本文前,读者应该先通过 [[官方安装指南]] 安装 Arch Linux 基本系统。然后理解[[#系统管理]]和[[#软件包管理]]中解释的概念,再阅读本节的其他内容和 wiki 中的其它文章。<br />
<br />
{{注意|中国用户可以特别留意 [[#中国大陆用户的推荐解决方案]] 内容。}}<br />
<br />
==系统管理==<br />
<br />
这一部分提供系统管理方面的信息。更多内容,请参考[[Core_utilities_(简体中文)|核心工具]]和[[:Category:System administration (简体中文)|系统管理分类]]。<br />
<br />
===用户和用户组===<br />
<br />
新安装的系统只有一个[[Wikipedia:Superuser|超级用户]],即 root。使用 root 进行日常操作是不安全的。应当[[User Management (简体中文)|创建]]普通用户进行日常操作,仅在管理系统时使用 root。不要在服务器上给 root 开放[[SSH]]登录权限。普通用户的创建方法请参阅 [[Users and groups (简体中文)|用户和用户组]]。<br />
<br />
[[Users and groups (简体中文)|用户和用户组]]是GNU/Linux 权限控制机制的基础。管理员通过调整用户组的成员、所有者,可以控制用户使用系统资源。<br />
<br />
===权限提升===<br />
<br />
[[su (简体中文)|su]] 和 [[sudo (简体中文)|sudo]] 两个命令都允许您以其他用户的身份运行命令。''su'' 默认将开启一个 root 用户登录 shell,而更加简单和方便的 ''sudo'' 会给单个命令临时的超级用户权限。更多不同,请对比两篇文章。另外,还有一个 ''sudo'' 的轻量级替代版本 {{Pkg|opendoas}}。<br />
<br />
=== 服务管理 ===<br />
<br />
Arch Linux 使用 [[systemd (简体中文)]] 管理系统服务。新用户有必要了解其基本使用方法。通常使用 {{ic|# systemctl}} 命令进行系统管理,参见[[systemd (简体中文)#systemd 基本工具|此文]]。<br />
<br />
=== 系统维护 ===<br />
<br />
Arch 是滚动发行系统,软件包的更新速度很快,用户需要花些时间进行 [[System maintenance|系统维护]]。 [[Security|安全]]页面也给出了很多加强系统安全性的建议和技巧。<br />
<br />
==软件包管理==<br />
<br />
此部分提供了软件包管理的信息,参见:[[FAQ#Package management]] 和 [[:Category:Package management (简体中文)]]。<br />
<br />
{{注意|Arch 的升级有时候需要手动处理。请订阅[https://mailman.archlinux.org/mailman/listinfo/arch-announce/ arch-announce 邮件列表] ,每次升级前查看 [https://www.archlinux.org/ Arch 新闻]或者订阅 [https://www.archlinux.org/feeds/news/ RSS feed]。}}<br />
<br />
=== Pacman ===<br />
<br />
Pacman 是 Arch 的软件包管理器。[[pacman (简体中文)|pacman]] 和 [[FAQ (简体中文)#软件包管理|FAQ]] 页面提供了安装、升级和管理软件包的信息。<br />
<br />
[[Pacman tips (简体中文)]]中有很多方便 pacman 使用的技巧。<br />
<br />
=== 软件仓库 ===<br />
<br />
[[官方软件仓库]]包含了各个仓库的详细介绍。[[非官方软件仓库]]包含很多个人维护的软件仓库。<br />
<br />
如果计划使用 32 位程序,建议启用 [[multilib]] 仓库。<br />
<br />
安装 [[pkgstats]],可以让软件开发人员统计软件包的使用情况。<br />
<br />
===软件仓库镜像===<br />
<br />
参见[[Mirrors (简体中文)|软件仓库镜像]]一文,获取寻找更快更新pacman镜像的方法。此外,可以查看[https://www.archlinux.org/mirrors/status/ 镜像状态]获取最新镜像站点同步信息。<br />
<br />
<br />
===Arch编译系统(ABS)===<br />
<br />
'''Ports'''是 BSD 发行版最初使用的一套系统,它是本地系统中包含各种软件编译脚本的目录树。<br />
<br />
[[ABS (简体中文)|ABS]]系统相当于 Arch 的 Ports,包含 Arch 官方软件包的编译脚本——[[PKGBUILD (简体中文)|PKGBUILD]]。编译脚本提供了哈希验证、软件主页、版本、协议、编译步骤等信息。通过 [[makepkg (简体中文)|makepkg]] 从编译脚本生成软件包,然后用 pacman 安装。<br />
<br />
实际上,Arch 的所有软件包(包括官方库、AUR)都是通过 makepkg 生成的。<br />
<br />
===Arch用户软件源(AUR)===<br />
<br />
Arch 编译系统提供了编译官方库软件的脚本,而 [[Arch User Repository (简体中文)|AUR]] 则提供了用户提交的、非官方的软件包编译脚本。这是一个基于 [https://aur.archlinux.org/index.php web 界面]或通过 [[AUR helper (简体中文)|AUR 工具]]访问的非官方软件仓库。<br />
<br />
==启动==<br />
<br />
这部分包含系统启动方面的信息。关于Arch开机过程,参见:[[Arch boot process (简体中文)|Arch 启动过程]]。更多信息,参见:[[:Category:Boot process (简体中文)|启动过程分类]]。<br />
<br />
=== 硬件自动探测 ===<br />
<br />
默认情况下,[[udev (简体中文)|udev]]会在开机时自动探测硬件。禁止加载某些内核模块、手动选择要使用的模块。此外,[[Xorg (简体中文)|Xorg]] 也使用 udev 探测硬件,用户也可以调整这方面配置。<br />
<br />
=== Microcode (微码) ===<br />
<br />
处理器可能有[https://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly 错误行为], 而内核可以通过更新启动时的 ''Microcode'',即微码,来修正这些错误行为。参考[[Microcode (简体中文)|微码]]获取更多细节。<br />
<br />
===保留启动信息===<br />
<br />
当系统启动完毕,启动信息会被清除并显示登录提示符,使得用户无法获得启动进程的反馈信息,[[Disable clearing of boot messages]] 可以解决这个问题。<br />
<br />
=== 开机时打开 Num Lock===<br />
<br />
大多数键盘都有一个Num Lock键,通过它控制小键盘的开关。用户可能希望在系统启动时打开Num Lock,参见:[[Activating numlock on bootup (简体中文)|启动时激活 Numlock]]。<br />
<br />
== 图形界面 ==<br />
<br />
本部分提供了在系统上安装图形程序,参阅 [[:Category:X server (简体中文)]]。<br />
<br />
=== 显示服务 ===<br />
[[Wikipedia:X Window System|X 窗口管理系统]]('''X11'''或者'''X''') 是基于网络的显示协议,提供了窗口功能,包含建立图形用户界面(GUI)的标准工具和协议。[[Xorg (简体中文)|Xorg]]是X窗口系统11版本的开源实现,提供图形用户界面, 安装和配置请阅读[[Xorg (简体中文)|Xorg]]。<br />
<br />
[[Wayland (简体中文)|Wayland]] 是新的显示服务协议,Weston 是参考实现。目前还处于开发阶段,支持的程序很少。<br />
<br />
===显卡驱动===<br />
默认的'''vesa'''显卡驱动对于大多数显卡都是兼容的,但是通过为[[Xorg_(简体中文)#AMD|AMD]],[[Intel (简体中文)|Intel]]或[[NVIDIA (简体中文)|NVIDIA]]产品安装适当的驱动程序,可以明显地改善性能并利用附加功能。请参见上述的链接获取更多信息。<br />
<br />
=== 桌面环境 ===<br />
[[Xorg (简体中文)|Xorg]]只提供图形环境的基本框架,完整的用户体验还需要其他组件。 [[桌面环境]](DE): 在'''X'''之上并与其共同运作,提供完整的功能和动态图形界面。桌面环境通常提供图标、小程序(applets)、窗口、工具栏、文件夹、壁纸、应用程序和拖放等功能。使用[[GNOME (简体中文)|GNOME]]、[[KDE (简体中文)|KDE]]、[[LXDE (简体中文)|LXDE]]、[[Xfce (简体中文)|Xfce]]这类[[桌面环境]],是最简单的配置方法. [[:Category:Desktop environments]] 包含了各种桌面环境。<br />
<br />
=== 窗口管理器 ===<br />
完整的桌面环境提供了完全的用户界面,但是通常会占用不少系统资源。希望系统性能最大化的用户可以只安装[[窗口管理器]],然后加入需要的其他软件。大部分的桌面环境都可以换用其它的窗口管理器。 [[:Category:Dynamic WMs|动态]], [[:Category:Stacking WMs|堆栈式]] 和 [[:Category:Tiling WMs|平铺]] 窗口管理器处理窗口的方式各不相同。<br />
<br />
=== 显示管理器 ===<br />
许多桌面环境提供了显示管理器来自动启动图形界面和管理用户登录。[[显示管理器]]介绍了启动管理器的使用方法。 [[Start X at Login (简体中文)|Start X at Login]] 提供了直接从终端启动的轻量方法。<br />
<br />
=== 用户目录 ===<br />
大家熟知的用户目录,比如说下载和音乐文件夹,是使用 {{ic|xdg-user-dirs-update.service}} 用户服务创建的。这个服务包含在 {{Pkg|xdg-user-dirs}} 软件包中,并且在安装过程中已经自动启用。如果您的桌面环境或窗口管理器没有安装这个软件包,您可以手动[[安装]]它,并对每一个运行 {{ic|xdg-user-dirs-update}} 以[[XDG_user_directories_(简体中文)#创建默认目录|创建默认目录]]。<br />
<br />
==电源管理==<br />
<br />
本章对笔记本用户可能更为有用。更多信息,参见: [[:Category:Power management (简体中文)]]。<br />
<br />
===ACPI 事件 ===<br />
电源按键或者合上笔记本会发出 ACPI 事件,可以配置系统在收到这些事件时的相应。推荐的方式是使用 [[systemd (简体中文)]], 参阅 [[Power management#Power management with systemd|Systemd 电源管理]]. 老的方法是使用 [[acpid (简体中文)]],不推荐使用。.<br />
<br />
===CPU 频率调节===<br />
<br />
最新的CPU通常都有自动调节频率的功能。通过该功能可以有效节约电能、减少发热,提升硬件寿命。[[Cpufrequtils (简体中文)]]是配置该功能的工具集。<br />
<br />
===笔记本电脑===<br />
<br />
针对特定型号笔记本电脑的配置信息,参见:[[:Category:Laptops (简体中文)]]。有关笔记本电脑文章的概览,参见: [[Laptop (简体中文)|Laptop]]。<br />
<br />
===待机和休眠===<br />
<br />
待机,指系统将当前状态保存于内存中,进入的低能耗状态(保持开机)。休眠,与待机有所不同,是将当前状态保存于硬盘中,然后可以完全断电。参阅[[Power management (简体中文)/Suspend and hibernate (简体中文)|待机和休眠]]。<br />
<br />
== 多媒体 ==<br />
<br />
[[:Category:Multimedia]]包含更多多媒体方面的资源<br />
<br />
=== 声音 ===<br />
<br />
内核声卡驱动提供了[[Sound|声音]]:<br />
<br />
*[[ALSA (简体中文)|ALSA]] 是Linux内核组件,推荐使用。只需要解除静音,安装{{Pkg|alsa-utils}}软件包,它包含了{{ic|alsamixer}})工具,然后按照[[Advanced_Linux_Sound_Architecture_(简体中文)#解除各声道的静音|此文]]进行设置即可。<br />
* 如果 Alsa 不能工作,可以试试[[OSS (简体中文)|OSS]]。<br />
<br />
另外,用户可能希望安装且配置一个 [[Sound#Sound servers|sound server]],例如[[PulseAudio]]. 对于高级声音需求, 可浏览 [[professional audio]].<br />
<br />
===浏览器插件===<br />
<br />
用户可以安装Adobe Acrobat Reader、Adobe Flash Player,Java之类的[[browser plugins (简体中文)|浏览器插件]],以使用更多的富媒体互联网资源。<br />
<br />
===解码器===<br />
<br />
多媒体应用程序利用[[Codecs (简体中文)|解码器]]编码或解码音频、视频流媒体。要播放多媒体文件,正确安装编码器是必不可少的。<br />
<br />
==网络==<br />
<br />
本文包含网络方面的配置信息。更多信息参见:[[Network (简体中文)|网络]],[[:Category:Networking (简体中文)|网络分类]]。<br />
<br />
===时钟同步===<br />
<br />
[[Network Time Protocol (简体中文)|NTP]],是最常用的网络同步时间的协议。<br />
<br />
=== DNS 安全===<br />
<br />
当在浏览网站,在线支付,连接 [[SSH]] 服务 和类似的事情的时候,为了更安全,请考虑使用启用了 [[DNSSEC]] 的 DNS 解析服务器。它可以验证 [[Wikipedia:Domain Name System|DNS]] 记录的签名, 并且通过 [[Wikipedia:DNS over HTTPS|DNS over HTTPS]] 或 [[DNSCrypt]] 等加密协议来加密 DNS 的传输。更多信息请参考[[Domain_name_resolution_(简体中文)|域名解析]]。<br />
<br />
===DNSSEC 验证===<br />
<br />
网络安全方面安全,[[SSH (简体中文)|SSH]]提供加密的网络链接。而使用支持[[DNSSEC]]的客户端,为提供DNS记录验证,将更进一步加强网络安全。<br />
<br />
===配置防火墙===<br />
<br />
[[Firewalls|防火墙]]为Linux网络访问提供额外保护。作为[[Wikipedia:Netfilter|Netfilter]]计划的一部分,Linux 内核内置了iptables——一种[[Wikipedia:Stateful firewall|状态防火墙]](Stateful firewall)。可以通过直接或间接的方式配置它。非常推荐建立一个防火墙,参考[[Firewalls|防火墙]]。<br />
<br />
=== 资源共享 ===<br />
<br />
可以通过 [[NFS]] 或 [[SSHFS]] 在网络间共享文件.<br />
<br />
用户可以使用[[Samba (简体中文)|Samba]]进行 Windows 与 Arch Linux 间的网络传输。<br />
<br />
要将 Arch Linux 系统连接到 Active Directory 认证的网络,请阅读文章[[Active Directory integration|Active Directory 整合]].<br />
<br />
参阅 [[:Category:Network sharing]].<br />
<br />
==输入==<br />
<br />
这一部分包含常用的输入设备配置建议。更多信息,参见:[[:Category:Input devices (简体中文)|输入设备分类]].<br />
<br />
===键盘布局===<br />
<br />
默认配置下,非英语或非标准键盘可能不能正确工作。需要在[[Linux_console_(简体中文)/Keyboard_configuration_(简体中文)|{{ic|/etc/vconsole.conf}}]]中设置[[KEYMAP (简体中文)|按键映射]]环境变量配置键盘布局。Xorg用户需要做额外的配置,参见:[[Xorg/Keyboard_configuration#Setting_keyboard_layout|设置键盘布局]]。<br />
<br />
===鼠标按键配置===<br />
<br />
一些高级鼠标可能有许多按键,默认情况下系统并不能正确配置它们。这方面的信息,参见:[[Get All Mouse Buttons Working]]。<br />
<br />
===笔记本触摸板===<br />
<br />
[https://www.synaptics.com/ Synaptics]和[https://www.alps.com/ ALPS]是笔记本常用的两种触摸板。对于 Synaptics 和其他一些类似触摸板的用户,请参见[[Touchpad Synaptics]]获取配置信息。<br />
<br />
=== 指点杆 ===<br />
<br />
参见[[TrackPoint_(简体中文)|这篇文章]]来配置您的指点杆。<br />
<br />
==性能优化==<br />
这一部分包含一些实用的性能优化技巧。通过使用这些技巧,可以有效提升程序性能。<br />
<br />
===性能测试===<br />
<br />
[[Benchmarking|性能测试]]帮助用户评估系统性能,为优化系统性能提供信息。<br />
<br />
===性能最大化===<br />
<br />
[[Maximizing performance (简体中文)|性能最大化]]一文提供了提升Arch系统性能的方法。<br />
<br />
=== 固态硬盘 ===<br />
<br />
[[固态硬盘]] 一文包含固态硬盘的各个方面,包括配置和提高寿命。<br />
<br />
== 系统服务 ==<br />
<br />
这一节的更多信息,请参考[[Daemons_(简体中文)|守护程序]]。<br />
<br />
=== 文件索引和搜索 ===<br />
<br />
大部分发行版都提供了 {{ic|locate}} 命令进行快速文件搜索,在 Arch 中建议安装软件包 {{Pkg|mlocate}}。安装后请执行{{ic|updatedb}}建立文件系统索引。<br />
<br />
===打印===<br />
<br />
[[CUPS]]是苹果公司开发的、符合标准的开源打印系统。特定型号打印机的配置信息,参见:[[:Category:Printers (简体中文)|打印机分类]]。<br />
<br />
===本地邮件服务===<br />
<br />
默认安装并未提供一个邮件交换的方式。请阅读[[Mail server|邮件服务器]]来查看邮件交换服务列表。<br />
<br />
==外观美化==<br />
<br />
本栏讨论ArchLinux界面的美化。更多信息请参考:[[:Category:Eye candy (简体中文)]]。<br />
<br />
===字体===<br />
<br />
在安装桌面环境/窗口管理器'''之前''',也许你会先安装些美观的字体。Dejavu 是不错的字体集。英文字体优先选择dejavu字体<br />
# pacman -S ttf-dejavu<br />
对于中文字体,开源的文泉驿正黑矢量字体是不错的选择,它还内嵌了9pt-12pt的点阵宋体:<br />
{{bc|# pacman -S wqy-zenhei}}<br />
当然现在流行的是安装1个字体:<br />
{{bc|# pacman -S wqy-microhei}}<br />
<br />
可能有人需要安装微软视窗下的字体,如下安装之: {{AUR|ttf-win7-fonts}}, {{AUR|ttf-office-2007-fonts}}<br />
<br />
请访问 [[Font configuration|字体配置]] 获取配置字体渲染的详细信息,[[Fonts (简体中文)]] 提供了字体选择建议和安装方法。<br />
<br />
对于经常使用虚拟终端的用户,可以通过配置字体提高可读性,参见:[[Fonts_(简体中文)#终端字体]]。<br />
<br />
=== GTK 和 Qt 主题 ===<br />
<br />
Linux 下的图形界面基本都使用 [[GTK_(简体中文)|GTK]] 或者 [[Qt_(简体中文)|Qt]] 工具集。这些文章和[[Uniform_look_for_Qt_and_GTK_applications_(简体中文)|让 Qt 和 GTK 界面相统一]]提供了让程序更美观的方法。<br />
<br />
==控制台优化==<br />
<br />
本部分包括控制台的优化和微调方法。参阅 [[:Category:Command shells]].<br />
<br />
=== Tab 自动补全 ===<br />
<br />
建议参考所选 shell 的文档,立即设置增强的 [[Wikipedia:Command-line_completion|Tab 自动补全]]。<br />
<br />
===别名===<br />
<br />
给一个命令取别名, or a group thereof, 是使用控制台时的一种节省时间的方式。这种方式对于重复的任务特别有用,这些任务的参数在多次执行期间不需要大的改变。通常使用的省时的别名可以在这里找到 [[Bash#Aliases]], 这些别名也能很容易地移植到 [[zsh]] 。<br />
<br />
===命令别名===<br />
<br />
用户可以[[Bash_(简体中文)#别名|自定义常用命令的别名]],以方便使用。<br />
<br />
=== 其它 shells ===<br />
<br />
[[Bash]] 是 Arch 默认安装的 shell,而安装的时候使用的是 [[zsh]] 并使用 {{Pkg|grml-zsh-config}} 插件。其它选择参阅 [[Command shell#List of shells]]。<br />
<br />
===Bash 增强功能===<br />
<br />
[[Bash#Tips and tricks]]介绍了些Bash的杂项设置,包括:命令补全,历史记录,宏等等。<br />
<br />
===彩色输出===<br />
<br />
参考 [[Color output in console]]。<br />
<br />
===压缩文件===<br />
<br />
压缩包,或称为归档,在 GNU/Linux 十分常用。[[Tar (简体中文)|Tar]]是最常用的归档工具,用户应该熟悉它的语法。此外还有 Arch 软件包使用的 {{Pkg|zstd}} xz 压缩包。参见:[[Archiving_and_compression|解压]]。<br />
<br />
====控制台提示符====<br />
<br />
控制台提示符({{ic|PS1}})可以通过环境变量灵活定制。参见:[[Bash_(简体中文)/Prompt_customization_(简体中文)|Bash 提示符自定义]](Zsh用户参见:[[Zsh_(简体中文)#命令提示符|Zsh:命令提示符]])。<br />
<br />
====Emacs shell====<br />
Emacs除了用作编辑器,其高级功能更为出名,其中一项就是把Emacs变成全功能shell。参见:[[Emacs#Colored output issues|Emacs打开彩色输出后的乱码问题]]。<br />
<br />
===鼠标支持===<br />
在控制台中,使用鼠标复制粘贴比传统 [[GNU screen]] 操作方式方便许多。参见:[[Console mouse support]]。<br />
<br />
===页面回滚缓冲===<br />
<br />
为了更好地保存、查看因为上滚而从屏幕中消失的文字,请参考[[Linux_console#Scrollback|页面回滚]]。<br />
<br />
===会话管理===<br />
<br />
[[tmux]]或[[GNU screen]]之类的终端复用器提供会话管理,在其中运行的程序不会因杀死终端、关闭X或用户登出而终止,只要终端复用器服务保持运行。随后,用户可以重新连接会话。<br />
<br />
== 系统中文化 ==<br />
<br />
[[Arch Linux 中文化]] 页面包含了详尽的中文化指南。<br />
<br />
== 中国大陆用户的推荐解决方案 ==<br />
<br />
{{注意|本章节独立于原英文翻译。}}<br />
<br />
众所周知,中国大陆用户有别于国际上的特殊需求,此章节旨在提供解决方案。<br />
<br />
=== 办公 ===<br />
<br />
* [[WPS Office (简体中文)]] <br />
* [[LibreOffice (简体中文)]]<br />
<br />
一些在线办公套件网站可以提供基础的办公功能:<br />
<br />
* [[wikipedia:Office_Online|Office Online]]: Microsoft提供的Office办公套件的网页版<br />
* [[wikipedia:Google_Docs,_Sheets_and_Slides|Google Docs, Sheets and Slides]]: Google提供的在线文字处理、电子制表和演示程序。<br />
<br />
=== 中文输入法 ===<br />
<br />
参见 [[Fcitx (简体中文)]]或[[IBus_(简体中文)|Ibus]]。<br />
<br />
=== 在线音乐 ===<br />
<br />
*网易云音乐{{AUR|netease-cloud-music}}。<br />
*酷我音乐(第三方){{AUR|kwplayer}}。<br />
<br />
=== 代理 ===<br />
<br />
即科学上网。<br />
*[[Shadowsocks (简体中文)]]<br />
*V2rayA:安装{{AUR|v2raya}}<br />
*Qv2ray: 安装{{AUR|qv2ray}}或者{{AUR|qv2ray-dev-git}}。可选地:<br />
**安装{{AUR|qv2ray-plugin-ssr-git}}以支持 ShadowsocksR 协议。<br />
**安装{{AUR|qv2ray-plugin-trojan-git}}以支持 Trojan-GFW 协议。<br />
**安装{{AUR|qv2ray-plugin-trojan-go-git}}以支持 Trojan-Go 协议。<br />
**安装{{AUR|qv2ray-plugin-naiveproxy-git}}以支持 NaiveProxy 协议。<br />
**安装{{AUR|qv2ray-plugin-command-git}}以进行自动化。<br />
**安装{{AUR|cgproxy}}或者{{AUR|cgproxy-git}}以使用基于 cgroup v2 的透明代理/网关代理。<br />
{{提示|若配置有archlinuxcn源,上述各包均可直接安装}}<br />
*Lantern(蓝灯):安装{{AUR|lantern}}(如安装有archlinuxcn源可直接使用{{ic|pacman -S lantern-bin}}安装)即可。<br />
*[[XX-Net (简体中文)]]<br />
*更改hosts: 获取可以科学上网的hosts文件,修改或替换{{ic|/etc/hosts}}即可。<br />
示例:从[https://github.com/googlehosts/hosts]项目获取[https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts hosts]文件,将其内容加入{{ic|/etc/hosts}}(如原hosts文件无需使用,也可直接覆盖)即可。也可执行更新hosts文件:<br />
{{bc|sudo wget https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O /etc/hosts}}<br />
为方便起见,可将其使用alias别名方式写入.bashrc,首先编辑~/.bashrc,在其中添加:<br />
alias hosts='sudo wget https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O /etc/hosts'<br />
然后执行:<br />
{{bc|source ~/.bashrc}}<br />
以后更新hosts文件只需要执行<br />
{{bc|hosts}}<br />
即可。<br />
<br />
{{提示|可以使用 [[crontab]] 定时执行脚本 (root 身份运行或 sudo 免密码)}}<br />
<br />
{{提示|除hosts方法外,你可能还需要进行相应的代理设置,如对程序单独设置代理或者使用工具设置临时代理(如使用{{Pkg|proxychains}}{{Broken package link (简体中文)|replaced by {{Pkg|proxychains-ng}}}}工具,配置好代理和proxychains的配置文件后,使用{{ic|proxchians 程序名}}使该程序从代理进行联网)或者全局代理(如桌面环境的设置中可能提供该选项),可参考各工具的相应文档进行设置,或者参考[[Proxy settings]]一文。}}<br />
<br />
=== 即时通讯工具 (IM) ===<br />
<br />
* Telegram: Telegram Messenger 是一个跨平台的实时通信软件。请查阅 [[Telegram (简体中文)]] 页面。<br />
* QQ: 请查阅 [[Tencent QQ (简体中文)]] 页面。<br />
<br />
* 微信: 目前微信尚无官方 Linux 版,也暂时没有现成的页面介绍。如果一定想在 Arch Linux 使用微信,有如下几种方式:<br />
** 在 VMware 或 VirtualBox 等虚拟机里安装 Windows 系统来使用微信;<br />
** 安装 {{AUR|deepin.com.wechat2}} 软件包,这是 Deepin 官方配置的 Wine 化应用,但版本较旧 (2.6.8);<br />
** 安装 {{AUR|deepin-wine-wechat}} 软件包,这是一位 Arch Linux 用户为 Arch 配置的 Wine 容器,微信版本跟随官方为最新;<br />
*** 如果配置了 archlinuxcn 源,可安装 {{ic|wine-wechat}} 和 {{ic|wine-for-wechat}} 两个软件包,和 deepin-wine-wechat 的区别仅在于作者不同;<br />
** 使用容器化应用,如 Docker,可以参考 [https://github.com/huan/docker-wechat 这个 GitHub 项目];但是其本质是放进容器里的 Wine 应用。<br />
{{注意|目前所有 Wine 化微信的小程序功能均不可用,且大于一定体积的图片会无法发送,详情请参考 [https://github.com/countstarlight/deepin-wine-wechat-arch/issues/42 这里]。}}<br />
<br />
=== 电子商务 ===<br />
<br />
很可惜并没有现成的维基页面,不过 [[User:Acgtyrant|Acgtyrant]] 用户在其博客上提供了 [http://arch.acgtyrant.com/2014/02/20/e-commerce/ 電子商務在 Arch Linux 下的簡易解決方案]{{Broken section link}}([https://web.archive.org/web/20150706100009/http://arch.acgtyrant.com/2014/02/20/e-commerce/ archive.org的存档])。<br />
<br />
=== 校园网 ===<br />
<br />
中国大陆众多高校采用各种客户端拨号上网,如城市热点drcom,锐捷。一些学校提供有网页登录或者linux版客户端,可参照相关说明文档安装使用。对于未提供网页登录以及客户端者:<br />
* Drcom用户可参考[[Drcom (简体中文)|Drcom]],锐捷用户可参照[[MentoHUST (简体中文)]] 指导您通过借助 MentoHUST 进行锐捷拨号。<br />
* 借助[[Wine_(简体中文)|wine]]尝试安装使用。<br />
* 使用虚拟机运行,可在虚拟机中登录客户端上网,虚拟机开启桥接,安装ssh服务端,在linux下ssh登录虚拟机上网。</div>
VictriD
https://wiki.archlinux.org/index.php?title=General_recommendations_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626455
General recommendations (简体中文)
2020-07-23T15:44:43Z
<p>VictriD: /* Microcode (微码) */ http to https</p>
<hr />
<div>[[Category:Installation process (简体中文)]]<br />
[[ar:General recommendations]]<br />
[[bs:General recommendations]]<br />
[[cs:General recommendations]]<br />
[[el:General recommendations]]<br />
[[en:General recommendations]]<br />
[[es:General recommendations]]<br />
[[fa:توصیههای عمومی]]<br />
[[it:General recommendations]]<br />
[[ja:一般的な推奨事項]]<br />
[[ko:General recommendations]]<br />
[[lt:General recommendations]]<br />
[[pl:General recommendations]]<br />
[[pt:General recommendations]]<br />
[[ru:General recommendations]]<br />
[[tr:General recommendations]]<br />
[[uk:General recommendations]]<br />
[[zh-hant:General recommendations]]<br />
{{Related articles start (简体中文)}}<br />
{{Related2|FAQ (简体中文)|常见问题}}<br />
{{Related2|Installation Guide (简体中文)|安装指南}}<br />
{{Related2|List of applications (简体中文)|软件列表}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|General recommendations|2018-11-23|549342}}<br />
本文是各种重要或常用的文章的详细索引。阅读本文前,读者应该先通过 [[官方安装指南]] 安装 Arch Linux 基本系统。然后理解系统管理和软件包管理中解释的概念,再阅读 wiki 中的其它文章。<br />
<br />
{{注意|中国用户可以特别留意 [[#中国大陆用户的推荐解决方案]] 内容。}}<br />
<br />
==系统管理==<br />
<br />
这一部分提供系统管理方面的信息。更多内容,请参考[[Core_utilities_(简体中文)|核心工具]]和[[:Category:System administration (简体中文)|系统管理分类]]。<br />
<br />
===用户和用户组===<br />
<br />
新安装的系统只有一个[[Wikipedia:Superuser|超级用户]],即 root。使用 root 进行日常操作是不安全的。应当[[User Management (简体中文)|创建]]普通用户进行日常操作,仅在管理系统时使用 root。不要在服务器上给 root 开放[[SSH]]登录权限。普通用户的创建方法请参阅 [[Users and groups (简体中文)|用户和用户组]]。<br />
<br />
[[Users and groups (简体中文)|用户和用户组]]是GNU/Linux 权限控制机制的基础。管理员通过调整用户组的成员、所有者,可以控制用户使用系统资源。<br />
<br />
===权限提升===<br />
<br />
[[su (简体中文)|su]] 和 [[sudo (简体中文)|sudo]] 两个命令都允许您以其他用户的身份运行命令。''su'' 默认将开启一个 root 用户登录 shell,而更加简单和方便的 ''sudo'' 会给单个命令临时的超级用户权限。更多不同,请对比两篇文章。另外,还有一个 ''sudo'' 的轻量级替代版本 {{Pkg|opendoas}}。<br />
<br />
=== 服务管理 ===<br />
<br />
Arch Linux 使用 [[systemd (简体中文)]] 管理系统服务。新用户有必要了解其基本使用方法。通常使用 {{ic|# systemctl}} 命令进行系统管理,参见[[systemd (简体中文)#systemd 基本工具|此文]]。<br />
<br />
=== 系统维护 ===<br />
<br />
Arch 是滚动发行系统,软件包的更新速度很快,用户需要花些时间进行 [[System maintenance|系统维护]]。 [[Security|安全]]页面也给出了很多加强系统安全性的建议和技巧。<br />
<br />
==软件包管理==<br />
<br />
此部分提供了软件包管理的信息,参见:[[FAQ#Package management]] 和 [[:Category:Package management (简体中文)]]。<br />
<br />
{{注意|Arch 的升级有时候需要手动处理。请订阅[https://mailman.archlinux.org/mailman/listinfo/arch-announce/ arch-announce 邮件列表] ,每次升级前查看 [https://www.archlinux.org/ Arch 新闻]或者订阅 [https://www.archlinux.org/feeds/news/ RSS feed]。}}<br />
<br />
=== Pacman ===<br />
<br />
Pacman 是 Arch 的软件包管理器。[[pacman (简体中文)|pacman]] 和 [[FAQ (简体中文)#软件包管理|FAQ]] 页面提供了安装、升级和管理软件包的信息。<br />
<br />
[[Pacman tips (简体中文)]]中有很多方便 pacman 使用的技巧。<br />
<br />
=== 软件仓库 ===<br />
<br />
[[官方软件仓库]]包含了各个仓库的详细介绍。[[非官方软件仓库]]包含很多个人维护的软件仓库。<br />
<br />
如果计划使用 32 位程序,建议启用 [[multilib]] 仓库。<br />
<br />
安装 [[pkgstats]],可以让软件开发人员统计软件包的使用情况。<br />
<br />
===软件仓库镜像===<br />
<br />
参见[[Mirrors (简体中文)|软件仓库镜像]]一文,获取寻找更快更新pacman镜像的方法。此外,可以查看[https://www.archlinux.org/mirrors/status/ 镜像状态]获取最新镜像站点同步信息。<br />
<br />
<br />
===Arch编译系统(ABS)===<br />
<br />
'''Ports'''是 BSD 发行版最初使用的一套系统,它是本地系统中包含各种软件编译脚本的目录树。<br />
<br />
[[ABS (简体中文)|ABS]]系统相当于 Arch 的 Ports,包含 Arch 官方软件包的编译脚本——[[PKGBUILD (简体中文)|PKGBUILD]]。编译脚本提供了哈希验证、软件主页、版本、协议、编译步骤等信息。通过 [[makepkg (简体中文)|makepkg]] 从编译脚本生成软件包,然后用 pacman 安装。<br />
<br />
实际上,Arch 的所有软件包(包括官方库、AUR)都是通过 makepkg 生成的。<br />
<br />
===Arch用户软件源(AUR)===<br />
<br />
Arch 编译系统提供了编译官方库软件的脚本,而 [[Arch User Repository (简体中文)|AUR]] 则提供了用户提交的、非官方的软件包编译脚本。这是一个基于 [https://aur.archlinux.org/index.php web 界面]或通过 [[AUR helper (简体中文)|AUR 工具]]访问的非官方软件仓库。<br />
<br />
==启动==<br />
<br />
这部分包含系统启动方面的信息。关于Arch开机过程,参见:[[Arch boot process (简体中文)|Arch 启动过程]]。更多信息,参见:[[:Category:Boot process (简体中文)|启动过程分类]]。<br />
<br />
=== 硬件自动探测 ===<br />
<br />
默认情况下,[[udev (简体中文)|udev]]会在开机时自动探测硬件。禁止加载某些内核模块、手动选择要使用的模块。此外,[[Xorg (简体中文)|Xorg]] 也使用 udev 探测硬件,用户也可以调整这方面配置。<br />
<br />
=== Microcode (微码) ===<br />
<br />
处理器可能有[https://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly 错误行为], 而内核可以通过更新启动时的 ''Microcode'',即微码,来修正这些错误行为。参考[[Microcode (简体中文)|微码]]获取更多细节。<br />
<br />
===保留启动信息===<br />
<br />
当系统启动完毕,启动信息会被清除并显示登录提示符,使得用户无法获得启动进程的反馈信息,[[Disable clearing of boot messages]] 可以解决这个问题。<br />
<br />
=== 开机时打开 Num Lock===<br />
<br />
大多数键盘都有一个Num Lock键,通过它控制小键盘的开关。用户可能希望在系统启动时打开Num Lock,参见:[[Activating numlock on bootup (简体中文)|启动时激活 Numlock]]。<br />
<br />
== 图形界面 ==<br />
<br />
本部分提供了在系统上安装图形程序,参阅 [[:Category:X server (简体中文)]]。<br />
<br />
=== 显示服务 ===<br />
[[Wikipedia:X Window System|X 窗口管理系统]]('''X11'''或者'''X''') 是基于网络的显示协议,提供了窗口功能,包含建立图形用户界面(GUI)的标准工具和协议。[[Xorg (简体中文)|Xorg]]是X窗口系统11版本的开源实现,提供图形用户界面, 安装和配置请阅读[[Xorg (简体中文)|Xorg]]。<br />
<br />
[[Wayland (简体中文)|Wayland]] 是新的显示服务协议,Weston 是参考实现。目前还处于开发阶段,支持的程序很少。<br />
<br />
===显卡驱动===<br />
默认的'''vesa'''显卡驱动对于大多数显卡都是兼容的,但是通过为ATI , Intel或NVIDIA产品安装适当的驱动程序,可以明显地改善性能并利用附加功能。根据显卡制造商,分别参见:[[ATI (简体中文)]],[[Intel (简体中文)]],[[NVIDIA (简体中文)]]。<br />
<br />
=== 桌面环境 ===<br />
[[Xorg (简体中文)|Xorg]]只提供图形环境的基本框架,完整的用户体验还需要其他组件。 [[桌面环境]](DE): 在'''X'''之上并与其共同运作,提供完整的功能和动态图形界面。桌面环境通常提供图标、小程序(applets)、窗口、工具栏、文件夹、壁纸、应用程序和拖放等功能。使用[[GNOME (简体中文)|GNOME]]、[[KDE (简体中文)|KDE]]、[[LXDE (简体中文)|LXDE]]、[[Xfce (简体中文)|Xfce]]这类[[桌面环境]],是最简单的配置方法. [[:Category:Desktop environments]] 包含了各种桌面环境。<br />
<br />
=== 窗口管理器 ===<br />
完整的桌面环境提供了完全的用户界面,但是通常会占用不少系统资源。希望系统性能最大化的用户可以只安装[[窗口管理器]],然后加入需要的其他软件。大部分的桌面环境都可以换用其它的窗口管理器。 [[:Category:Dynamic WMs|动态]], [[:Category:Stacking WMs|堆栈式]] 和 [[:Category:Tiling WMs|平铺]] 窗口管理器处理窗口的方式各不相同。<br />
<br />
=== 显示管理器 ===<br />
除了手动启动 X 的方法外,可以让图形界面自动启动,[[显示管理器]] 介绍了启动管理器的使用方法。 [[Start X at Login (简体中文)|Start X at Login]] 提供了直接从终端启动的轻量方法。<br />
<br />
==电源管理==<br />
<br />
本章对笔记本用户可能更为有用。更多信息,参见: [[:Category:Power management (简体中文)]]。<br />
<br />
===ACPI 事件 ===<br />
电源按键或者合上笔记本会发出 ACPI 事件,可以配置系统在收到这些事件时的相应。推荐的方式是使用 [[systemd (简体中文)]], 参阅 [[Power management#Power management with systemd|Systemd 电源管理]]. 老的方法是使用 [[acpid (简体中文)]],不推荐使用。.<br />
<br />
===CPU 频率调节===<br />
<br />
最新的CPU通常都有自动调节频率的功能。通过该功能可以有效节约电能、减少发热,提升硬件寿命。[[Cpufrequtils (简体中文)]]是配置该功能的工具集。<br />
<br />
===笔记本电脑===<br />
<br />
针对特定型号笔记本电脑的配置信息,参见:[[:Category:Laptops (简体中文)]]。有关笔记本电脑文章的概览,参见: [[Laptop (简体中文)|Laptop]]。<br />
<br />
===待机和休眠===<br />
<br />
待机,指系统将当前状态保存于内存中,进入的低能耗状态(保持开机)。休眠,与待机有所不同,是将当前状态保存于硬盘中,然后可以完全断电。参阅[[Suspend and hibernate]]。<br />
<br />
== 多媒体 ==<br />
<br />
[[:Category:Multimedia]]包含更多多媒体方面的资源<br />
<br />
=== 声音 ===<br />
<br />
内核声卡驱动提供了[[Sound|声音]]:<br />
<br />
*[[ALSA (简体中文)|ALSA]] 是Linux内核组件,推荐使用。只需要解除静音,安装{{Pkg|alsa-utils}}软件包,它包含了{{ic|alsamixer}})工具,然后按照[[Advanced Linux Sound Architecture (简体中文)#取消通道静音|此文]]{{Broken section link}}进行设置即可。<br />
* 如果 Alsa 不能工作,可以试试[[OSS (简体中文)|OSS]]。<br />
<br />
另外,用户可能希望安装且配置一个 [[Sound#Sound servers|sound server]],例如[[PulseAudio]]. 对于高级声音需求, 可浏览 [[professional audio]].<br />
<br />
===浏览器插件===<br />
<br />
用户可以安装Adobe Acrobat Reader、Adobe Flash Player,Java之类的[[browser plugins (简体中文)|浏览器插件]],以使用更多的富媒体互联网资源。<br />
<br />
===解码器===<br />
<br />
多媒体应用程序利用[[Codecs (简体中文)|解码器]]编码或解码音频、视频流媒体。要播放多媒体文件,正确安装编码器是必不可少的。<br />
<br />
==网络==<br />
<br />
本文包含网络方面的配置信息。更多信息参见:[[Network (简体中文)|网络]],[[:Category:Networking (简体中文)|网络分类]]。<br />
<br />
===时钟同步===<br />
<br />
[[Network Time Protocol (简体中文)|NTP]],是最常用的网络同步时间的协议。<br />
<br />
=== DNS 安全===<br />
<br />
当在浏览网站,在线支付,连接 [[SSH]] 服务 和类似的事情的时候,为了更安全,考虑使用 [[DNSSEC]]-enabled 浏览器,它可以验证 [[Wikipedia:Domain Name System|DNS]] 记录的签名, 也可以用 [[DNSCrypt]] 来加密 DNS 的传输.<br />
<br />
===DNSSEC 验证===<br />
<br />
网络安全方面安全,[[SSH (简体中文)|SSH]]提供加密的网络链接。而使用支持[[DNSSEC]]的客户端,为提供DNS记录验证,将更进一步加强网络安全。<br />
<br />
===配置防火墙===<br />
<br />
[[Firewalls|防火墙]]为Linux网络访问提供额外保护。作为[[Wikipedia:Netfilter|Netfilter]]计划的一部分,Linux 内核内置了iptables——一种[[Wikipedia:Stateful firewall|状态防火墙]](Stateful firewall)。可以通过直接或间接的方式配置它。非常推荐建立一个防火墙,参考[[Firewalls|防火墙]]。<br />
<br />
=== 资源共享 ===<br />
<br />
可以通过 [[NFS]] 或 [[SSHFS]] 在网络间共享文件.<br />
<br />
用户可以使用[[Samba (简体中文)|Samba]]进行 Windows 与 Arch Linux 间的网络传输。<br />
<br />
要将 Arch Linux 系统连接到 Active Directory 认证的网络,请阅读文章[[Active Directory integration|Active Directory 整合]].<br />
<br />
参阅 [[:Category:Network sharing]].<br />
<br />
==输入==<br />
<br />
这一部分包含常用的输入设备配置建议。更多信息,参见:[[:Category:Input devices (简体中文)|输入设备分类]].<br />
<br />
===键盘布局===<br />
<br />
默认配置下,非英语或非标准键盘可能不能正确工作。需要在[[Systemd#Console_and_keymap|{{ic|/etc/vconsole.conf}}]]{{Broken section link}}中设置[[KEYMAP (简体中文)|按键映射]]环境变量配置键盘布局。Xorg用户需要做额外的配置,参见:[[Xorg#Keyboard layout]]{{Broken section link}}。<br />
<br />
===鼠标按键配置===<br />
<br />
一些高级鼠标可能有许多按键,默认情况下系统并不能正确配置它们。这方面的信息,参见:[[Get All Mouse Buttons Working]]。<br />
<br />
===笔记本触摸板===<br />
<br />
[http://www.synaptics.com/ Synaptics]和[http://www.alps.com/ ALPS]是笔记本常用的两种触摸板。对于Synaptics用户,参见[[Touchpad Synaptics]]获取配置信息。<br />
<br />
=== TrackPoints ===<br />
<br />
见 [[TrackPoint]] 文章来配置您的TrackPoint设备。<br />
<br />
==性能优化==<br />
这一部分包含一些实用的性能优化技巧。通过使用这些技巧,可以有效提升程序性能。<br />
<br />
===性能测试===<br />
<br />
[[Benchmarking|性能测试]]帮助用户评估系统性能,为优化系统性能提供信息。<br />
<br />
===性能最大化===<br />
<br />
[[Maximizing performance (简体中文)|性能最大化]]一文提供了提升Arch系统性能的方法。<br />
<br />
=== 固态硬盘 ===<br />
<br />
[[固态硬盘]] 一文包含固态硬盘的各个方面,包括配置和提高寿命。<br />
<br />
== 系统服务 ==<br />
<br />
=== 文件索引和搜索 ===<br />
<br />
大部分发行版都提供了 {{ic|locate}} 命令进行快速文件搜索,在 Arch 中建议安装软件包 {{Pkg|mlocate}}。安装后请执行{{ic|updatedb}}建立文件系统索引。<br />
<br />
===打印===<br />
<br />
[[CUPS]]是苹果公司开发的、符合标准的开源打印系统。特定型号打印机的配置信息,参见:[[:Category:Printers (简体中文)|打印机分类]]。<br />
<br />
===本地邮件交换===<br />
<br />
参见[[Local Mail Delivery with Postfix|使用Postfix进行本地邮件交换]]简单配置邮件交换。此外,用户还可以选择:[[SSMTP]],[[Msmtp]]和[[fdm]]。<br />
<br />
==外观美化==<br />
<br />
本栏讨论ArchLinux界面的美化。更多信息请参考:[[:Category:Eye candy (简体中文)]]。<br />
<br />
===字体===<br />
<br />
在安装桌面环境/窗口管理器'''之前''',也许你会先安装些美观的字体。Dejavu 是不错的字体集。英文字体优先选择dejavu字体<br />
# pacman -S ttf-dejavu<br />
对于中文字体,开源的文泉驿正黑矢量字体是不错的选择,它还内嵌了9pt-12pt的点阵宋体:<br />
{{bc|# pacman -S wqy-zenhei}}<br />
当然现在流行的是安装1个字体:<br />
{{bc|# pacman -S wqy-microhei}}<br />
<br />
可能有人需要安装微软视窗下的字体,如下安装之: {{AUR|ttf-win7-fonts}}, {{AUR|ttf-office-2007-fonts}}<br />
<br />
请访问 [[Font configuration|字体配置]] 获取配置字体渲染的详细信息,[[Fonts (简体中文)]] 提供了字体选择建议和安装方法。<br />
<br />
对于经常使用虚拟终端的用户,可以通过配置字体提高可读性,参见:[[Fonts#Console fonts]]{{Broken section link}}。<br />
<br />
=== GTK 和 Qt 主题 ===<br />
<br />
Linux 下的图形界面基本都使用 [[GTK+]] 或者 [[Qt]] 工具集。这些文章和 [[Uniform look for Qt and GTK applications]] 提供了让程序更美观的方法。<br />
<br />
==控制台优化==<br />
<br />
本部分包括控制台的优化和微调方法。参阅 [[:Category:Command shells]].<br />
<br />
=== Tab 自动补全 ===<br />
<br />
建议参考所选 shell 的文档,立即设置增强的 [[Wikipedia:Command-line_completion|Tab 自动补全]]。<br />
<br />
===别名===<br />
<br />
给一个命令取别名, or a group thereof, 是使用控制台时的一种节省时间的方式。这种方式对于重复的任务特别有用,这些任务的参数在多次执行期间不需要大的改变。通常使用的省时的别名可以在这里找到 [[Bash#Aliases]], 这些别名也能很容易地移植到 [[zsh]] 。<br />
<br />
===命令别名===<br />
<br />
用户可以[[Core utilities#alias|自定义常用命令的别名]]{{Broken section link}},以方便使用。<br />
<br />
=== 其它 shells ===<br />
<br />
[[Bash]] 是 Arch 默认安装的 shell,而安装的时候使用的是 [[zsh]] 并使用 {{Pkg|grml-zsh-config}} 插件。其它选择参阅 [[Command shell#List of shells]]。<br />
<br />
===Bash 增强功能===<br />
<br />
[[Bash#Tips and tricks]]介绍了些Bash的杂项设置,包括:命令补全,历史记录,宏等等。<br />
<br />
===彩色输出===<br />
<br />
参考 [[Color output in console]]。<br />
<br />
===压缩文件===<br />
<br />
压缩包,或称为归档,在GNU/Linux十分常用。[[Tar]]是最常用的归档工具,用户应该熟悉它的语法。此外还有Arch软件包使用的xz压缩包。参见:[[Core utilities#extract]]{{Broken section link}}。<br />
<br />
====控制台提示符====<br />
<br />
控制台提示符可以通过PS1环境变量灵活定制,参见论坛帖子:[https://bbs.archlinux.org/viewtopic.php?id=50885 What's your PS1?]。另见:[[Color Bash Prompt|Bash彩色提示符]](Zsh用户参见:[[Zsh#Prompts|Zsh:提示符]])。<br />
<br />
====Emacs shell====<br />
Emacs除了用作编辑器,其高级功能更为出名,其中一项就是把Emacs变成全功能shell。参见:[[Emacs#Colored output issues|Emacs打开彩色输出后的乱码问题]]。<br />
<br />
===鼠标支持===<br />
在控制台中,使用鼠标复制粘贴比传统 [[GNU screen]] 操作方式方便许多。参见:[[Console mouse support]]。<br />
<br />
===页面回滚缓冲===<br />
<br />
通过设置[[Scrollback buffer|页面回滚缓冲]]节省显示空间。<br />
<br />
===会话管理===<br />
<br />
[[tmux]]或[[GNU screen]]之类的终端复用器提供会话管理,在其中运行的程序不会因杀死终端、关闭X或用户登出而终止,只要终端复用器服务保持运行。随后,用户可以重新连接会话。<br />
<br />
== 系统中文化 ==<br />
<br />
[[Arch Linux 中文化]] 页面包含了详尽的中文化指南。<br />
<br />
== 中国大陆用户的推荐解决方案 ==<br />
<br />
{{注意|本章节独立于原英文翻译。}}<br />
<br />
众所周知,中国大陆用户有别于国际上的特殊需求,此章节旨在提供解决方案。<br />
<br />
=== 办公 ===<br />
<br />
* [[WPS Office (简体中文)]] <br />
* [[LibreOffice (简体中文)]]<br />
<br />
一些在线办公套件网站可以提供基础的办公功能:<br />
<br />
* [[wikipedia:Office_Online|Office Online]]: Microsoft提供的Office办公套件的网页版<br />
* [[wikipedia:Google_Docs,_Sheets_and_Slides|Google Docs, Sheets and Slides]]: Google提供的在线文字处理、电子制表和演示程序。<br />
<br />
=== 中文输入法 ===<br />
<br />
参见 [[Fcitx (简体中文)]]或[[IBus_(简体中文)|Ibus]]。<br />
<br />
=== 在线音乐 ===<br />
<br />
*网易云音乐{{AUR|netease-cloud-music}}。<br />
*酷我音乐(第三方){{AUR|kwplayer}}。<br />
<br />
=== 代理 ===<br />
<br />
即科学上网。<br />
*[[Shadowsocks (简体中文)]]<br />
*V2rayA:安装{{AUR|v2raya}}<br />
*Qv2ray: 安装{{AUR|qv2ray}}或者{{AUR|qv2ray-dev-git}}。可选地:<br />
**安装{{AUR|qv2ray-plugin-ssr-git}}以支持 ShadowsocksR 协议。<br />
**安装{{AUR|qv2ray-plugin-trojan-git}}以支持 Trojan-GFW 协议。<br />
**安装{{AUR|qv2ray-plugin-trojan-go-git}}以支持 Trojan-Go 协议。<br />
**安装{{AUR|qv2ray-plugin-naiveproxy-git}}以支持 NaiveProxy 协议。<br />
**安装{{AUR|qv2ray-plugin-command-git}}以进行自动化。<br />
**安装{{AUR|cgproxy}}或者{{AUR|cgproxy-git}}以使用基于 cgroup v2 的透明代理/网关代理。<br />
{{提示|若配置有archlinuxcn源,上述各包均可直接安装}}<br />
*Lantern(蓝灯):安装{{AUR|lantern}}(如安装有archlinuxcn源可直接使用{{ic|pacman -S lantern-bin}}安装)即可。<br />
*[[XX-Net (简体中文)]]<br />
*更改hosts: 获取可以科学上网的hosts文件,修改或替换{{ic|/etc/hosts}}即可。<br />
示例:从[https://github.com/googlehosts/hosts]项目获取[https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts hosts]文件,将其内容加入{{ic|/etc/hosts}}(如原hosts文件无需使用,也可直接覆盖)即可。也可执行更新hosts文件:<br />
{{bc|sudo wget https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O /etc/hosts}}<br />
为方便起见,可将其使用alias别名方式写入.bashrc,首先编辑~/.bashrc,在其中添加:<br />
alias hosts='sudo wget https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O /etc/hosts'<br />
然后执行:<br />
{{bc|source ~/.bashrc}}<br />
以后更新hosts文件只需要执行<br />
{{bc|hosts}}<br />
即可。<br />
<br />
{{提示|可以使用 [[crontab]] 定时执行脚本 (root 身份运行或 sudo 免密码)}}<br />
<br />
{{提示|除hosts方法外,你可能还需要进行相应的代理设置,如对程序单独设置代理或者使用工具设置临时代理(如使用{{Pkg|proxychains}}{{Broken package link (简体中文)|replaced by {{Pkg|proxychains-ng}}}}工具,配置好代理和proxychains的配置文件后,使用{{ic|proxchians 程序名}}使该程序从代理进行联网)或者全局代理(如桌面环境的设置中可能提供该选项),可参考各工具的相应文档进行设置,或者参考[[Proxy settings]]一文。}}<br />
<br />
=== 即时通讯工具 (IM) ===<br />
<br />
* Telegram: Telegram Messenger 是一个跨平台的实时通信软件。请查阅 [[Telegram (简体中文)]] 页面。<br />
* QQ: 请查阅 [[Tencent QQ (简体中文)]] 页面。<br />
<br />
* 微信: 目前微信尚无官方 Linux 版,也暂时没有现成的页面介绍。如果一定想在 Arch Linux 使用微信,有如下几种方式:<br />
** 在 VMware 或 VirtualBox 等虚拟机里安装 Windows 系统来使用微信;<br />
** 安装 {{AUR|deepin.com.wechat2}} 软件包,这是 Deepin 官方配置的 Wine 化应用,但版本较旧 (2.6.8);<br />
** 安装 {{AUR|deepin-wine-wechat}} 软件包,这是一位 Arch Linux 用户为 Arch 配置的 Wine 容器,微信版本跟随官方为最新;<br />
*** 如果配置了 archlinuxcn 源,可安装 {{ic|wine-wechat}} 和 {{ic|wine-for-wechat}} 两个软件包,和 deepin-wine-wechat 的区别仅在于作者不同;<br />
** 使用容器化应用,如 Docker,可以参考 [https://github.com/huan/docker-wechat 这个 GitHub 项目];但是其本质是放进容器里的 Wine 应用。<br />
{{注意|目前所有 Wine 化微信的小程序功能均不可用,且大于一定体积的图片会无法发送,详情请参考 [https://github.com/countstarlight/deepin-wine-wechat-arch/issues/42 这里]。}}<br />
<br />
=== 电子商务 ===<br />
<br />
很可惜并没有现成的维基页面,不过 [[User:Acgtyrant|Acgtyrant]] 用户在其博客上提供了 [http://arch.acgtyrant.com/2014/02/20/e-commerce/ 電子商務在 Arch Linux 下的簡易解決方案]{{Broken section link}}([https://web.archive.org/web/20150706100009/http://arch.acgtyrant.com/2014/02/20/e-commerce/ archive.org的存档])。<br />
<br />
=== 校园网 ===<br />
<br />
中国大陆众多高校采用各种客户端拨号上网,如城市热点drcom,锐捷。一些学校提供有网页登录或者linux版客户端,可参照相关说明文档安装使用。对于未提供网页登录以及客户端者:<br />
* Drcom用户可参考[[Drcom (简体中文)|Drcom]],锐捷用户可参照[[MentoHUST (简体中文)]] 指导您通过借助 MentoHUST 进行锐捷拨号。<br />
* 借助[[Wine_(简体中文)|wine]]尝试安装使用。<br />
* 使用虚拟机运行,可在虚拟机中登录客户端上网,虚拟机开启桥接,安装ssh服务端,在linux下ssh登录虚拟机上网。</div>
VictriD
https://wiki.archlinux.org/index.php?title=General_recommendations_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626454
General recommendations (简体中文)
2020-07-23T15:43:30Z
<p>VictriD: /* Microcode */ Update Chinese translation.</p>
<hr />
<div>[[Category:Installation process (简体中文)]]<br />
[[ar:General recommendations]]<br />
[[bs:General recommendations]]<br />
[[cs:General recommendations]]<br />
[[el:General recommendations]]<br />
[[en:General recommendations]]<br />
[[es:General recommendations]]<br />
[[fa:توصیههای عمومی]]<br />
[[it:General recommendations]]<br />
[[ja:一般的な推奨事項]]<br />
[[ko:General recommendations]]<br />
[[lt:General recommendations]]<br />
[[pl:General recommendations]]<br />
[[pt:General recommendations]]<br />
[[ru:General recommendations]]<br />
[[tr:General recommendations]]<br />
[[uk:General recommendations]]<br />
[[zh-hant:General recommendations]]<br />
{{Related articles start (简体中文)}}<br />
{{Related2|FAQ (简体中文)|常见问题}}<br />
{{Related2|Installation Guide (简体中文)|安装指南}}<br />
{{Related2|List of applications (简体中文)|软件列表}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|General recommendations|2018-11-23|549342}}<br />
本文是各种重要或常用的文章的详细索引。阅读本文前,读者应该先通过 [[官方安装指南]] 安装 Arch Linux 基本系统。然后理解系统管理和软件包管理中解释的概念,再阅读 wiki 中的其它文章。<br />
<br />
{{注意|中国用户可以特别留意 [[#中国大陆用户的推荐解决方案]] 内容。}}<br />
<br />
==系统管理==<br />
<br />
这一部分提供系统管理方面的信息。更多内容,请参考[[Core_utilities_(简体中文)|核心工具]]和[[:Category:System administration (简体中文)|系统管理分类]]。<br />
<br />
===用户和用户组===<br />
<br />
新安装的系统只有一个[[Wikipedia:Superuser|超级用户]],即 root。使用 root 进行日常操作是不安全的。应当[[User Management (简体中文)|创建]]普通用户进行日常操作,仅在管理系统时使用 root。不要在服务器上给 root 开放[[SSH]]登录权限。普通用户的创建方法请参阅 [[Users and groups (简体中文)|用户和用户组]]。<br />
<br />
[[Users and groups (简体中文)|用户和用户组]]是GNU/Linux 权限控制机制的基础。管理员通过调整用户组的成员、所有者,可以控制用户使用系统资源。<br />
<br />
===权限提升===<br />
<br />
[[su (简体中文)|su]] 和 [[sudo (简体中文)|sudo]] 两个命令都允许您以其他用户的身份运行命令。''su'' 默认将开启一个 root 用户登录 shell,而更加简单和方便的 ''sudo'' 会给单个命令临时的超级用户权限。更多不同,请对比两篇文章。另外,还有一个 ''sudo'' 的轻量级替代版本 {{Pkg|opendoas}}。<br />
<br />
=== 服务管理 ===<br />
<br />
Arch Linux 使用 [[systemd (简体中文)]] 管理系统服务。新用户有必要了解其基本使用方法。通常使用 {{ic|# systemctl}} 命令进行系统管理,参见[[systemd (简体中文)#systemd 基本工具|此文]]。<br />
<br />
=== 系统维护 ===<br />
<br />
Arch 是滚动发行系统,软件包的更新速度很快,用户需要花些时间进行 [[System maintenance|系统维护]]。 [[Security|安全]]页面也给出了很多加强系统安全性的建议和技巧。<br />
<br />
==软件包管理==<br />
<br />
此部分提供了软件包管理的信息,参见:[[FAQ#Package management]] 和 [[:Category:Package management (简体中文)]]。<br />
<br />
{{注意|Arch 的升级有时候需要手动处理。请订阅[https://mailman.archlinux.org/mailman/listinfo/arch-announce/ arch-announce 邮件列表] ,每次升级前查看 [https://www.archlinux.org/ Arch 新闻]或者订阅 [https://www.archlinux.org/feeds/news/ RSS feed]。}}<br />
<br />
=== Pacman ===<br />
<br />
Pacman 是 Arch 的软件包管理器。[[pacman (简体中文)|pacman]] 和 [[FAQ (简体中文)#软件包管理|FAQ]] 页面提供了安装、升级和管理软件包的信息。<br />
<br />
[[Pacman tips (简体中文)]]中有很多方便 pacman 使用的技巧。<br />
<br />
=== 软件仓库 ===<br />
<br />
[[官方软件仓库]]包含了各个仓库的详细介绍。[[非官方软件仓库]]包含很多个人维护的软件仓库。<br />
<br />
如果计划使用 32 位程序,建议启用 [[multilib]] 仓库。<br />
<br />
安装 [[pkgstats]],可以让软件开发人员统计软件包的使用情况。<br />
<br />
===软件仓库镜像===<br />
<br />
参见[[Mirrors (简体中文)|软件仓库镜像]]一文,获取寻找更快更新pacman镜像的方法。此外,可以查看[https://www.archlinux.org/mirrors/status/ 镜像状态]获取最新镜像站点同步信息。<br />
<br />
<br />
===Arch编译系统(ABS)===<br />
<br />
'''Ports'''是 BSD 发行版最初使用的一套系统,它是本地系统中包含各种软件编译脚本的目录树。<br />
<br />
[[ABS (简体中文)|ABS]]系统相当于 Arch 的 Ports,包含 Arch 官方软件包的编译脚本——[[PKGBUILD (简体中文)|PKGBUILD]]。编译脚本提供了哈希验证、软件主页、版本、协议、编译步骤等信息。通过 [[makepkg (简体中文)|makepkg]] 从编译脚本生成软件包,然后用 pacman 安装。<br />
<br />
实际上,Arch 的所有软件包(包括官方库、AUR)都是通过 makepkg 生成的。<br />
<br />
===Arch用户软件源(AUR)===<br />
<br />
Arch 编译系统提供了编译官方库软件的脚本,而 [[Arch User Repository (简体中文)|AUR]] 则提供了用户提交的、非官方的软件包编译脚本。这是一个基于 [https://aur.archlinux.org/index.php web 界面]或通过 [[AUR helper (简体中文)|AUR 工具]]访问的非官方软件仓库。<br />
<br />
==启动==<br />
<br />
这部分包含系统启动方面的信息。关于Arch开机过程,参见:[[Arch boot process (简体中文)|Arch 启动过程]]。更多信息,参见:[[:Category:Boot process (简体中文)|启动过程分类]]。<br />
<br />
=== 硬件自动探测 ===<br />
<br />
默认情况下,[[udev (简体中文)|udev]]会在开机时自动探测硬件。禁止加载某些内核模块、手动选择要使用的模块。此外,[[Xorg (简体中文)|Xorg]] 也使用 udev 探测硬件,用户也可以调整这方面配置。<br />
<br />
=== Microcode (微码) ===<br />
<br />
处理器可能有[http://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly 错误行为], 而内核可以通过更新启动时的 ''Microcode'',即微码,来修正这些错误行为。参考[[Microcode (简体中文)|微码]]获取更多细节。<br />
<br />
===保留启动信息===<br />
<br />
当系统启动完毕,启动信息会被清除并显示登录提示符,使得用户无法获得启动进程的反馈信息,[[Disable clearing of boot messages]] 可以解决这个问题。<br />
<br />
=== 开机时打开 Num Lock===<br />
<br />
大多数键盘都有一个Num Lock键,通过它控制小键盘的开关。用户可能希望在系统启动时打开Num Lock,参见:[[Activating numlock on bootup (简体中文)|启动时激活 Numlock]]。<br />
<br />
== 图形界面 ==<br />
<br />
本部分提供了在系统上安装图形程序,参阅 [[:Category:X server (简体中文)]]。<br />
<br />
=== 显示服务 ===<br />
[[Wikipedia:X Window System|X 窗口管理系统]]('''X11'''或者'''X''') 是基于网络的显示协议,提供了窗口功能,包含建立图形用户界面(GUI)的标准工具和协议。[[Xorg (简体中文)|Xorg]]是X窗口系统11版本的开源实现,提供图形用户界面, 安装和配置请阅读[[Xorg (简体中文)|Xorg]]。<br />
<br />
[[Wayland (简体中文)|Wayland]] 是新的显示服务协议,Weston 是参考实现。目前还处于开发阶段,支持的程序很少。<br />
<br />
===显卡驱动===<br />
默认的'''vesa'''显卡驱动对于大多数显卡都是兼容的,但是通过为ATI , Intel或NVIDIA产品安装适当的驱动程序,可以明显地改善性能并利用附加功能。根据显卡制造商,分别参见:[[ATI (简体中文)]],[[Intel (简体中文)]],[[NVIDIA (简体中文)]]。<br />
<br />
=== 桌面环境 ===<br />
[[Xorg (简体中文)|Xorg]]只提供图形环境的基本框架,完整的用户体验还需要其他组件。 [[桌面环境]](DE): 在'''X'''之上并与其共同运作,提供完整的功能和动态图形界面。桌面环境通常提供图标、小程序(applets)、窗口、工具栏、文件夹、壁纸、应用程序和拖放等功能。使用[[GNOME (简体中文)|GNOME]]、[[KDE (简体中文)|KDE]]、[[LXDE (简体中文)|LXDE]]、[[Xfce (简体中文)|Xfce]]这类[[桌面环境]],是最简单的配置方法. [[:Category:Desktop environments]] 包含了各种桌面环境。<br />
<br />
=== 窗口管理器 ===<br />
完整的桌面环境提供了完全的用户界面,但是通常会占用不少系统资源。希望系统性能最大化的用户可以只安装[[窗口管理器]],然后加入需要的其他软件。大部分的桌面环境都可以换用其它的窗口管理器。 [[:Category:Dynamic WMs|动态]], [[:Category:Stacking WMs|堆栈式]] 和 [[:Category:Tiling WMs|平铺]] 窗口管理器处理窗口的方式各不相同。<br />
<br />
=== 显示管理器 ===<br />
除了手动启动 X 的方法外,可以让图形界面自动启动,[[显示管理器]] 介绍了启动管理器的使用方法。 [[Start X at Login (简体中文)|Start X at Login]] 提供了直接从终端启动的轻量方法。<br />
<br />
==电源管理==<br />
<br />
本章对笔记本用户可能更为有用。更多信息,参见: [[:Category:Power management (简体中文)]]。<br />
<br />
===ACPI 事件 ===<br />
电源按键或者合上笔记本会发出 ACPI 事件,可以配置系统在收到这些事件时的相应。推荐的方式是使用 [[systemd (简体中文)]], 参阅 [[Power management#Power management with systemd|Systemd 电源管理]]. 老的方法是使用 [[acpid (简体中文)]],不推荐使用。.<br />
<br />
===CPU 频率调节===<br />
<br />
最新的CPU通常都有自动调节频率的功能。通过该功能可以有效节约电能、减少发热,提升硬件寿命。[[Cpufrequtils (简体中文)]]是配置该功能的工具集。<br />
<br />
===笔记本电脑===<br />
<br />
针对特定型号笔记本电脑的配置信息,参见:[[:Category:Laptops (简体中文)]]。有关笔记本电脑文章的概览,参见: [[Laptop (简体中文)|Laptop]]。<br />
<br />
===待机和休眠===<br />
<br />
待机,指系统将当前状态保存于内存中,进入的低能耗状态(保持开机)。休眠,与待机有所不同,是将当前状态保存于硬盘中,然后可以完全断电。参阅[[Suspend and hibernate]]。<br />
<br />
== 多媒体 ==<br />
<br />
[[:Category:Multimedia]]包含更多多媒体方面的资源<br />
<br />
=== 声音 ===<br />
<br />
内核声卡驱动提供了[[Sound|声音]]:<br />
<br />
*[[ALSA (简体中文)|ALSA]] 是Linux内核组件,推荐使用。只需要解除静音,安装{{Pkg|alsa-utils}}软件包,它包含了{{ic|alsamixer}})工具,然后按照[[Advanced Linux Sound Architecture (简体中文)#取消通道静音|此文]]{{Broken section link}}进行设置即可。<br />
* 如果 Alsa 不能工作,可以试试[[OSS (简体中文)|OSS]]。<br />
<br />
另外,用户可能希望安装且配置一个 [[Sound#Sound servers|sound server]],例如[[PulseAudio]]. 对于高级声音需求, 可浏览 [[professional audio]].<br />
<br />
===浏览器插件===<br />
<br />
用户可以安装Adobe Acrobat Reader、Adobe Flash Player,Java之类的[[browser plugins (简体中文)|浏览器插件]],以使用更多的富媒体互联网资源。<br />
<br />
===解码器===<br />
<br />
多媒体应用程序利用[[Codecs (简体中文)|解码器]]编码或解码音频、视频流媒体。要播放多媒体文件,正确安装编码器是必不可少的。<br />
<br />
==网络==<br />
<br />
本文包含网络方面的配置信息。更多信息参见:[[Network (简体中文)|网络]],[[:Category:Networking (简体中文)|网络分类]]。<br />
<br />
===时钟同步===<br />
<br />
[[Network Time Protocol (简体中文)|NTP]],是最常用的网络同步时间的协议。<br />
<br />
=== DNS 安全===<br />
<br />
当在浏览网站,在线支付,连接 [[SSH]] 服务 和类似的事情的时候,为了更安全,考虑使用 [[DNSSEC]]-enabled 浏览器,它可以验证 [[Wikipedia:Domain Name System|DNS]] 记录的签名, 也可以用 [[DNSCrypt]] 来加密 DNS 的传输.<br />
<br />
===DNSSEC 验证===<br />
<br />
网络安全方面安全,[[SSH (简体中文)|SSH]]提供加密的网络链接。而使用支持[[DNSSEC]]的客户端,为提供DNS记录验证,将更进一步加强网络安全。<br />
<br />
===配置防火墙===<br />
<br />
[[Firewalls|防火墙]]为Linux网络访问提供额外保护。作为[[Wikipedia:Netfilter|Netfilter]]计划的一部分,Linux 内核内置了iptables——一种[[Wikipedia:Stateful firewall|状态防火墙]](Stateful firewall)。可以通过直接或间接的方式配置它。非常推荐建立一个防火墙,参考[[Firewalls|防火墙]]。<br />
<br />
=== 资源共享 ===<br />
<br />
可以通过 [[NFS]] 或 [[SSHFS]] 在网络间共享文件.<br />
<br />
用户可以使用[[Samba (简体中文)|Samba]]进行 Windows 与 Arch Linux 间的网络传输。<br />
<br />
要将 Arch Linux 系统连接到 Active Directory 认证的网络,请阅读文章[[Active Directory integration|Active Directory 整合]].<br />
<br />
参阅 [[:Category:Network sharing]].<br />
<br />
==输入==<br />
<br />
这一部分包含常用的输入设备配置建议。更多信息,参见:[[:Category:Input devices (简体中文)|输入设备分类]].<br />
<br />
===键盘布局===<br />
<br />
默认配置下,非英语或非标准键盘可能不能正确工作。需要在[[Systemd#Console_and_keymap|{{ic|/etc/vconsole.conf}}]]{{Broken section link}}中设置[[KEYMAP (简体中文)|按键映射]]环境变量配置键盘布局。Xorg用户需要做额外的配置,参见:[[Xorg#Keyboard layout]]{{Broken section link}}。<br />
<br />
===鼠标按键配置===<br />
<br />
一些高级鼠标可能有许多按键,默认情况下系统并不能正确配置它们。这方面的信息,参见:[[Get All Mouse Buttons Working]]。<br />
<br />
===笔记本触摸板===<br />
<br />
[http://www.synaptics.com/ Synaptics]和[http://www.alps.com/ ALPS]是笔记本常用的两种触摸板。对于Synaptics用户,参见[[Touchpad Synaptics]]获取配置信息。<br />
<br />
=== TrackPoints ===<br />
<br />
见 [[TrackPoint]] 文章来配置您的TrackPoint设备。<br />
<br />
==性能优化==<br />
这一部分包含一些实用的性能优化技巧。通过使用这些技巧,可以有效提升程序性能。<br />
<br />
===性能测试===<br />
<br />
[[Benchmarking|性能测试]]帮助用户评估系统性能,为优化系统性能提供信息。<br />
<br />
===性能最大化===<br />
<br />
[[Maximizing performance (简体中文)|性能最大化]]一文提供了提升Arch系统性能的方法。<br />
<br />
=== 固态硬盘 ===<br />
<br />
[[固态硬盘]] 一文包含固态硬盘的各个方面,包括配置和提高寿命。<br />
<br />
== 系统服务 ==<br />
<br />
=== 文件索引和搜索 ===<br />
<br />
大部分发行版都提供了 {{ic|locate}} 命令进行快速文件搜索,在 Arch 中建议安装软件包 {{Pkg|mlocate}}。安装后请执行{{ic|updatedb}}建立文件系统索引。<br />
<br />
===打印===<br />
<br />
[[CUPS]]是苹果公司开发的、符合标准的开源打印系统。特定型号打印机的配置信息,参见:[[:Category:Printers (简体中文)|打印机分类]]。<br />
<br />
===本地邮件交换===<br />
<br />
参见[[Local Mail Delivery with Postfix|使用Postfix进行本地邮件交换]]简单配置邮件交换。此外,用户还可以选择:[[SSMTP]],[[Msmtp]]和[[fdm]]。<br />
<br />
==外观美化==<br />
<br />
本栏讨论ArchLinux界面的美化。更多信息请参考:[[:Category:Eye candy (简体中文)]]。<br />
<br />
===字体===<br />
<br />
在安装桌面环境/窗口管理器'''之前''',也许你会先安装些美观的字体。Dejavu 是不错的字体集。英文字体优先选择dejavu字体<br />
# pacman -S ttf-dejavu<br />
对于中文字体,开源的文泉驿正黑矢量字体是不错的选择,它还内嵌了9pt-12pt的点阵宋体:<br />
{{bc|# pacman -S wqy-zenhei}}<br />
当然现在流行的是安装1个字体:<br />
{{bc|# pacman -S wqy-microhei}}<br />
<br />
可能有人需要安装微软视窗下的字体,如下安装之: {{AUR|ttf-win7-fonts}}, {{AUR|ttf-office-2007-fonts}}<br />
<br />
请访问 [[Font configuration|字体配置]] 获取配置字体渲染的详细信息,[[Fonts (简体中文)]] 提供了字体选择建议和安装方法。<br />
<br />
对于经常使用虚拟终端的用户,可以通过配置字体提高可读性,参见:[[Fonts#Console fonts]]{{Broken section link}}。<br />
<br />
=== GTK 和 Qt 主题 ===<br />
<br />
Linux 下的图形界面基本都使用 [[GTK+]] 或者 [[Qt]] 工具集。这些文章和 [[Uniform look for Qt and GTK applications]] 提供了让程序更美观的方法。<br />
<br />
==控制台优化==<br />
<br />
本部分包括控制台的优化和微调方法。参阅 [[:Category:Command shells]].<br />
<br />
=== Tab 自动补全 ===<br />
<br />
建议参考所选 shell 的文档,立即设置增强的 [[Wikipedia:Command-line_completion|Tab 自动补全]]。<br />
<br />
===别名===<br />
<br />
给一个命令取别名, or a group thereof, 是使用控制台时的一种节省时间的方式。这种方式对于重复的任务特别有用,这些任务的参数在多次执行期间不需要大的改变。通常使用的省时的别名可以在这里找到 [[Bash#Aliases]], 这些别名也能很容易地移植到 [[zsh]] 。<br />
<br />
===命令别名===<br />
<br />
用户可以[[Core utilities#alias|自定义常用命令的别名]]{{Broken section link}},以方便使用。<br />
<br />
=== 其它 shells ===<br />
<br />
[[Bash]] 是 Arch 默认安装的 shell,而安装的时候使用的是 [[zsh]] 并使用 {{Pkg|grml-zsh-config}} 插件。其它选择参阅 [[Command shell#List of shells]]。<br />
<br />
===Bash 增强功能===<br />
<br />
[[Bash#Tips and tricks]]介绍了些Bash的杂项设置,包括:命令补全,历史记录,宏等等。<br />
<br />
===彩色输出===<br />
<br />
参考 [[Color output in console]]。<br />
<br />
===压缩文件===<br />
<br />
压缩包,或称为归档,在GNU/Linux十分常用。[[Tar]]是最常用的归档工具,用户应该熟悉它的语法。此外还有Arch软件包使用的xz压缩包。参见:[[Core utilities#extract]]{{Broken section link}}。<br />
<br />
====控制台提示符====<br />
<br />
控制台提示符可以通过PS1环境变量灵活定制,参见论坛帖子:[https://bbs.archlinux.org/viewtopic.php?id=50885 What's your PS1?]。另见:[[Color Bash Prompt|Bash彩色提示符]](Zsh用户参见:[[Zsh#Prompts|Zsh:提示符]])。<br />
<br />
====Emacs shell====<br />
Emacs除了用作编辑器,其高级功能更为出名,其中一项就是把Emacs变成全功能shell。参见:[[Emacs#Colored output issues|Emacs打开彩色输出后的乱码问题]]。<br />
<br />
===鼠标支持===<br />
在控制台中,使用鼠标复制粘贴比传统 [[GNU screen]] 操作方式方便许多。参见:[[Console mouse support]]。<br />
<br />
===页面回滚缓冲===<br />
<br />
通过设置[[Scrollback buffer|页面回滚缓冲]]节省显示空间。<br />
<br />
===会话管理===<br />
<br />
[[tmux]]或[[GNU screen]]之类的终端复用器提供会话管理,在其中运行的程序不会因杀死终端、关闭X或用户登出而终止,只要终端复用器服务保持运行。随后,用户可以重新连接会话。<br />
<br />
== 系统中文化 ==<br />
<br />
[[Arch Linux 中文化]] 页面包含了详尽的中文化指南。<br />
<br />
== 中国大陆用户的推荐解决方案 ==<br />
<br />
{{注意|本章节独立于原英文翻译。}}<br />
<br />
众所周知,中国大陆用户有别于国际上的特殊需求,此章节旨在提供解决方案。<br />
<br />
=== 办公 ===<br />
<br />
* [[WPS Office (简体中文)]] <br />
* [[LibreOffice (简体中文)]]<br />
<br />
一些在线办公套件网站可以提供基础的办公功能:<br />
<br />
* [[wikipedia:Office_Online|Office Online]]: Microsoft提供的Office办公套件的网页版<br />
* [[wikipedia:Google_Docs,_Sheets_and_Slides|Google Docs, Sheets and Slides]]: Google提供的在线文字处理、电子制表和演示程序。<br />
<br />
=== 中文输入法 ===<br />
<br />
参见 [[Fcitx (简体中文)]]或[[IBus_(简体中文)|Ibus]]。<br />
<br />
=== 在线音乐 ===<br />
<br />
*网易云音乐{{AUR|netease-cloud-music}}。<br />
*酷我音乐(第三方){{AUR|kwplayer}}。<br />
<br />
=== 代理 ===<br />
<br />
即科学上网。<br />
*[[Shadowsocks (简体中文)]]<br />
*V2rayA:安装{{AUR|v2raya}}<br />
*Qv2ray: 安装{{AUR|qv2ray}}或者{{AUR|qv2ray-dev-git}}。可选地:<br />
**安装{{AUR|qv2ray-plugin-ssr-git}}以支持 ShadowsocksR 协议。<br />
**安装{{AUR|qv2ray-plugin-trojan-git}}以支持 Trojan-GFW 协议。<br />
**安装{{AUR|qv2ray-plugin-trojan-go-git}}以支持 Trojan-Go 协议。<br />
**安装{{AUR|qv2ray-plugin-naiveproxy-git}}以支持 NaiveProxy 协议。<br />
**安装{{AUR|qv2ray-plugin-command-git}}以进行自动化。<br />
**安装{{AUR|cgproxy}}或者{{AUR|cgproxy-git}}以使用基于 cgroup v2 的透明代理/网关代理。<br />
{{提示|若配置有archlinuxcn源,上述各包均可直接安装}}<br />
*Lantern(蓝灯):安装{{AUR|lantern}}(如安装有archlinuxcn源可直接使用{{ic|pacman -S lantern-bin}}安装)即可。<br />
*[[XX-Net (简体中文)]]<br />
*更改hosts: 获取可以科学上网的hosts文件,修改或替换{{ic|/etc/hosts}}即可。<br />
示例:从[https://github.com/googlehosts/hosts]项目获取[https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts hosts]文件,将其内容加入{{ic|/etc/hosts}}(如原hosts文件无需使用,也可直接覆盖)即可。也可执行更新hosts文件:<br />
{{bc|sudo wget https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O /etc/hosts}}<br />
为方便起见,可将其使用alias别名方式写入.bashrc,首先编辑~/.bashrc,在其中添加:<br />
alias hosts='sudo wget https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O /etc/hosts'<br />
然后执行:<br />
{{bc|source ~/.bashrc}}<br />
以后更新hosts文件只需要执行<br />
{{bc|hosts}}<br />
即可。<br />
<br />
{{提示|可以使用 [[crontab]] 定时执行脚本 (root 身份运行或 sudo 免密码)}}<br />
<br />
{{提示|除hosts方法外,你可能还需要进行相应的代理设置,如对程序单独设置代理或者使用工具设置临时代理(如使用{{Pkg|proxychains}}{{Broken package link (简体中文)|replaced by {{Pkg|proxychains-ng}}}}工具,配置好代理和proxychains的配置文件后,使用{{ic|proxchians 程序名}}使该程序从代理进行联网)或者全局代理(如桌面环境的设置中可能提供该选项),可参考各工具的相应文档进行设置,或者参考[[Proxy settings]]一文。}}<br />
<br />
=== 即时通讯工具 (IM) ===<br />
<br />
* Telegram: Telegram Messenger 是一个跨平台的实时通信软件。请查阅 [[Telegram (简体中文)]] 页面。<br />
* QQ: 请查阅 [[Tencent QQ (简体中文)]] 页面。<br />
<br />
* 微信: 目前微信尚无官方 Linux 版,也暂时没有现成的页面介绍。如果一定想在 Arch Linux 使用微信,有如下几种方式:<br />
** 在 VMware 或 VirtualBox 等虚拟机里安装 Windows 系统来使用微信;<br />
** 安装 {{AUR|deepin.com.wechat2}} 软件包,这是 Deepin 官方配置的 Wine 化应用,但版本较旧 (2.6.8);<br />
** 安装 {{AUR|deepin-wine-wechat}} 软件包,这是一位 Arch Linux 用户为 Arch 配置的 Wine 容器,微信版本跟随官方为最新;<br />
*** 如果配置了 archlinuxcn 源,可安装 {{ic|wine-wechat}} 和 {{ic|wine-for-wechat}} 两个软件包,和 deepin-wine-wechat 的区别仅在于作者不同;<br />
** 使用容器化应用,如 Docker,可以参考 [https://github.com/huan/docker-wechat 这个 GitHub 项目];但是其本质是放进容器里的 Wine 应用。<br />
{{注意|目前所有 Wine 化微信的小程序功能均不可用,且大于一定体积的图片会无法发送,详情请参考 [https://github.com/countstarlight/deepin-wine-wechat-arch/issues/42 这里]。}}<br />
<br />
=== 电子商务 ===<br />
<br />
很可惜并没有现成的维基页面,不过 [[User:Acgtyrant|Acgtyrant]] 用户在其博客上提供了 [http://arch.acgtyrant.com/2014/02/20/e-commerce/ 電子商務在 Arch Linux 下的簡易解決方案]{{Broken section link}}([https://web.archive.org/web/20150706100009/http://arch.acgtyrant.com/2014/02/20/e-commerce/ archive.org的存档])。<br />
<br />
=== 校园网 ===<br />
<br />
中国大陆众多高校采用各种客户端拨号上网,如城市热点drcom,锐捷。一些学校提供有网页登录或者linux版客户端,可参照相关说明文档安装使用。对于未提供网页登录以及客户端者:<br />
* Drcom用户可参考[[Drcom (简体中文)|Drcom]],锐捷用户可参照[[MentoHUST (简体中文)]] 指导您通过借助 MentoHUST 进行锐捷拨号。<br />
* 借助[[Wine_(简体中文)|wine]]尝试安装使用。<br />
* 使用虚拟机运行,可在虚拟机中登录客户端上网,虚拟机开启桥接,安装ssh服务端,在linux下ssh登录虚拟机上网。</div>
VictriD
https://wiki.archlinux.org/index.php?title=General_recommendations_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626453
General recommendations (简体中文)
2020-07-23T15:40:11Z
<p>VictriD: /* 系统管理 */ Update to the original English version.</p>
<hr />
<div>[[Category:Installation process (简体中文)]]<br />
[[ar:General recommendations]]<br />
[[bs:General recommendations]]<br />
[[cs:General recommendations]]<br />
[[el:General recommendations]]<br />
[[en:General recommendations]]<br />
[[es:General recommendations]]<br />
[[fa:توصیههای عمومی]]<br />
[[it:General recommendations]]<br />
[[ja:一般的な推奨事項]]<br />
[[ko:General recommendations]]<br />
[[lt:General recommendations]]<br />
[[pl:General recommendations]]<br />
[[pt:General recommendations]]<br />
[[ru:General recommendations]]<br />
[[tr:General recommendations]]<br />
[[uk:General recommendations]]<br />
[[zh-hant:General recommendations]]<br />
{{Related articles start (简体中文)}}<br />
{{Related2|FAQ (简体中文)|常见问题}}<br />
{{Related2|Installation Guide (简体中文)|安装指南}}<br />
{{Related2|List of applications (简体中文)|软件列表}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|General recommendations|2018-11-23|549342}}<br />
本文是各种重要或常用的文章的详细索引。阅读本文前,读者应该先通过 [[官方安装指南]] 安装 Arch Linux 基本系统。然后理解系统管理和软件包管理中解释的概念,再阅读 wiki 中的其它文章。<br />
<br />
{{注意|中国用户可以特别留意 [[#中国大陆用户的推荐解决方案]] 内容。}}<br />
<br />
==系统管理==<br />
<br />
这一部分提供系统管理方面的信息。更多内容,请参考[[Core_utilities_(简体中文)|核心工具]]和[[:Category:System administration (简体中文)|系统管理分类]]。<br />
<br />
===用户和用户组===<br />
<br />
新安装的系统只有一个[[Wikipedia:Superuser|超级用户]],即 root。使用 root 进行日常操作是不安全的。应当[[User Management (简体中文)|创建]]普通用户进行日常操作,仅在管理系统时使用 root。不要在服务器上给 root 开放[[SSH]]登录权限。普通用户的创建方法请参阅 [[Users and groups (简体中文)|用户和用户组]]。<br />
<br />
[[Users and groups (简体中文)|用户和用户组]]是GNU/Linux 权限控制机制的基础。管理员通过调整用户组的成员、所有者,可以控制用户使用系统资源。<br />
<br />
===权限提升===<br />
<br />
[[su (简体中文)|su]] 和 [[sudo (简体中文)|sudo]] 两个命令都允许您以其他用户的身份运行命令。''su'' 默认将开启一个 root 用户登录 shell,而更加简单和方便的 ''sudo'' 会给单个命令临时的超级用户权限。更多不同,请对比两篇文章。另外,还有一个 ''sudo'' 的轻量级替代版本 {{Pkg|opendoas}}。<br />
<br />
=== 服务管理 ===<br />
<br />
Arch Linux 使用 [[systemd (简体中文)]] 管理系统服务。新用户有必要了解其基本使用方法。通常使用 {{ic|# systemctl}} 命令进行系统管理,参见[[systemd (简体中文)#systemd 基本工具|此文]]。<br />
<br />
=== 系统维护 ===<br />
<br />
Arch 是滚动发行系统,软件包的更新速度很快,用户需要花些时间进行 [[System maintenance|系统维护]]。 [[Security|安全]]页面也给出了很多加强系统安全性的建议和技巧。<br />
<br />
==软件包管理==<br />
<br />
此部分提供了软件包管理的信息,参见:[[FAQ#Package management]] 和 [[:Category:Package management (简体中文)]]。<br />
<br />
{{注意|Arch 的升级有时候需要手动处理。请订阅[https://mailman.archlinux.org/mailman/listinfo/arch-announce/ arch-announce 邮件列表] ,每次升级前查看 [https://www.archlinux.org/ Arch 新闻]或者订阅 [https://www.archlinux.org/feeds/news/ RSS feed]。}}<br />
<br />
=== Pacman ===<br />
<br />
Pacman 是 Arch 的软件包管理器。[[pacman (简体中文)|pacman]] 和 [[FAQ (简体中文)#软件包管理|FAQ]] 页面提供了安装、升级和管理软件包的信息。<br />
<br />
[[Pacman tips (简体中文)]]中有很多方便 pacman 使用的技巧。<br />
<br />
=== 软件仓库 ===<br />
<br />
[[官方软件仓库]]包含了各个仓库的详细介绍。[[非官方软件仓库]]包含很多个人维护的软件仓库。<br />
<br />
如果计划使用 32 位程序,建议启用 [[multilib]] 仓库。<br />
<br />
安装 [[pkgstats]],可以让软件开发人员统计软件包的使用情况。<br />
<br />
===软件仓库镜像===<br />
<br />
参见[[Mirrors (简体中文)|软件仓库镜像]]一文,获取寻找更快更新pacman镜像的方法。此外,可以查看[https://www.archlinux.org/mirrors/status/ 镜像状态]获取最新镜像站点同步信息。<br />
<br />
<br />
===Arch编译系统(ABS)===<br />
<br />
'''Ports'''是 BSD 发行版最初使用的一套系统,它是本地系统中包含各种软件编译脚本的目录树。<br />
<br />
[[ABS (简体中文)|ABS]]系统相当于 Arch 的 Ports,包含 Arch 官方软件包的编译脚本——[[PKGBUILD (简体中文)|PKGBUILD]]。编译脚本提供了哈希验证、软件主页、版本、协议、编译步骤等信息。通过 [[makepkg (简体中文)|makepkg]] 从编译脚本生成软件包,然后用 pacman 安装。<br />
<br />
实际上,Arch 的所有软件包(包括官方库、AUR)都是通过 makepkg 生成的。<br />
<br />
===Arch用户软件源(AUR)===<br />
<br />
Arch 编译系统提供了编译官方库软件的脚本,而 [[Arch User Repository (简体中文)|AUR]] 则提供了用户提交的、非官方的软件包编译脚本。这是一个基于 [https://aur.archlinux.org/index.php web 界面]或通过 [[AUR helper (简体中文)|AUR 工具]]访问的非官方软件仓库。<br />
<br />
==启动==<br />
<br />
这部分包含系统启动方面的信息。关于Arch开机过程,参见:[[Arch boot process (简体中文)|Arch 启动过程]]。更多信息,参见:[[:Category:Boot process (简体中文)|启动过程分类]]。<br />
<br />
=== 硬件自动探测 ===<br />
<br />
默认情况下,[[udev (简体中文)|udev]]会在开机时自动探测硬件。禁止加载某些内核模块、手动选择要使用的模块。此外,[[Xorg (简体中文)|Xorg]] 也使用 udev 探测硬件,用户也可以调整这方面配置。<br />
<br />
=== Microcode ===<br />
<br />
处理器可能有 [http://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly 错误行为], kernel 可以通过更新启动时的 ''Microcode'' 来修正这些错误行为。参考 [[Microcode]] 获取更多细节。<br />
<br />
===保留启动信息===<br />
<br />
当系统启动完毕,启动信息会被清除并显示登录提示符,使得用户无法获得启动进程的反馈信息,[[Disable clearing of boot messages]] 可以解决这个问题。<br />
<br />
=== 开机时打开 Num Lock===<br />
<br />
大多数键盘都有一个Num Lock键,通过它控制小键盘的开关。用户可能希望在系统启动时打开Num Lock,参见:[[Activating numlock on bootup (简体中文)|启动时激活 Numlock]]。<br />
<br />
== 图形界面 ==<br />
<br />
本部分提供了在系统上安装图形程序,参阅 [[:Category:X server (简体中文)]]。<br />
<br />
=== 显示服务 ===<br />
[[Wikipedia:X Window System|X 窗口管理系统]]('''X11'''或者'''X''') 是基于网络的显示协议,提供了窗口功能,包含建立图形用户界面(GUI)的标准工具和协议。[[Xorg (简体中文)|Xorg]]是X窗口系统11版本的开源实现,提供图形用户界面, 安装和配置请阅读[[Xorg (简体中文)|Xorg]]。<br />
<br />
[[Wayland (简体中文)|Wayland]] 是新的显示服务协议,Weston 是参考实现。目前还处于开发阶段,支持的程序很少。<br />
<br />
===显卡驱动===<br />
默认的'''vesa'''显卡驱动对于大多数显卡都是兼容的,但是通过为ATI , Intel或NVIDIA产品安装适当的驱动程序,可以明显地改善性能并利用附加功能。根据显卡制造商,分别参见:[[ATI (简体中文)]],[[Intel (简体中文)]],[[NVIDIA (简体中文)]]。<br />
<br />
=== 桌面环境 ===<br />
[[Xorg (简体中文)|Xorg]]只提供图形环境的基本框架,完整的用户体验还需要其他组件。 [[桌面环境]](DE): 在'''X'''之上并与其共同运作,提供完整的功能和动态图形界面。桌面环境通常提供图标、小程序(applets)、窗口、工具栏、文件夹、壁纸、应用程序和拖放等功能。使用[[GNOME (简体中文)|GNOME]]、[[KDE (简体中文)|KDE]]、[[LXDE (简体中文)|LXDE]]、[[Xfce (简体中文)|Xfce]]这类[[桌面环境]],是最简单的配置方法. [[:Category:Desktop environments]] 包含了各种桌面环境。<br />
<br />
=== 窗口管理器 ===<br />
完整的桌面环境提供了完全的用户界面,但是通常会占用不少系统资源。希望系统性能最大化的用户可以只安装[[窗口管理器]],然后加入需要的其他软件。大部分的桌面环境都可以换用其它的窗口管理器。 [[:Category:Dynamic WMs|动态]], [[:Category:Stacking WMs|堆栈式]] 和 [[:Category:Tiling WMs|平铺]] 窗口管理器处理窗口的方式各不相同。<br />
<br />
=== 显示管理器 ===<br />
除了手动启动 X 的方法外,可以让图形界面自动启动,[[显示管理器]] 介绍了启动管理器的使用方法。 [[Start X at Login (简体中文)|Start X at Login]] 提供了直接从终端启动的轻量方法。<br />
<br />
==电源管理==<br />
<br />
本章对笔记本用户可能更为有用。更多信息,参见: [[:Category:Power management (简体中文)]]。<br />
<br />
===ACPI 事件 ===<br />
电源按键或者合上笔记本会发出 ACPI 事件,可以配置系统在收到这些事件时的相应。推荐的方式是使用 [[systemd (简体中文)]], 参阅 [[Power management#Power management with systemd|Systemd 电源管理]]. 老的方法是使用 [[acpid (简体中文)]],不推荐使用。.<br />
<br />
===CPU 频率调节===<br />
<br />
最新的CPU通常都有自动调节频率的功能。通过该功能可以有效节约电能、减少发热,提升硬件寿命。[[Cpufrequtils (简体中文)]]是配置该功能的工具集。<br />
<br />
===笔记本电脑===<br />
<br />
针对特定型号笔记本电脑的配置信息,参见:[[:Category:Laptops (简体中文)]]。有关笔记本电脑文章的概览,参见: [[Laptop (简体中文)|Laptop]]。<br />
<br />
===待机和休眠===<br />
<br />
待机,指系统将当前状态保存于内存中,进入的低能耗状态(保持开机)。休眠,与待机有所不同,是将当前状态保存于硬盘中,然后可以完全断电。参阅[[Suspend and hibernate]]。<br />
<br />
== 多媒体 ==<br />
<br />
[[:Category:Multimedia]]包含更多多媒体方面的资源<br />
<br />
=== 声音 ===<br />
<br />
内核声卡驱动提供了[[Sound|声音]]:<br />
<br />
*[[ALSA (简体中文)|ALSA]] 是Linux内核组件,推荐使用。只需要解除静音,安装{{Pkg|alsa-utils}}软件包,它包含了{{ic|alsamixer}})工具,然后按照[[Advanced Linux Sound Architecture (简体中文)#取消通道静音|此文]]{{Broken section link}}进行设置即可。<br />
* 如果 Alsa 不能工作,可以试试[[OSS (简体中文)|OSS]]。<br />
<br />
另外,用户可能希望安装且配置一个 [[Sound#Sound servers|sound server]],例如[[PulseAudio]]. 对于高级声音需求, 可浏览 [[professional audio]].<br />
<br />
===浏览器插件===<br />
<br />
用户可以安装Adobe Acrobat Reader、Adobe Flash Player,Java之类的[[browser plugins (简体中文)|浏览器插件]],以使用更多的富媒体互联网资源。<br />
<br />
===解码器===<br />
<br />
多媒体应用程序利用[[Codecs (简体中文)|解码器]]编码或解码音频、视频流媒体。要播放多媒体文件,正确安装编码器是必不可少的。<br />
<br />
==网络==<br />
<br />
本文包含网络方面的配置信息。更多信息参见:[[Network (简体中文)|网络]],[[:Category:Networking (简体中文)|网络分类]]。<br />
<br />
===时钟同步===<br />
<br />
[[Network Time Protocol (简体中文)|NTP]],是最常用的网络同步时间的协议。<br />
<br />
=== DNS 安全===<br />
<br />
当在浏览网站,在线支付,连接 [[SSH]] 服务 和类似的事情的时候,为了更安全,考虑使用 [[DNSSEC]]-enabled 浏览器,它可以验证 [[Wikipedia:Domain Name System|DNS]] 记录的签名, 也可以用 [[DNSCrypt]] 来加密 DNS 的传输.<br />
<br />
===DNSSEC 验证===<br />
<br />
网络安全方面安全,[[SSH (简体中文)|SSH]]提供加密的网络链接。而使用支持[[DNSSEC]]的客户端,为提供DNS记录验证,将更进一步加强网络安全。<br />
<br />
===配置防火墙===<br />
<br />
[[Firewalls|防火墙]]为Linux网络访问提供额外保护。作为[[Wikipedia:Netfilter|Netfilter]]计划的一部分,Linux 内核内置了iptables——一种[[Wikipedia:Stateful firewall|状态防火墙]](Stateful firewall)。可以通过直接或间接的方式配置它。非常推荐建立一个防火墙,参考[[Firewalls|防火墙]]。<br />
<br />
=== 资源共享 ===<br />
<br />
可以通过 [[NFS]] 或 [[SSHFS]] 在网络间共享文件.<br />
<br />
用户可以使用[[Samba (简体中文)|Samba]]进行 Windows 与 Arch Linux 间的网络传输。<br />
<br />
要将 Arch Linux 系统连接到 Active Directory 认证的网络,请阅读文章[[Active Directory integration|Active Directory 整合]].<br />
<br />
参阅 [[:Category:Network sharing]].<br />
<br />
==输入==<br />
<br />
这一部分包含常用的输入设备配置建议。更多信息,参见:[[:Category:Input devices (简体中文)|输入设备分类]].<br />
<br />
===键盘布局===<br />
<br />
默认配置下,非英语或非标准键盘可能不能正确工作。需要在[[Systemd#Console_and_keymap|{{ic|/etc/vconsole.conf}}]]{{Broken section link}}中设置[[KEYMAP (简体中文)|按键映射]]环境变量配置键盘布局。Xorg用户需要做额外的配置,参见:[[Xorg#Keyboard layout]]{{Broken section link}}。<br />
<br />
===鼠标按键配置===<br />
<br />
一些高级鼠标可能有许多按键,默认情况下系统并不能正确配置它们。这方面的信息,参见:[[Get All Mouse Buttons Working]]。<br />
<br />
===笔记本触摸板===<br />
<br />
[http://www.synaptics.com/ Synaptics]和[http://www.alps.com/ ALPS]是笔记本常用的两种触摸板。对于Synaptics用户,参见[[Touchpad Synaptics]]获取配置信息。<br />
<br />
=== TrackPoints ===<br />
<br />
见 [[TrackPoint]] 文章来配置您的TrackPoint设备。<br />
<br />
==性能优化==<br />
这一部分包含一些实用的性能优化技巧。通过使用这些技巧,可以有效提升程序性能。<br />
<br />
===性能测试===<br />
<br />
[[Benchmarking|性能测试]]帮助用户评估系统性能,为优化系统性能提供信息。<br />
<br />
===性能最大化===<br />
<br />
[[Maximizing performance (简体中文)|性能最大化]]一文提供了提升Arch系统性能的方法。<br />
<br />
=== 固态硬盘 ===<br />
<br />
[[固态硬盘]] 一文包含固态硬盘的各个方面,包括配置和提高寿命。<br />
<br />
== 系统服务 ==<br />
<br />
=== 文件索引和搜索 ===<br />
<br />
大部分发行版都提供了 {{ic|locate}} 命令进行快速文件搜索,在 Arch 中建议安装软件包 {{Pkg|mlocate}}。安装后请执行{{ic|updatedb}}建立文件系统索引。<br />
<br />
===打印===<br />
<br />
[[CUPS]]是苹果公司开发的、符合标准的开源打印系统。特定型号打印机的配置信息,参见:[[:Category:Printers (简体中文)|打印机分类]]。<br />
<br />
===本地邮件交换===<br />
<br />
参见[[Local Mail Delivery with Postfix|使用Postfix进行本地邮件交换]]简单配置邮件交换。此外,用户还可以选择:[[SSMTP]],[[Msmtp]]和[[fdm]]。<br />
<br />
==外观美化==<br />
<br />
本栏讨论ArchLinux界面的美化。更多信息请参考:[[:Category:Eye candy (简体中文)]]。<br />
<br />
===字体===<br />
<br />
在安装桌面环境/窗口管理器'''之前''',也许你会先安装些美观的字体。Dejavu 是不错的字体集。英文字体优先选择dejavu字体<br />
# pacman -S ttf-dejavu<br />
对于中文字体,开源的文泉驿正黑矢量字体是不错的选择,它还内嵌了9pt-12pt的点阵宋体:<br />
{{bc|# pacman -S wqy-zenhei}}<br />
当然现在流行的是安装1个字体:<br />
{{bc|# pacman -S wqy-microhei}}<br />
<br />
可能有人需要安装微软视窗下的字体,如下安装之: {{AUR|ttf-win7-fonts}}, {{AUR|ttf-office-2007-fonts}}<br />
<br />
请访问 [[Font configuration|字体配置]] 获取配置字体渲染的详细信息,[[Fonts (简体中文)]] 提供了字体选择建议和安装方法。<br />
<br />
对于经常使用虚拟终端的用户,可以通过配置字体提高可读性,参见:[[Fonts#Console fonts]]{{Broken section link}}。<br />
<br />
=== GTK 和 Qt 主题 ===<br />
<br />
Linux 下的图形界面基本都使用 [[GTK+]] 或者 [[Qt]] 工具集。这些文章和 [[Uniform look for Qt and GTK applications]] 提供了让程序更美观的方法。<br />
<br />
==控制台优化==<br />
<br />
本部分包括控制台的优化和微调方法。参阅 [[:Category:Command shells]].<br />
<br />
=== Tab 自动补全 ===<br />
<br />
建议参考所选 shell 的文档,立即设置增强的 [[Wikipedia:Command-line_completion|Tab 自动补全]]。<br />
<br />
===别名===<br />
<br />
给一个命令取别名, or a group thereof, 是使用控制台时的一种节省时间的方式。这种方式对于重复的任务特别有用,这些任务的参数在多次执行期间不需要大的改变。通常使用的省时的别名可以在这里找到 [[Bash#Aliases]], 这些别名也能很容易地移植到 [[zsh]] 。<br />
<br />
===命令别名===<br />
<br />
用户可以[[Core utilities#alias|自定义常用命令的别名]]{{Broken section link}},以方便使用。<br />
<br />
=== 其它 shells ===<br />
<br />
[[Bash]] 是 Arch 默认安装的 shell,而安装的时候使用的是 [[zsh]] 并使用 {{Pkg|grml-zsh-config}} 插件。其它选择参阅 [[Command shell#List of shells]]。<br />
<br />
===Bash 增强功能===<br />
<br />
[[Bash#Tips and tricks]]介绍了些Bash的杂项设置,包括:命令补全,历史记录,宏等等。<br />
<br />
===彩色输出===<br />
<br />
参考 [[Color output in console]]。<br />
<br />
===压缩文件===<br />
<br />
压缩包,或称为归档,在GNU/Linux十分常用。[[Tar]]是最常用的归档工具,用户应该熟悉它的语法。此外还有Arch软件包使用的xz压缩包。参见:[[Core utilities#extract]]{{Broken section link}}。<br />
<br />
====控制台提示符====<br />
<br />
控制台提示符可以通过PS1环境变量灵活定制,参见论坛帖子:[https://bbs.archlinux.org/viewtopic.php?id=50885 What's your PS1?]。另见:[[Color Bash Prompt|Bash彩色提示符]](Zsh用户参见:[[Zsh#Prompts|Zsh:提示符]])。<br />
<br />
====Emacs shell====<br />
Emacs除了用作编辑器,其高级功能更为出名,其中一项就是把Emacs变成全功能shell。参见:[[Emacs#Colored output issues|Emacs打开彩色输出后的乱码问题]]。<br />
<br />
===鼠标支持===<br />
在控制台中,使用鼠标复制粘贴比传统 [[GNU screen]] 操作方式方便许多。参见:[[Console mouse support]]。<br />
<br />
===页面回滚缓冲===<br />
<br />
通过设置[[Scrollback buffer|页面回滚缓冲]]节省显示空间。<br />
<br />
===会话管理===<br />
<br />
[[tmux]]或[[GNU screen]]之类的终端复用器提供会话管理,在其中运行的程序不会因杀死终端、关闭X或用户登出而终止,只要终端复用器服务保持运行。随后,用户可以重新连接会话。<br />
<br />
== 系统中文化 ==<br />
<br />
[[Arch Linux 中文化]] 页面包含了详尽的中文化指南。<br />
<br />
== 中国大陆用户的推荐解决方案 ==<br />
<br />
{{注意|本章节独立于原英文翻译。}}<br />
<br />
众所周知,中国大陆用户有别于国际上的特殊需求,此章节旨在提供解决方案。<br />
<br />
=== 办公 ===<br />
<br />
* [[WPS Office (简体中文)]] <br />
* [[LibreOffice (简体中文)]]<br />
<br />
一些在线办公套件网站可以提供基础的办公功能:<br />
<br />
* [[wikipedia:Office_Online|Office Online]]: Microsoft提供的Office办公套件的网页版<br />
* [[wikipedia:Google_Docs,_Sheets_and_Slides|Google Docs, Sheets and Slides]]: Google提供的在线文字处理、电子制表和演示程序。<br />
<br />
=== 中文输入法 ===<br />
<br />
参见 [[Fcitx (简体中文)]]或[[IBus_(简体中文)|Ibus]]。<br />
<br />
=== 在线音乐 ===<br />
<br />
*网易云音乐{{AUR|netease-cloud-music}}。<br />
*酷我音乐(第三方){{AUR|kwplayer}}。<br />
<br />
=== 代理 ===<br />
<br />
即科学上网。<br />
*[[Shadowsocks (简体中文)]]<br />
*V2rayA:安装{{AUR|v2raya}}<br />
*Qv2ray: 安装{{AUR|qv2ray}}或者{{AUR|qv2ray-dev-git}}。可选地:<br />
**安装{{AUR|qv2ray-plugin-ssr-git}}以支持 ShadowsocksR 协议。<br />
**安装{{AUR|qv2ray-plugin-trojan-git}}以支持 Trojan-GFW 协议。<br />
**安装{{AUR|qv2ray-plugin-trojan-go-git}}以支持 Trojan-Go 协议。<br />
**安装{{AUR|qv2ray-plugin-naiveproxy-git}}以支持 NaiveProxy 协议。<br />
**安装{{AUR|qv2ray-plugin-command-git}}以进行自动化。<br />
**安装{{AUR|cgproxy}}或者{{AUR|cgproxy-git}}以使用基于 cgroup v2 的透明代理/网关代理。<br />
{{提示|若配置有archlinuxcn源,上述各包均可直接安装}}<br />
*Lantern(蓝灯):安装{{AUR|lantern}}(如安装有archlinuxcn源可直接使用{{ic|pacman -S lantern-bin}}安装)即可。<br />
*[[XX-Net (简体中文)]]<br />
*更改hosts: 获取可以科学上网的hosts文件,修改或替换{{ic|/etc/hosts}}即可。<br />
示例:从[https://github.com/googlehosts/hosts]项目获取[https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts hosts]文件,将其内容加入{{ic|/etc/hosts}}(如原hosts文件无需使用,也可直接覆盖)即可。也可执行更新hosts文件:<br />
{{bc|sudo wget https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O /etc/hosts}}<br />
为方便起见,可将其使用alias别名方式写入.bashrc,首先编辑~/.bashrc,在其中添加:<br />
alias hosts='sudo wget https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O /etc/hosts'<br />
然后执行:<br />
{{bc|source ~/.bashrc}}<br />
以后更新hosts文件只需要执行<br />
{{bc|hosts}}<br />
即可。<br />
<br />
{{提示|可以使用 [[crontab]] 定时执行脚本 (root 身份运行或 sudo 免密码)}}<br />
<br />
{{提示|除hosts方法外,你可能还需要进行相应的代理设置,如对程序单独设置代理或者使用工具设置临时代理(如使用{{Pkg|proxychains}}{{Broken package link (简体中文)|replaced by {{Pkg|proxychains-ng}}}}工具,配置好代理和proxychains的配置文件后,使用{{ic|proxchians 程序名}}使该程序从代理进行联网)或者全局代理(如桌面环境的设置中可能提供该选项),可参考各工具的相应文档进行设置,或者参考[[Proxy settings]]一文。}}<br />
<br />
=== 即时通讯工具 (IM) ===<br />
<br />
* Telegram: Telegram Messenger 是一个跨平台的实时通信软件。请查阅 [[Telegram (简体中文)]] 页面。<br />
* QQ: 请查阅 [[Tencent QQ (简体中文)]] 页面。<br />
<br />
* 微信: 目前微信尚无官方 Linux 版,也暂时没有现成的页面介绍。如果一定想在 Arch Linux 使用微信,有如下几种方式:<br />
** 在 VMware 或 VirtualBox 等虚拟机里安装 Windows 系统来使用微信;<br />
** 安装 {{AUR|deepin.com.wechat2}} 软件包,这是 Deepin 官方配置的 Wine 化应用,但版本较旧 (2.6.8);<br />
** 安装 {{AUR|deepin-wine-wechat}} 软件包,这是一位 Arch Linux 用户为 Arch 配置的 Wine 容器,微信版本跟随官方为最新;<br />
*** 如果配置了 archlinuxcn 源,可安装 {{ic|wine-wechat}} 和 {{ic|wine-for-wechat}} 两个软件包,和 deepin-wine-wechat 的区别仅在于作者不同;<br />
** 使用容器化应用,如 Docker,可以参考 [https://github.com/huan/docker-wechat 这个 GitHub 项目];但是其本质是放进容器里的 Wine 应用。<br />
{{注意|目前所有 Wine 化微信的小程序功能均不可用,且大于一定体积的图片会无法发送,详情请参考 [https://github.com/countstarlight/deepin-wine-wechat-arch/issues/42 这里]。}}<br />
<br />
=== 电子商务 ===<br />
<br />
很可惜并没有现成的维基页面,不过 [[User:Acgtyrant|Acgtyrant]] 用户在其博客上提供了 [http://arch.acgtyrant.com/2014/02/20/e-commerce/ 電子商務在 Arch Linux 下的簡易解決方案]{{Broken section link}}([https://web.archive.org/web/20150706100009/http://arch.acgtyrant.com/2014/02/20/e-commerce/ archive.org的存档])。<br />
<br />
=== 校园网 ===<br />
<br />
中国大陆众多高校采用各种客户端拨号上网,如城市热点drcom,锐捷。一些学校提供有网页登录或者linux版客户端,可参照相关说明文档安装使用。对于未提供网页登录以及客户端者:<br />
* Drcom用户可参考[[Drcom (简体中文)|Drcom]],锐捷用户可参照[[MentoHUST (简体中文)]] 指导您通过借助 MentoHUST 进行锐捷拨号。<br />
* 借助[[Wine_(简体中文)|wine]]尝试安装使用。<br />
* 使用虚拟机运行,可在虚拟机中登录客户端上网,虚拟机开启桥接,安装ssh服务端,在linux下ssh登录虚拟机上网。</div>
VictriD
https://wiki.archlinux.org/index.php?title=Partitioning_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626445
Partitioning (简体中文)
2020-07-23T15:21:26Z
<p>VictriD: /* Btrfs 分区 */ Fix broken links</p>
<hr />
<div>[[Category:File systems (简体中文)]]<br />
[[Category:Boot process (简体中文)]]<br />
[[Category:System recovery (简体中文)]]<br />
[[ar:Partitioning]]<br />
[[en:Partitioning]]<br />
[[es:Partitioning]]<br />
[[fa:پارتیشن بندی]]<br />
[[hu:Partitioning]]<br />
[[it:Partitioning]]<br />
[[ja:パーティショニング]]<br />
[[pl:Partitioning]]<br />
[[pt:Partitioning]]<br />
[[ru:Partitioning]]<br />
[[tr:Partitioning]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|File systems}}<br />
{{Related|fdisk}}<br />
{{Related|gdisk}}<br />
{{Related|parted}}<br />
{{Related|fstab}}<br />
{{Related|LVM}}<br />
{{Related|Swap}}<br />
{{Related|Format a device}}<br />
{{Related|Arch boot process}}<br />
{{Related|Unified Extensible Firmware Interface}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Partitioning|2018-11-01|548479}}<br />
<br />
[[Wikipedia:Disk partitioning|分区]]是将硬盘的可用空间划分为多个可以独立访问的区块。<br />
<br />
可以为一个硬盘划分一个或者多个分区。一些场景需要使用多个分区:例如双重或多重启动,使用 [[swap]] 分区等。此外,分区也可以从逻辑上隔离数据,例如为音频和视频数据创建单独的分区。下面将会讨论通用的分区方案。<br />
<br />
每个分区在使用前需要格式化为 [[File systems (简体中文)|文件系统]] 。<br />
<br />
== 分区表 ==<br />
<br />
{{Tip|可以用 {{ic|parted ''/dev/sda'' print}} 或 {{ic|fdisk -l ''/dev/sda''}} 查看当前分区信息,{{ic|''/dev/sda''}} 是设备名。}}<br />
<br />
分区信息被存放在分区表中。目前有两种主流的模式:传统的 [[Master Boot Record]] 和新的 [[GUID Partition Table]]。后者功能更强大,解决了许多MBR的限制。<br />
<br />
=== Master Boot Record ===<br />
<br />
[[w:Master boot record|Master Boot Record]] (MBR) 是存储设备最开始的 512 字节。包含操作系统启动加载器和分区表,在 [[w:BIOS|BIOS]] 系统的 [[boot process|启动流程]] 中扮演重要角色。请参阅 [[Wikipedia:Master boot record#Disk partitioning]]。<br />
<br />
{{Note|MBR 并不位于某个分区中,而是分区前,设备的最开始部分。无分区设备的启动扇区或分区中的启动扇区被称为 [[w:Volume boot record|Volume boot record]]。}}<br />
<br />
==== 分区表 ====<br />
<br />
目前有三种分区类型:<br />
<br />
* 主分区(Primary)<br />
* 扩展分区(Extended)<br />
** 逻辑分区(Logical)<br />
<br />
'''主分区'''每个磁盘或者RAID卷上只能有4个,可设置为可启动状态。如果分区方案要求使用4个以上的分区,就需将至少一个分区设置为'''扩展分区''',并在上面建立'''逻辑分区'''。扩展分区可以被看作是容纳逻辑分区的容器。硬盘上最多只能有1个扩展分区。如果磁盘上有1个扩展分区,它也被看作是1个主分区。因此只能另外再建立3个主分区(例如3个主分区加1个扩展分区)。扩展分区内所包含的逻辑分区数量没有限制。如果在双重启动中有Windows,Windows需要占据一个主分区。<br />
<br />
通常习惯是创建主分区''sda1''到''sda3'',然后建立一个扩展分区''sda4''。''sda4''中包含''sda5'',''sda6''等逻辑分区。<br />
<br />
==== 引导记录 ====<br />
<br />
MBR 前面的 446 字节是启动代码区域,在 BIOS 系统中通常包含启动加载器的第一部分。请参阅[[Wikipedia:主引导记录]]。可以用 [[dd]] 备份和恢复启动代码。<br />
<br />
=== GUID 分区表 ===<br />
<br />
GPT方案中只有一种分区类型,'''主分区'''。磁盘和RAID卷中包含的分区数量没有限制。<br />
<br />
[[w:GUID Partition Table|GUID Partition Table]] (GPT) 是 [[Unified Extensible Firmware Interface]] 标准定义的分区规范。使用 [[w:Globally unique identifier|globally unique identifiers]] (GUIDs), 或 Linux 中的 UUID 定义分区和 [[w:GUID Partition Table#Partition type GUIDs|分区类型]]. 设计上是为了替换 [[#Master Boot Record]]。<br />
<br />
[[Wikipedia:GUID磁碟分割表]]<br />
<br />
GUID 分区表的磁盘开始位置有一个 [[Wikipedia:GUID Partition Table#Protective MBR (LBA 0)|protective Master Boot Record]] (PMBR),用以处理不支持 GPT 软件的访问。这段 MBR 和真正的 MBR 一样,可以用在支持 BIOS/GPT 启动的启动管理器中。<br />
<br />
=== 选择 GPT 还是 MBR ===<br />
<br />
[[GUID Partition Table]] (GPT)是一种更灵活的分区方式。它正在逐步取代[[Master Boot Record]] (MBR)系统。GPT相对于诞生于MS-DOS时代的MBR而言,有许多优点。新版的''fdisk''(MBR)和''gdisk''(GPT)使得使用GPT或者MBR在可靠性和性能最大化上都非常容易。<br />
<br />
在做出选择前,需要考虑如下内容:<br />
* 如果使用 GRUB legacy 作为bootloader,必须使用MBR。<br />
* 如果使用传统的BIOS,并且双启动中包含 Windows (无论是32位版还是64位版),必须使用MBR。<br />
* 如果使用 [[UEFI]] 而不是BIOS,并且双启动中包含 Windows 64位版,必须使用GPT。<br />
* 非常老的机器需要使用 MBR,因为 BIOS 可能不支持 GPT.<br />
* 如果不属于上述任何一种情况,可以随意选择使用 GPT 还是 MBR。由于 GPT 更先进,建议选择 GPT。<br />
* 建议在使用 [[Unified Extensible Firmware Interface|UEFI]] 的情况下选择 GPT,因为有些 UEFI firmware 不支持从 MBR 启动。<br />
<br />
{{注意|为了使 GRUB 从一台有 GPT 分区的基于 BIOS 的系统上启动,需要创建一个 [[GRUB#GUID_Partition_Table_.28GPT.29_specific_instructions|BIOS 启动分区]], 这个分区和 /boot 没关系,仅仅是 GRUB 使用,不要建立文件系统和挂载。}}<br />
<br />
=== Btrfs 分区 ===<br />
<br />
Btrfs可以独占整个存储设备并替代 [[Partitioning_(简体中文)#Master_Boot_Record|MBR]] 和 [[Partitioning_(简体中文)#GUID_分区表|GPT]] 分区方案。请参考[[Btrfs_(简体中文)#创建文件系统|创建 Btrfs 文件系统]]以获取更多信息。<br />
<br />
[[Wikipedia:Btrfs]]<br />
<br />
=== 备份 ===<br />
<br />
请参阅 [[fdisk#Backup and restore partition table]] 或 [[gdisk#Backup and restore partition table]].<br />
<br />
=== 恢复 ===<br />
<br />
可以用 {{Pkg|gpart}} 恢复被破坏的 MBR,详情参考 {{man|8|gpart}}。<br />
<br />
第一个 GPT 头(located at the start of the disk) from the secondary GPT header (located at the end of the disk) or vice versa. See [[gdisk#Recover GPT header]].<br />
<br />
Another option is [[File recovery#Testdisk and PhotoRec|TestDisk]], which supports recovering lost partitions on both MBR and GPT.<br />
<br />
== 分区方案 ==<br />
<br />
虽然有一些关于分区方案的通用建议,但没有严格的准则。有许多影响分区方案的因素,例如对灵活性的期望,访问速度,安全性以及可用磁盘空间的硬性限制。实际上就是个人取舍的问题。如果你想双启动 Arch Linux 和 Windows,请参考 [[Windows and Arch Dual Boot]]。<br />
{{警告|请别忘记为boot-loader预留空间。这对于 MBR 和 GRUB-Legacy 来说不是问题,但是许多新方案可能要求占用一个特殊的小分区。}}<br />
<br />
* [[UEFI]]系统需要有 [[EFI system partition|ESP]] 分区<br />
* 在 [[BIOS]] 系统上使用 [[GPT]] 进行分区后,安装 GRUB 时会需要一个额外的 BIOS 启动分区。<br />
* 如果使用的是 [[Btrfs]], 可以将子卷视为分区,请参考 [[Btrfs#Mounting subvolumes]].<br />
<br />
=== 单root分区 ===<br />
<br />
这种是最简单,同时也能满足大部分应用场景的方案。如果需要的话,可以建立一个 [[swapfile]]。通常刚开始的时候建议一个单独的 {{ic|/}} 分区,然后根据应用场景的需要,例如 RAID,加密,独立的多媒体分区等建立其他的分区。<br />
<br />
=== 多分区 ===<br />
<br />
将某个路径挂载为独立分区可以使其拥有不同的文件系统和挂载参数。某些情况下(例如多媒体文件分区),可以被多个操作系统共享。<br />
<br />
=== 挂载点 ===<br />
<br />
下面这些路径可以作为独立分区的挂载点,你也可以根据实际需要做出其他决定。{{man|7|file-hierarchy}} 介绍了各个目录的作用。<br />
<br />
==== 根分区 ====<br />
<br />
根目录是目录树的顶层,这里是主文件系统挂载和其他文件系统挂靠的地方。所有文件和目录都在根目录 {{ic|/}} 显示,即使它们实际上存储在其他的物理设备上。根文件系统中的内容应该足以启动、恢复、修复系统。因此 {{ic|/}} 目录下的特定目录是不能作为独立分区的。<br />
<br />
{{ic|/}} 分区或叫根分区是最重要而且必需的,需要最先挂载,其他其他分区可以被它取代。<br />
<br />
{{警告|与系统启动相关的特定目录(除了 {{ic|/boot}}) '''必须''' 与 {{ic|/}} 在同一个分区,或在系统刚进入用户态的时候通过 [[initramfs]] 挂载。这些特定的目录包括:{{ic|/etc}} 和 {{ic|/usr}} [http://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken] 。}}<br />
<br />
因为包括 {{ic|/usr}} 目录,根据安装的软件数量,会产生非常明显的增长。15-20 GB 对于大多数用户来说是一个比较合适的取值。如果你打算在这里放一个交换文件(swap file)的话,需要适当调大取值<br />
<br />
==== /boot ====<br />
<br />
{{ic|/boot}} 分区包含内核、ramdisk 镜像以及 bootloader 配置文件和 bootloader stage。它也可以存放内核在执行用户态程序之前所使用的其他数据。{{ic|/boot}} 在日常系统运行中并不需要,只在启动和内核升级(包括重建initial ramdisk)的时候用到。<br />
<br />
如果使用软RAID0(条带化)系统的话,必须有一个独立的 {{ic|/boot}} 分区。<br />
<br />
{{Note|如果使用 UEFI 启动管理器,支持读取 ESP 文件系统,建议将 [[ESP]] 挂载到 {{ic|/boot}}.}}<br />
<br />
不使用 [[UEFI]] 时,{{ic|/boot}} 的建议大小时 200 MB,使用 UEFI 时,需要至少 512 MiB 空间。<br />
<br />
==== /home ====<br />
<br />
{{ic|/home}}目录包含用户定义的配置文件、缓存、应用程序数据和媒体文件。<br />
<br />
将{{ic|/home}}目录独立使得{{ic|/}}分区可以单独重新划分,但是请注意你可以在 {{ic|/home}} 没有独立分区的情况下你仍然可以在不修改 {{ic|/home}} 目录内容的情况下重装 Arch —— 删除其他顶级目录,然后执行pacstrap。<br />
<br />
不能与使用其他发行版的用户共享同一个home目录,因为不同的发行版可能使用不兼容的软件版本和补丁。可以共享媒体目录,或至少使用 {{ic|/home}} 分区下的不同home目录。分区大小跟着存储的内容而定。<br />
<br />
==== /var ====<br />
<br />
{{ic|/var}} 目录存储变量数据例如 spool 目录和文件,管理和登录数据,[[pacman]] 的缓存,[[ABS]] 树等等。它通常被用作缓存或者日志记录,因此读写频繁。将它独立出来可以避免由于大量日志写入造成的磁盘空间耗尽等问题。<br />
<br />
可以将 {{ic|/usr}} 设置为只读挂载。所有在操作系统运行过程中(例如安装或软件维护)写入 {{ic|/usr}} 的东西放到 {{ic|/var}} 下。<br />
<br />
{{注意|{{ic|/var}}包含许多小文件。如果将其作为独立分区,在文件系统的选择上需要考虑这一点。}}<br />
<br />
除了其他数据以外,还包括[[ABS]] 树和 [[pacman]] 缓存。保留缓存的包提供了包[[downgrade|降级]]的能力,因此非常有用。也正因为这样,{{ic|/var}} 的大小会随着时间推移而增长。尤其是 pacman 缓存将会随着新软件的安装、系统的升级而增长。在磁盘空间不足的时候,可以安全的清理这个目录。{{ic|/var}} 分配 8-12 GB 对于桌面系统来说是比较合适的取值,具体取值取决于安装的软件数量。。<br />
<br />
==== Swap ====<br />
<br />
[[swap]] 分区提供能够被作为虚拟内存的内存空间。[[Swap#Swap file|swap file]] 也可以实现同样的功能,并且它们之间没有明显的性能区别,但是后者更易于根据需要调整大小。如果没有使用休眠特性的话,swap 分区''可以''被多个系统共享。查看 [[Suspend and hibernate]] 了解如何通过 swap 分区或文件休眠。<br />
<br />
在拥有不足 512 MB 内存的机器上,通常为 swap 分区分配2倍内存大小的空间。如果有更大的内存(大于 1024 MB),可以分配较少的空间甚至不需要swap 分区。 [[Suspend and hibernate]] 介绍了如何休眠到 swap 分区或文件.<br />
<br />
==== /data ====<br />
可以为需要多用户共享的文件建立一个“data”分区。也可以使用 {{ic|/home}} 分区用于这一目的。<br />
<br />
=== 布局示例 ===<br />
<br />
{{Note|UEFI/GPT does not really have a "bootable" flag. A bootable partition simply has partition type {{ic|EF00}}. Some GPT partitioning tools include a bootable flag, but really it just sets the partition type.}}<br />
<br />
==== UEFI/GPT 示例 ====<br />
{| class="wikitable"<br />
! Mount point<br />
! Partition<br />
! [[Wikipedia:GUID Partition Table#Partition type GUIDs|Partition type GUID]]<br />
! [[Wikipedia:GUID Partition Table#Partition entries (LBA 2-33)|Partition attributes]]<br />
! Suggested size<br />
|-<br />
| {{ic|/boot}} or {{ic|/efi}}<br />
| {{ic|/dev/sda1}}<br />
| {{ic|C12A7328-F81F-11D2-BA4B-00A0C93EC93B}}: [[EFI system partition]]<br />
|<br />
| 550 MiB<br />
|-<br />
| {{ic|/}}<br />
| {{ic|/dev/sda2}}<br />
| {{ic|4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709}}: Linux x86-64 root (/)<br />
|<br />
| 23 - 32 GiB<br />
|-<br />
| {{ic|[SWAP]}}<br />
| {{ic|/dev/sda3}}<br />
| {{ic|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F}}: Linux [[swap]]<br />
|<br />
| More than 512 MiB<br />
|-<br />
| {{ic|/home}}<br />
| {{ic|/dev/sda4}}<br />
| {{ic|933AC7E1-2EB4-4F13-B844-0E14E2AEF915}}: Linux /home<br />
|<br />
| Remainder of the device<br />
|}<br />
<br />
==== MBR/BIOS 示例 ====<br />
<br />
{| class="wikitable"<br />
! Mount point<br />
! Partition<br />
! [[Wikipedia:Partition type|Partition type ID]]<br />
! [[Wikipedia:Boot flag|Boot flag]]<br />
! Suggested size<br />
|-<br />
| {{ic|/}}<br />
| {{ic|/dev/sda1}}<br />
| {{ic|83}}: Linux<br />
| {{Yes}}<br />
| 23 - 32 GiB<br />
|-<br />
| {{ic|[SWAP]}}<br />
| {{ic|/dev/sda2}}<br />
| {{ic|82}}: Linux [[swap]]<br />
| {{No}}<br />
| More than 512 MiB<br />
|-<br />
| {{ic|/home}}<br />
| {{ic|/dev/sda3}}<br />
| {{ic|83}}: Linux<br />
| {{No}}<br />
| Remainder of the device<br />
|}<br />
<br />
==== UEFI 带单独的 /home ====<br />
<br />
{| class="wikitable"<br />
! Mount point<br />
! Partition<br />
! [[Wikipedia:GUID Partition Table#Partition type GUIDs|Partition type GUID]]<br />
! [[Wikipedia:GUID Partition Table#Partition entries (LBA 2-33)|Partition attributes]]<br />
! Suggested size<br />
|-<br />
| {{Grey|None}}<br />
| {{ic|/dev/sda1}}<br />
| {{ic|21686148-6449-6E6F-744E-656564454649}}: [[BIOS boot partition]]<br />
|<br />
| 1 MiB<br />
|-<br />
| {{ic|/}}<br />
| {{ic|/dev/sda2}}<br />
| {{ic|4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709}}: Linux x86-64 root (/)<br />
| {{ic|2}}: Legacy BIOS bootable<br />
| 23 - 32 GiB<br />
|-<br />
| {{ic|[SWAP]}}<br />
| {{ic|/dev/sda3}}<br />
| {{ic|0657FD6D-A4AB-43C4-84E5-0933C84B4F4F}}: Linux [[swap]]<br />
|<br />
| More than 512 MiB<br />
|-<br />
| {{ic|/home}}<br />
| {{ic|/dev/sda4}}<br />
| {{ic|933AC7E1-2EB4-4F13-B844-0E14E2AEF915}}: Linux /home<br />
|<br />
| Remainder of the device<br />
|}<br />
<br />
== 分区工具 ==<br />
<br />
下面表格可以帮助选择<br />
<br />
{| class="wikitable"<br />
! <br />
! MBR<br />
! GPT<br />
|-<br />
! 对话框<br />
| fdisk <br> parted<br />
| fdisk <br> gdisk <br> parted<br />
|-<br />
! 模拟图形界面<br />
| cfdisk<br />
| cfdisk <br> cgdisk<br />
|-<br />
! 非交互<br />
| sfdisk <br> parted<br />
| sfdisk <br> sgdisk <br> parted<br />
|-<br />
! 图形界面<br />
| gparted <br> gnome-disk-utility <br> partitionmanager<br />
| gparted <br> gnome-disk-utility <br> partitionmanager<br />
|}<br />
<br />
=== fdisk/gdisk ===<br />
<br />
请参考 [[fdisk]]。<br />
<br />
*{{App|[[fdisk]]|Linux 自带的命令行分区工具。|https://www.kernel.org/|{{Pkg|util-linux}}}}<br />
*{{App|[[cfdisk]]|使用 ncurses 库编写的具有伪图形界面的命令行分区工具。|https://www.kernel.org/|{{Pkg|util-linux}}}}<br />
*{{App|[[sfdisk]]|支持脚本的 fdisk.|https://www.kernel.org/pub/linux/utils/util-linux/|{{Pkg|util-linux}}}}<br />
*{{App|[[gdisk]]|[[GPT]] 版的 fdisk。|http://www.rodsbooks.com/gdisk/|{{Pkg|gptfdisk}}}}<br />
*{{App|[[cgdisk]]|GPT 版的 cfdisk。|http://www.rodsbooks.com/gdisk/|{{Pkg|gptfdisk}}}}<br />
*{{App|[[sgdisk]]|Scriptable version of gdisk.|http://www.rodsbooks.com/gdisk/sgdisk-walkthrough.html|{{Pkg|gptfdisk}}}}<br />
<br />
=== GNU Parted ===<br />
<br />
下面工具在 [[GNU Parted]] 中有介绍。<br />
<br />
*{{App|[[GNU Parted]]|命令行分区工具。|http://www.gnu.org/software/parted/parted.html|{{pkg|parted}}}}<br />
*{{App|[[GParted]]|GTK 图形界面的分区工具。|http://gparted.sourceforge.net/|{{Pkg|gparted}}}}<br />
*{{App|GNOME Disks|GTK 写的图形分区工具.|https://wiki.gnome.org/Apps/Disks|{{Pkg|gnome-disk-utility}}}}<br />
*{{App|Partitionmanager|QT 图形界面的分区工具。|http://sourceforge.net/projects/partitionman/|{{Pkg|partitionmanager}}}}<br />
<br />
== 分区对齐 ==<br />
<br />
恰当的分区对齐有助于提升性能和使用寿命。这是由硬件层面和文件系统层面的每次[[w:Block (data storage)|块]] I/O 操作特性决定的。对齐的关健是分区大小(至少)是''块大小''的倍数,''块大小''取决于选用的硬件设备。如果分区没有以''块大小''的整数倍对齐,对齐文件系统就失去意义了,因为从分区的起始偏移开始就是有偏差的。<br />
<br />
[[fdisk|fdisk/gdisk]] 和 [[parted#Alignment|parted]] 会自动处理分区对齐。[[GNU Parted#Check alignment]] 介绍了如何验证分区是否对齐。<br />
<br />
有些硬盘使用 [[Advanced Format|高级格式]] 会提供更好的读写效率。<br />
<br />
== Tips and tricks ==<br />
<br />
{{Translateme|Not translated.}}<br />
<br />
==== Converting MBR to GPT ====<br />
<br />
See [[fdisk#Convert between MBR and GPT]]{{Broken section link}}.<br />
<br />
==== GPT Kernel Support ====<br />
<br />
The {{ic|CONFIG_EFI_PARTITION}} option in the kernel config enables GPT support in the kernel (despite the name, EFI PARTITION). This option must be built in the kernel and not compiled as a loadable module. This option is required even if GPT disks are used only for data storage and not for booting. This option is enabled by default in Arch's {{Pkg|linux}} and {{Pkg|linux-lts}} kernels in the [core] repo. In case of a custom kernel, enable this option by doing {{ic|1=CONFIG_EFI_PARTITION=y}}.<br />
<br />
== 参考资料 ==<br />
<br />
* [[Wikipedia:Disk partitioning]]<br />
* [[Wikipedia:Binary prefix]]<br />
* [http://thestarman.pcministry.com/asm/mbr/DiskTerms.htm Understanding Disk Drive Terminology]<br />
* [http://kb.iu.edu/data/aijw.html What is a Master Boot Record (MBR)?]<br />
* Rod Smith's page on [http://www.rodsbooks.com/gdisk/whatsgpt.html What's a GPT?] and [http://rodsbooks.com/gdisk/booting.html Booting OSes from GPT]<br />
* [http://www.ibm.com/developerworks/linux/library/l-gpt/index.html?ca=dgr-lnxw07GPT-Storagedth-lx&S_TACT=105AGY83&S_CMP=grlnxw07 Make the most of large drives with GPT and Linux - IBM Developer Works]<br />
* [http://www.microsoft.com/whdc/device/storage/GPT_FAQ.mspx Microsoft's Windows and GPT FAQ]<br />
* [http://www.thomas-krenn.com/en/wiki/Partition_Alignment Partition Alignment] (with examples)</div>
VictriD
https://wiki.archlinux.org/index.php?title=Arch_boot_process_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626444
Arch boot process (简体中文)
2020-07-23T15:16:29Z
<p>VictriD: /* 固件种类 */ 增加关于 CSM的内容。</p>
<hr />
<div>[[Category:Boot process (简体中文)]]<br />
[[Category:About Arch (简体中文)]]<br />
[[ar:Arch boot process]]<br />
[[bs:Arch boot process]]<br />
[[cs:Arch boot process]]<br />
[[en:Arch boot process]]<br />
[[es:Arch boot process]]<br />
[[fr:Processus de boot]]<br />
[[it:Arch boot process]]<br />
[[ja:Arch ブートプロセス]]<br />
[[pt:Arch boot process]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Boot loaders (简体中文)}}<br />
{{Related|Master Boot Record (简体中文)}}<br />
{{Related|GUID Partition Table (简体中文)}}<br />
{{Related|Unified Extensible Firmware Interface (简体中文)}}<br />
{{Related|mkinitcpio (简体中文)}}<br />
{{Related|init}}<br />
{{Related|systemd (简体中文)}}<br />
{{Related|fstab (简体中文)}}<br />
{{Related|Autostarting}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Arch boot process|2017-09-01|477810}}<br />
<br />
为了启动 Arch Linux,一个与 Linux 兼容的 [[Boot loaders (简体中文)|启动引导器]],比如 [[GRUB (简体中文)|GRUB]] 或者 [[Syslinux (简体中文)|Syslinux]] 必须事先被安装到[[主引导记录]]或者 [[GUID Partition Table (简体中文)|GUID 分区表]]。启动引导程序负责在初始化启动进程之前,加载好内核和 [[mkinitcpio (简体中文)|initial ramdisk]]。具体过程因 [[Wikipedia:BIOS|BIOS]] 和 [[UEFI]] 系统而异,细节在正文中给出。<br />
<br />
== 固件种类 ==<br />
<br />
=== BIOS ===<br />
<br />
所谓 [[Wikipedia:BIOS|BIOS]],即基本输入输出系统,是开机时被执行的第一个程序(固件)。一般来说它储存在主板上的一块闪存中,与其他系统存储无关。<br />
<br />
=== UEFI ===<br />
<br />
[[UEFI (简体中文)|UEFI]],即统一可扩展固件界面,支持读取分区表和文件系统。UEFI 不会执行主引导记录中的[[Partitioning_(简体中文)#引导记录|启动加载程序]],而是从 UEFI 的[[Wikipedia:Non-volatile random-access memory|非易失性闪存]](NVRAM)中读取引导条目。<br />
<br />
UEFI 规范要求支持 FAT12,FAT16 和 FAT32 文件系统(请参考[https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf#G17.1019485 UEFI 规范 2.8 版本,第 13.3.1.1 小节]),但每个符合条件的供应商可以选择性地添加对其他文件系统的支持。比如说,苹果公司的 [[Mac (简体中文)|Mac]] 中的提供的固件支持 HFS+ 文件系统。UEFI 的实现还支持光盘的ISO-9660文件系统。<br />
<br />
UEFI 会启动 EFI 应用程序。比如说[[#启动加载器|启动加载器]],引导管理器和[[Unified_Extensible_Firmware_Interface_(简体中文)#UEFI_Shell|UEFI Shell]]。这些应用程序通常作为文件存储在 [[EFI system partition (简体中文)|EFI 系统分区]]中。供应商通常会将其特定文件存储在 EFI 系统分区中的 {{ic|/EFI/''vendor_name''}} 文件夹下。可以通过将引导条目添加到非易失性闪存,或通过 UEFI Shell 来启动这些应用程序。<br />
<br />
UEFI 规范通过 [[Wikipedia:Unified Extensible Firmware Interface#CSM booting|兼容性支持模块]](Compatibility Support Module, CSM)来支持传统 BIOS 引导。如果 UEFI 配置中启用了 UEFI, UEFI 会为每一个磁盘建立一个传统 BIOS 引导条目。如果选择了这种条目,UEFI 的兼容性支持模块会试图加载这个磁盘的主引导记录中的启动加载程序。<br />
<br />
== 系统初始化 ==<br />
<br />
=== BIOS ===<br />
<br />
# 开机时[[Wikipedia:Power-on self-test|加电自检]]。<br />
# 加电自检后,BIOS 初始化一些必要的硬件以准备引导,比如硬盘和键盘等。<br />
# BIOS 执行在「BIOS 硬盘顺序」中的第一块硬盘上的前 440 字节代码,即[[主引导记录]]。<br />
# MBR 接管后,执行它之后的第二阶段代码,如果后者存在的话,它一般就是[[Boot loaders (简体中文)|启动引导器]]。<br />
# 第二阶段代码会读取它的支持文件和配置文件。<br />
<br />
=== UEFI ===<br />
<br />
# 系统开机 - 上电自检(Power On Self Test 或 POST)。<br />
# UEFI 固件被加载,并由它初始化启动要用的硬件。<br />
# 固件读取其引导管理器以确定从何处(比如,从哪个硬盘及分区)加载哪个 UEFI 应用。<br />
# 固件按照引导管理器中的启动项目,加载UEFI 应用。<br />
# 已启动的 UEFI 应用还可以启动其他应用(对应于 UEFI shell 或 rEFInd 之类的引导管理器的情况)或者启动内核及initramfs(对应于GRUB之类引导器的情况),这取决于 UEFI 应用的配置。<br />
{{Note|在有些 UEFI 系统中,唯一可行的启动时(如果应用没有在 UEFI 启动菜单定制条目的话)加载 UEFI 应用的方法是把它放在此固定位置:{{ic|<EFI SYSTEM PARTITION>/EFI/boot/bootx64.efi}} (对于 64 位的 x86 系统)}}<br />
<br />
=== UEFI 的多重引导 ===<br />
<br />
因为每个操作系统或者提供者都可以维护自己的 EFI 系统分区中的文件,同时不影响其他系统,所以 UEFI 的多重启动只是简单的运行不同的UEFI 程序,对应于特定操作系统的引导程序。这避免了依赖 chainloading 机制(通过一个[[Boot loader|启动引导程序]]加载另一个引导程序,来切换操作系统)。<br />
<br />
参阅 [[Dual boot with Windows]].<br />
<br />
== 启动加载器 ==<br />
<br />
启动加载器是由计算机固件([[Wikipedia:BIOS|BIOS]] 或 [[UEFI]])启动的程序。它负责根据配置文件加载所需的[[kernel parameters|内核参数]]和[[Mkinitcpio_(简体中文)|初始内存]]。对于 UEFI,内核本身可以由 UEFI 使用 EFI boot stub 直接启动,也可以使用单独的引导加载程序或引导管理器来在引导之前编辑内核参数。<br />
<br />
{{警告|启动加载器必须能够访问内核和 initramfs 映像,否则系统将无法引导。因此,在典型设置中,它必须支持访问 {{ic |/boot}}。也就是说,启动加载器需要兼容内核和 initramfs 所处的位置的文件系统。}}<br />
<br />
{{注意|加载[[Microcode_(简体中文)|处理器微码]]补丁要求调整启动加载器的配置。详情请参考[https://www.archlinux.org/news/changes-to-intel-microcodeupdates/]。}}<br />
<br />
=== 功能比较 ===<br />
<br />
{{注意|<br />
* 因为 GPT 是 UEFI 规范的一部分,所以所有的 UEFI 启动加载器都支持 GPT 磁盘。在 BIOS上 使用 GPT 磁盘也是可行的,要么根据[https://www.rodsbooks.com/gdisk/hybrid.html Hybrid MBR]使用混合启动,要么使用新的 [http://repo.or.cz/syslinux.git/blob/HEAD:/doc/gpt.txt GPT-only] 协议。但是这个协议可能在某些 BIOS 实现上会出问题,详情请参考 [http://www.rodsbooks.com/gdisk/bios.html#bios rodsbooks]。<br />
* 在文件系统支持中提到的“加密”是[[wikipedia:Filesystem-level encryption|文件系统级别加密]],和[[dm-crypt|块级别加密]]没有任何关系。 <br />
}}<br />
<br />
{| class="wikitable sortable"<br />
! rowspan="2"| 名称<br />
! colspan="2"| 固件类型<br />
! colspan="2"| [[Partitioning_(简体中文)#分区表|分区表]]<br />
! rowspan="2"| 多重启动<br />
! colspan="5"| [[File_systems_(简体中文)|文件系统]]<br />
! rowspan="2"| 备注<br />
|-<br />
! BIOS !! [[UEFI (简体中文)|UEFI]]<br />
! [[Partitioning_(简体中文)#Master_Boot_Record|MBR]] !! [[Partitioning_(简体中文)#GUID_分区表|GPT]]<br />
! [[Btrfs (简体中文)|Btrfs]] !! [[ext4 (简体中文)|ext4]] !! ReiserFS !! [[VFAT|VFAT]] !! [[XFS (简体中文)|XFS]]<br />
|-<br />
! [[EFISTUB|EFISTUB]]<br />
| {{-}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{-}}<br />
| {{-}} || {{-}} || {{-}} || {{G|从固件继承<sup>1</sup>}} || {{-}}<br />
| 内核会变为一个 EFI 可执行文件来被 [[UEFI (简体中文)|UEFI]] 固件或者其他启动加载器加载。<br />
|-<br />
! [[Clover (简体中文)|Clover]]<br />
| {{G|模拟 UEFI}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{是}}<sup>2</sup><br />
| {{否}} || {{Y|不支持加密}} || {{否}} || {{G|从固件继承<sup>1</sup>}} || {{否}}<br />
| 修改版的 rEFIt,用来运行[[wikipedia:Hackintosh|黑苹果]]。<br />
|-<br />
! [[GRUB (简体中文)|GRUB]]<br />
| {{是}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{是}}<br />
| {{是}} || {{是}} || {{是}} || {{是}} || {{是}}<br />
| 在 BIOS/GPT 配置下需要一个 [[GRUB_(简体中文)#GUID分区表_(GPT)_特殊操作|BIOS启动分区]]。<br/>支持RAID, LUKS1 和 LVM (但是不支持精简配置卷)。<br />
|-<br />
! [[rEFInd]]<br />
| {{否}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{是}}<sup>2</sup><br />
| {{Y|不支持加密和 zstd 压缩}} || {{Y|不支持加密}} || {{Y|不支持 tail-packing 功能}} || {{G|从固件继承<sup>1</sup>}} || {{否}}<br />
| 支持自动寻找内核和确定内核参数而不需要手动配置。<br />
|-<br />
! [[Syslinux]]<br />
| {{是}} || {{Y|[[Syslinux#Limitations of UEFI Syslinux (简体中文)|有限支持]]}}<br />
| {{是}} || {{是}}<br />
| {{Y|[[Syslinux#Chainloading (简体中文)|有限支持]]}}<br />
| {{Y|不支持: 跨设备卷、压缩、加密}} || {{Y|不支持加密}} || {{否}} || {{是}} || {{Y|仅限MBR;不支持稀疏索引节点}}<br />
| 不支持某些 [[File systems (简体中文)|文件系统]] 功能 [https://wiki.syslinux.org/wiki/index.php?title=Filesystem] <br/>启动加载器只能够访问它所处的文件系统。[https://bugzilla.syslinux.org/show_bug.cgi?id=33]<br />
|-<br />
! [[systemd-boot]]<br />
| {{否}} || {{是}}<br />
| {{Y|[https://github.com/systemd/systemd/issues/1125 仅限手动安装]}} || {{是}}<br />
| {{是}}<sup>2</sup><br />
| {{否}} || {{否}} || {{否}} || {{G|从固件继承<sup>1</sup>}} || {{否}}<br />
| 无法启动[[EFI_system_partition_(简体中文)|ESP]]以外的分区上的二进制文件。<br />
|-<br />
! {{Grey|[[GRUB Legacy (简体中文)|GRUB Legacy]]}}<br />
| {{是}} || {{否}}<br />
| {{是}} || {{否}}<br />
| {{是}}<br />
| {{否}} || {{否}} || {{是}} || {{是}} || {{Y|仅 v4}}<br />
| [https://www.gnu.org/software/grub/grub-legacy.html 停止开发],新版本为 GRUB。<br />
|-<br />
! {{Grey|[[LILO]]}}<br />
| {{是}} || {{否}}<br />
| {{是}} || {{否}}<br />
| {{是}}<br />
| {{否}} || {{Y|不支持加密}} || {{是}} || {{是}} || {{是|http://xfs.org/index.php/XFS_FAQ#Q:_Does_LILO_work_with_XFS.3F}}<br />
| 因为某些局限性 (如 Btrfs, GPT, RAID),已经[http://web.archive.org/web/20180323163248/http://lilo.alioth.debian.org/ 停止开发]。<br />
|}<br />
# 文件系统的支持是从固件继承的。UEFI 规范要求支持 FAT12,FAT16 和 FAT32 文件系统[https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf#G17.1345080],但供应商可以选择性地添加对其他文件系统的支持。比如说,苹果公司的 [[Mac (简体中文)|Mac]] 中的提供的固件支持 HFS+ 文件系统。而如果固件提供在启动时加载 [[Unified_Extensible_Firmware_Interface#UEFI_drivers|UEFI 驱动程序]]的接口,则可以通过加载单独的文件系统驱动程序来添加对其他文件系统的支持。<br />
# 一种只能启动其他 EFI 应用程序的 [https://www.rodsbooks.com/efi-bootloaders/principles.html 启动管理器]。例如,使用 {{ic|1=CONFIG_EFI_STUB=y}} 参数编译的 Linux 内核镜像和 Windows 中的 {{ic|bootmgfw.efi}}。<br />
<br />
更多信息,参见 [[Wikipedia:Comparison of boot loaders]]。<br />
<br />
== 内核 ==<br />
<br />
内核是操作系统的核心。它运行于一个叫「内核空间」的底层上,负责机器硬件和应用程序之间的交流。为了尽可能充分地压榨 CPU 性能,内核使用调度器,通过一定的优先级算法将 CPU 按照时间动态的分配给各个程序。让我们感觉就像所有程序都在同时使用 CPU 一样。<br />
<br />
== initramfs ==<br />
<br />
在 [[#Boot loader|boot loader]]{{Broken section link}} 加载 kernel 和可用的 initramfs 文件,并执行 kernel 之后,kernel 将 initramfs(初始RAM文件系统)压缩包解压缩到(然后清空)rootfs(初始根文件系统,特别是ramfs或tmpfs)。首先提取的 initramfs 是在 kernel 构建过程中嵌入 kernel 二进制Update translation.的 initramfs,然后提取可用的外部 initramfs 文件。因此,外部 initramfs 中的文件会覆盖嵌入式 initramfs 中具有相同名称的文件。然后, kernel 执行 {{ic|/init}} (在rootfs中)作为第一个进程。''early userspace''开始。<br />
<br />
Arch Linux 对内置的 initramfs 使用一个空的存档(在构建Linux时是默认的)。有关外部 initramfs 的更多信息和 Arch 特定的信息,请参见 [[mkinitcpio]]。<br />
<br />
initramfs 之所以存在,是为了帮系统访问真正的根文件系统(参见 [[Arch filesystem hierarchy (简体中文)]])。也就是说,那些硬件 IDE, SCSI, SATA, USB/FW 所要求的 kernel 模块,如果并没有内置在 kernel 里,就会被 initramfs 负责加载。一旦通过 [[udev (简体中文)]] 之类的程序或脚本加载好模块,启动流程才会继续下去。所以,initramfs 只要有能够让系统访问真实根文件系统的模块就可以了,不用尽可能地包含一切模块。当然,其它真正有用的模块之后会在 init 流程中被 udev 加载好。<br />
<br />
== Init 流程 ==<br />
<br />
在「早期用户空间」的最终环节里,'''真正'''的根文件系统被挂载好后,就会替换掉原来的'''伪'''根文件系统。接着 {{ic|/sbin/init}} 被执行,同样也替换掉原来的 {{ic|/init}} 进程。Arch 御用的 [[init]] 就是 [[systemd (简体中文)]].<br />
<br />
== Getty ==<br />
<br />
[[init]] 为每一个 [[Wikipedia:Virtual console|虚拟终端]] 调用 [[getty]],前者一般有六个,每个虚拟终端都会初始化 tty 并请求输入用户名和密码。当在某虚拟终端输入用户名和密码后,其 getty 会通过 {{ic|/etc/passwd}} 检查是否正确,如果正确,就接着调用 [[#Login|login]], 此外 getty 也可能会改启动一个显示管理器。<br />
<br />
== 显示管理器 ==<br />
<br />
[[display manager (简体中文)|显示管理器]], 可以配置为代替原来的 getty 登录命令行提示符。<br />
<br />
为了在引导后自动初始化显示管理器,必须通过[[systemd]]手动启用服务单元。 有关启用和启动服务单元的更多信息,请参见[[systemd#使用单元]]。<br />
<br />
== Login ==<br />
<br />
所谓的 ''login'' 程序会为用户启动一个设置了环境变量的「会话」,接着根据 {{ic|/etc/passwd}} 的配置启动用户专用 shell。<br />
<br />
在成功登录后,刚刚启动登录 shell 之前,''login'' 程序显示 [[Wikipedia:motd (Unix)|/etc/motd]] (''m''essage ''o''f ''t''he ''d''ay) 。在这里,您可以显示服务条款,以提醒用户您的本地政策或您想告诉他们的任何内容。<br />
<br />
== Shell ==<br />
<br />
一旦用户专用的 [[shell]] 启动了,它会在显示命令行提示符前,执行一个「有可执行性的配置文件」,比如 [[.bashrc]]. 如果用户有设定了 [[Start X at login]], 原来那个「有可执行性的配置文件」会调用 [[startx]] or [[xinit]].<br />
<br />
== GUI、 xinit 或者 wayland ==<br />
<br />
[[xinit]] 也会调用用户的 [[.xinitrc]] 这个「有可执行性的配置文件」,后者一般用来启动一个 [[window manager (简体中文)|窗口管理器]]。如果用户退出了窗口管理器、xinit、 startx 和 shell login 就会先后中断,返回到 [[#Getty|getty]].<br />
<br />
== 参见 ==<br />
* [http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ Early Userspace in Arch Linux]<br />
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Inside the Linux boot process]<br />
* [http://www.linuxjournal.com/article/4622 Boot with GRUB]<br />
* [[Wikipedia:Linux startup process]]<br />
* [[Wikipedia:initrd]]<br />
* [http://www.cyberciti.biz/faq/grub-boot-into-single-user-mode/ Boot Linux Grub Into Single User Mode]<br />
* [https://neosmart.net/wiki/mbr-boot-process/ NeoSmart: The BIOS/MBR Boot Process]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Arch_boot_process_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626440
Arch boot process (简体中文)
2020-07-23T14:58:13Z
<p>VictriD: /* 启动加载器 */ Sync with English version translation.</p>
<hr />
<div>[[Category:Boot process (简体中文)]]<br />
[[Category:About Arch (简体中文)]]<br />
[[ar:Arch boot process]]<br />
[[bs:Arch boot process]]<br />
[[cs:Arch boot process]]<br />
[[en:Arch boot process]]<br />
[[es:Arch boot process]]<br />
[[fr:Processus de boot]]<br />
[[it:Arch boot process]]<br />
[[ja:Arch ブートプロセス]]<br />
[[pt:Arch boot process]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Boot loaders (简体中文)}}<br />
{{Related|Master Boot Record (简体中文)}}<br />
{{Related|GUID Partition Table (简体中文)}}<br />
{{Related|Unified Extensible Firmware Interface (简体中文)}}<br />
{{Related|mkinitcpio (简体中文)}}<br />
{{Related|init}}<br />
{{Related|systemd (简体中文)}}<br />
{{Related|fstab (简体中文)}}<br />
{{Related|Autostarting}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Arch boot process|2017-09-01|477810}}<br />
<br />
为了启动 Arch Linux,一个与 Linux 兼容的 [[Boot loaders (简体中文)|启动引导器]],比如 [[GRUB (简体中文)|GRUB]] 或者 [[Syslinux (简体中文)|Syslinux]] 必须事先被安装到[[主引导记录]]或者 [[GUID Partition Table (简体中文)|GUID 分区表]]。启动引导程序负责在初始化启动进程之前,加载好内核和 [[mkinitcpio (简体中文)|initial ramdisk]]。具体过程因 [[Wikipedia:BIOS|BIOS]] 和 [[UEFI]] 系统而异,细节在正文中给出。<br />
<br />
== 固件种类 ==<br />
<br />
=== BIOS ===<br />
<br />
{{Expansion|需要增加关于 [[Wikipedia:Unified Extensible Firmware Interface#CSM booting|CSM]]的内容。}}<br />
<br />
所谓 BIOS 或 Basic Input-Output System, 就是开机时第一个被执行的程序,又名固件。一般来说它储存在主板上的一块闪存中,与硬盘彼此独立。<br />
<br />
BIOS 被启动后,会按启动顺序加载磁盘的前 512 字节,即[[主引导记录]],前 440 字节包含某个启动引导器,像 [[GRUB (简体中文)|GRUB]] 、[[Syslinux (简体中文)|Syslinux]] 和 [[LILO]] 之类的第一启动阶段代码。因为空间太小了,后续的启动代码保存在磁盘上,最后启动引导器又通过「链式引导」,或是直接加载内核,以加载一个操作系统。<br />
<br />
=== UEFI ===<br />
<br />
UEFI 不仅能读取分区表,还能自动支持文件系统。所以它不像 BIOS,已经没有仅仅 440 字节可执行代码即 MBR 的限制了,它完全用不到 MBR。<br />
<br />
UEFI 主流都支持 MBR 和 GPT 分区表。Apple-Intel Macs 上的 EFI 还支持 Apple 专用分区表。绝大部分 UEFI 固件支持软盘上的 FAT12,硬盘上的 FAT16、FAT32 文件系统,以及 CD/DVDs 的 IS09660 和 UDF。Intel Macs 的 EFI 还额外支持 HFS/HFS+ 文件系统。<br />
<br />
不管第一块上有没有 MBR,UEFI 都不会执行它。相反,它依赖分区表上的一个特殊分区,叫 EFI 系统分区,里面有 UEFI 所要用到的一些文件。计算机供应商可以在 {{ic|<EFI 系统分区>/EFI/<VENDOR NAME>/}} 文件夹里放官方指定的文件,还能用固件或它的 shell,即 UEFI shell,来启动引导程序。EFI 系统分区一般被格式化成 FAT32,或比较非主流的 FAT16。<br />
<br />
== 系统初始化 ==<br />
<br />
=== BIOS ===<br />
<br />
# 开机时[[Wikipedia:Power-on self-test|加电自检]]。<br />
# 加电自检后,BIOS 初始化一些必要的硬件以准备引导,比如硬盘和键盘等。<br />
# BIOS 执行在「BIOS 硬盘顺序」中的第一块硬盘上的前 440 字节代码,即[[主引导记录]]。<br />
# MBR 接管后,执行它之后的第二阶段代码,如果后者存在的话,它一般就是[[Boot loaders (简体中文)|启动引导器]]。<br />
# 第二阶段代码会读取它的支持文件和配置文件。<br />
<br />
=== UEFI ===<br />
<br />
# 系统开机 - 上电自检(Power On Self Test 或 POST)。<br />
# UEFI 固件被加载,并由它初始化启动要用的硬件。<br />
# 固件读取其引导管理器以确定从何处(比如,从哪个硬盘及分区)加载哪个 UEFI 应用。<br />
# 固件按照引导管理器中的启动项目,加载UEFI 应用。<br />
# 已启动的 UEFI 应用还可以启动其他应用(对应于 UEFI shell 或 rEFInd 之类的引导管理器的情况)或者启动内核及initramfs(对应于GRUB之类引导器的情况),这取决于 UEFI 应用的配置。<br />
{{Note|在有些 UEFI 系统中,唯一可行的启动时(如果应用没有在 UEFI 启动菜单定制条目的话)加载 UEFI 应用的方法是把它放在此固定位置:{{ic|<EFI SYSTEM PARTITION>/EFI/boot/bootx64.efi}} (对于 64 位的 x86 系统)}}<br />
<br />
=== UEFI 的多重引导 ===<br />
<br />
因为每个操作系统或者提供者都可以维护自己的 EFI 系统分区中的文件,同时不影响其他系统,所以 UEFI 的多重启动只是简单的运行不同的UEFI 程序,对应于特定操作系统的引导程序。这避免了依赖 chainloading 机制(通过一个[[Boot loader|启动引导程序]]加载另一个引导程序,来切换操作系统)。<br />
<br />
参阅 [[Dual boot with Windows]].<br />
<br />
== 启动加载器 ==<br />
<br />
启动加载器是由计算机固件([[Wikipedia:BIOS|BIOS]] 或 [[UEFI]])启动的程序。它负责根据配置文件加载所需的[[kernel parameters|内核参数]]和[[Mkinitcpio_(简体中文)|初始内存]]。对于 UEFI,内核本身可以由 UEFI 使用 EFI boot stub 直接启动,也可以使用单独的引导加载程序或引导管理器来在引导之前编辑内核参数。<br />
<br />
{{警告|启动加载器必须能够访问内核和 initramfs 映像,否则系统将无法引导。因此,在典型设置中,它必须支持访问 {{ic |/boot}}。也就是说,启动加载器需要兼容内核和 initramfs 所处的位置的文件系统。}}<br />
<br />
{{注意|加载[[Microcode_(简体中文)|处理器微码]]补丁要求调整启动加载器的配置。详情请参考[https://www.archlinux.org/news/changes-to-intel-microcodeupdates/]。}}<br />
<br />
=== 功能比较 ===<br />
<br />
{{注意|<br />
* 因为 GPT 是 UEFI 规范的一部分,所以所有的 UEFI 启动加载器都支持 GPT 磁盘。在 BIOS上 使用 GPT 磁盘也是可行的,要么根据[https://www.rodsbooks.com/gdisk/hybrid.html Hybrid MBR]使用混合启动,要么使用新的 [http://repo.or.cz/syslinux.git/blob/HEAD:/doc/gpt.txt GPT-only] 协议。但是这个协议可能在某些 BIOS 实现上会出问题,详情请参考 [http://www.rodsbooks.com/gdisk/bios.html#bios rodsbooks]。<br />
* 在文件系统支持中提到的“加密”是[[wikipedia:Filesystem-level encryption|文件系统级别加密]],和[[dm-crypt|块级别加密]]没有任何关系。 <br />
}}<br />
<br />
{| class="wikitable sortable"<br />
! rowspan="2"| 名称<br />
! colspan="2"| 固件类型<br />
! colspan="2"| [[Partitioning_(简体中文)#分区表|分区表]]<br />
! rowspan="2"| 多重启动<br />
! colspan="5"| [[File_systems_(简体中文)|文件系统]]<br />
! rowspan="2"| 备注<br />
|-<br />
! BIOS !! [[UEFI (简体中文)|UEFI]]<br />
! [[Partitioning_(简体中文)#Master_Boot_Record|MBR]] !! [[Partitioning_(简体中文)#GUID_分区表|GPT]]<br />
! [[Btrfs (简体中文)|Btrfs]] !! [[ext4 (简体中文)|ext4]] !! ReiserFS !! [[VFAT|VFAT]] !! [[XFS (简体中文)|XFS]]<br />
|-<br />
! [[EFISTUB|EFISTUB]]<br />
| {{-}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{-}}<br />
| {{-}} || {{-}} || {{-}} || {{G|从固件继承<sup>1</sup>}} || {{-}}<br />
| 内核会变为一个 EFI 可执行文件来被 [[UEFI (简体中文)|UEFI]] 固件或者其他启动加载器加载。<br />
|-<br />
! [[Clover (简体中文)|Clover]]<br />
| {{G|模拟 UEFI}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{是}}<sup>2</sup><br />
| {{否}} || {{Y|不支持加密}} || {{否}} || {{G|从固件继承<sup>1</sup>}} || {{否}}<br />
| 修改版的 rEFIt,用来运行[[wikipedia:Hackintosh|黑苹果]]。<br />
|-<br />
! [[GRUB (简体中文)|GRUB]]<br />
| {{是}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{是}}<br />
| {{是}} || {{是}} || {{是}} || {{是}} || {{是}}<br />
| 在 BIOS/GPT 配置下需要一个 [[GRUB_(简体中文)#GUID分区表_(GPT)_特殊操作|BIOS启动分区]]。<br/>支持RAID, LUKS1 和 LVM (但是不支持精简配置卷)。<br />
|-<br />
! [[rEFInd]]<br />
| {{否}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{是}}<sup>2</sup><br />
| {{Y|不支持加密和 zstd 压缩}} || {{Y|不支持加密}} || {{Y|不支持 tail-packing 功能}} || {{G|从固件继承<sup>1</sup>}} || {{否}}<br />
| 支持自动寻找内核和确定内核参数而不需要手动配置。<br />
|-<br />
! [[Syslinux]]<br />
| {{是}} || {{Y|[[Syslinux#Limitations of UEFI Syslinux (简体中文)|有限支持]]}}<br />
| {{是}} || {{是}}<br />
| {{Y|[[Syslinux#Chainloading (简体中文)|有限支持]]}}<br />
| {{Y|不支持: 跨设备卷、压缩、加密}} || {{Y|不支持加密}} || {{否}} || {{是}} || {{Y|仅限MBR;不支持稀疏索引节点}}<br />
| 不支持某些 [[File systems (简体中文)|文件系统]] 功能 [https://wiki.syslinux.org/wiki/index.php?title=Filesystem] <br/>启动加载器只能够访问它所处的文件系统。[https://bugzilla.syslinux.org/show_bug.cgi?id=33]<br />
|-<br />
! [[systemd-boot]]<br />
| {{否}} || {{是}}<br />
| {{Y|[https://github.com/systemd/systemd/issues/1125 仅限手动安装]}} || {{是}}<br />
| {{是}}<sup>2</sup><br />
| {{否}} || {{否}} || {{否}} || {{G|从固件继承<sup>1</sup>}} || {{否}}<br />
| 无法启动[[EFI_system_partition_(简体中文)|ESP]]以外的分区上的二进制文件。<br />
|-<br />
! {{Grey|[[GRUB Legacy (简体中文)|GRUB Legacy]]}}<br />
| {{是}} || {{否}}<br />
| {{是}} || {{否}}<br />
| {{是}}<br />
| {{否}} || {{否}} || {{是}} || {{是}} || {{Y|仅 v4}}<br />
| [https://www.gnu.org/software/grub/grub-legacy.html 停止开发],新版本为 GRUB。<br />
|-<br />
! {{Grey|[[LILO]]}}<br />
| {{是}} || {{否}}<br />
| {{是}} || {{否}}<br />
| {{是}}<br />
| {{否}} || {{Y|不支持加密}} || {{是}} || {{是}} || {{是|http://xfs.org/index.php/XFS_FAQ#Q:_Does_LILO_work_with_XFS.3F}}<br />
| 因为某些局限性 (如 Btrfs, GPT, RAID),已经[http://web.archive.org/web/20180323163248/http://lilo.alioth.debian.org/ 停止开发]。<br />
|}<br />
# 文件系统的支持是从固件继承的。UEFI 规范要求支持 FAT12,FAT16 和 FAT32 文件系统[https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf#G17.1345080],但供应商可以选择性地添加对其他文件系统的支持。比如说,苹果公司的 [[Mac (简体中文)|Mac]] 中的提供的固件支持 HFS+ 文件系统。而如果固件提供在启动时加载 [[Unified_Extensible_Firmware_Interface#UEFI_drivers|UEFI 驱动程序]]的接口,则可以通过加载单独的文件系统驱动程序来添加对其他文件系统的支持。<br />
# 一种只能启动其他 EFI 应用程序的 [https://www.rodsbooks.com/efi-bootloaders/principles.html 启动管理器]。例如,使用 {{ic|1=CONFIG_EFI_STUB=y}} 参数编译的 Linux 内核镜像和 Windows 中的 {{ic|bootmgfw.efi}}。<br />
<br />
更多信息,参见 [[Wikipedia:Comparison of boot loaders]]。<br />
<br />
== 内核 ==<br />
<br />
内核是操作系统的核心。它运行于一个叫「内核空间」的底层上,负责机器硬件和应用程序之间的交流。为了尽可能充分地压榨 CPU 性能,内核使用调度器,通过一定的优先级算法将 CPU 按照时间动态的分配给各个程序。让我们感觉就像所有程序都在同时使用 CPU 一样。<br />
<br />
== initramfs ==<br />
<br />
在 [[#Boot loader|boot loader]]{{Broken section link}} 加载 kernel 和可用的 initramfs 文件,并执行 kernel 之后,kernel 将 initramfs(初始RAM文件系统)压缩包解压缩到(然后清空)rootfs(初始根文件系统,特别是ramfs或tmpfs)。首先提取的 initramfs 是在 kernel 构建过程中嵌入 kernel 二进制Update translation.的 initramfs,然后提取可用的外部 initramfs 文件。因此,外部 initramfs 中的文件会覆盖嵌入式 initramfs 中具有相同名称的文件。然后, kernel 执行 {{ic|/init}} (在rootfs中)作为第一个进程。''early userspace''开始。<br />
<br />
Arch Linux 对内置的 initramfs 使用一个空的存档(在构建Linux时是默认的)。有关外部 initramfs 的更多信息和 Arch 特定的信息,请参见 [[mkinitcpio]]。<br />
<br />
initramfs 之所以存在,是为了帮系统访问真正的根文件系统(参见 [[Arch filesystem hierarchy (简体中文)]])。也就是说,那些硬件 IDE, SCSI, SATA, USB/FW 所要求的 kernel 模块,如果并没有内置在 kernel 里,就会被 initramfs 负责加载。一旦通过 [[udev (简体中文)]] 之类的程序或脚本加载好模块,启动流程才会继续下去。所以,initramfs 只要有能够让系统访问真实根文件系统的模块就可以了,不用尽可能地包含一切模块。当然,其它真正有用的模块之后会在 init 流程中被 udev 加载好。<br />
<br />
== Init 流程 ==<br />
<br />
在「早期用户空间」的最终环节里,'''真正'''的根文件系统被挂载好后,就会替换掉原来的'''伪'''根文件系统。接着 {{ic|/sbin/init}} 被执行,同样也替换掉原来的 {{ic|/init}} 进程。Arch 御用的 [[init]] 就是 [[systemd (简体中文)]].<br />
<br />
== Getty ==<br />
<br />
[[init]] 为每一个 [[Wikipedia:Virtual console|虚拟终端]] 调用 [[getty]],前者一般有六个,每个虚拟终端都会初始化 tty 并请求输入用户名和密码。当在某虚拟终端输入用户名和密码后,其 getty 会通过 {{ic|/etc/passwd}} 检查是否正确,如果正确,就接着调用 [[#Login|login]], 此外 getty 也可能会改启动一个显示管理器。<br />
<br />
== 显示管理器 ==<br />
<br />
[[display manager (简体中文)|显示管理器]], 可以配置为代替原来的 getty 登录命令行提示符。<br />
<br />
为了在引导后自动初始化显示管理器,必须通过[[systemd]]手动启用服务单元。 有关启用和启动服务单元的更多信息,请参见[[systemd#使用单元]]。<br />
<br />
== Login ==<br />
<br />
所谓的 ''login'' 程序会为用户启动一个设置了环境变量的「会话」,接着根据 {{ic|/etc/passwd}} 的配置启动用户专用 shell。<br />
<br />
在成功登录后,刚刚启动登录 shell 之前,''login'' 程序显示 [[Wikipedia:motd (Unix)|/etc/motd]] (''m''essage ''o''f ''t''he ''d''ay) 。在这里,您可以显示服务条款,以提醒用户您的本地政策或您想告诉他们的任何内容。<br />
<br />
== Shell ==<br />
<br />
一旦用户专用的 [[shell]] 启动了,它会在显示命令行提示符前,执行一个「有可执行性的配置文件」,比如 [[.bashrc]]. 如果用户有设定了 [[Start X at login]], 原来那个「有可执行性的配置文件」会调用 [[startx]] or [[xinit]].<br />
<br />
== GUI、 xinit 或者 wayland ==<br />
<br />
[[xinit]] 也会调用用户的 [[.xinitrc]] 这个「有可执行性的配置文件」,后者一般用来启动一个 [[window manager (简体中文)|窗口管理器]]。如果用户退出了窗口管理器、xinit、 startx 和 shell login 就会先后中断,返回到 [[#Getty|getty]].<br />
<br />
== 参见 ==<br />
* [http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ Early Userspace in Arch Linux]<br />
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Inside the Linux boot process]<br />
* [http://www.linuxjournal.com/article/4622 Boot with GRUB]<br />
* [[Wikipedia:Linux startup process]]<br />
* [[Wikipedia:initrd]]<br />
* [http://www.cyberciti.biz/faq/grub-boot-into-single-user-mode/ Boot Linux Grub Into Single User Mode]<br />
* [https://neosmart.net/wiki/mbr-boot-process/ NeoSmart: The BIOS/MBR Boot Process]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Arch_boot_process_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626434
Arch boot process (简体中文)
2020-07-23T14:40:11Z
<p>VictriD: /* 功能比较 */ Optimize chart translation.</p>
<hr />
<div>[[Category:Boot process (简体中文)]]<br />
[[Category:About Arch (简体中文)]]<br />
[[ar:Arch boot process]]<br />
[[bs:Arch boot process]]<br />
[[cs:Arch boot process]]<br />
[[en:Arch boot process]]<br />
[[es:Arch boot process]]<br />
[[fr:Processus de boot]]<br />
[[it:Arch boot process]]<br />
[[ja:Arch ブートプロセス]]<br />
[[pt:Arch boot process]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Boot loaders (简体中文)}}<br />
{{Related|Master Boot Record (简体中文)}}<br />
{{Related|GUID Partition Table (简体中文)}}<br />
{{Related|Unified Extensible Firmware Interface (简体中文)}}<br />
{{Related|mkinitcpio (简体中文)}}<br />
{{Related|init}}<br />
{{Related|systemd (简体中文)}}<br />
{{Related|fstab (简体中文)}}<br />
{{Related|Autostarting}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Arch boot process|2017-09-01|477810}}<br />
<br />
为了启动 Arch Linux,一个与 Linux 兼容的 [[Boot loaders (简体中文)|启动引导器]],比如 [[GRUB (简体中文)|GRUB]] 或者 [[Syslinux (简体中文)|Syslinux]] 必须事先被安装到[[主引导记录]]或者 [[GUID Partition Table (简体中文)|GUID 分区表]]。启动引导程序负责在初始化启动进程之前,加载好内核和 [[mkinitcpio (简体中文)|initial ramdisk]]。具体过程因 [[Wikipedia:BIOS|BIOS]] 和 [[UEFI]] 系统而异,细节在正文中给出。<br />
<br />
== 固件种类 ==<br />
<br />
=== BIOS ===<br />
<br />
{{Expansion|需要增加关于 [[Wikipedia:Unified Extensible Firmware Interface#CSM booting|CSM]]的内容。}}<br />
<br />
所谓 BIOS 或 Basic Input-Output System, 就是开机时第一个被执行的程序,又名固件。一般来说它储存在主板上的一块闪存中,与硬盘彼此独立。<br />
<br />
BIOS 被启动后,会按启动顺序加载磁盘的前 512 字节,即[[主引导记录]],前 440 字节包含某个启动引导器,像 [[GRUB (简体中文)|GRUB]] 、[[Syslinux (简体中文)|Syslinux]] 和 [[LILO]] 之类的第一启动阶段代码。因为空间太小了,后续的启动代码保存在磁盘上,最后启动引导器又通过「链式引导」,或是直接加载内核,以加载一个操作系统。<br />
<br />
=== UEFI ===<br />
<br />
UEFI 不仅能读取分区表,还能自动支持文件系统。所以它不像 BIOS,已经没有仅仅 440 字节可执行代码即 MBR 的限制了,它完全用不到 MBR。<br />
<br />
UEFI 主流都支持 MBR 和 GPT 分区表。Apple-Intel Macs 上的 EFI 还支持 Apple 专用分区表。绝大部分 UEFI 固件支持软盘上的 FAT12,硬盘上的 FAT16、FAT32 文件系统,以及 CD/DVDs 的 IS09660 和 UDF。Intel Macs 的 EFI 还额外支持 HFS/HFS+ 文件系统。<br />
<br />
不管第一块上有没有 MBR,UEFI 都不会执行它。相反,它依赖分区表上的一个特殊分区,叫 EFI 系统分区,里面有 UEFI 所要用到的一些文件。计算机供应商可以在 {{ic|<EFI 系统分区>/EFI/<VENDOR NAME>/}} 文件夹里放官方指定的文件,还能用固件或它的 shell,即 UEFI shell,来启动引导程序。EFI 系统分区一般被格式化成 FAT32,或比较非主流的 FAT16。<br />
<br />
== 系统初始化 ==<br />
<br />
=== BIOS ===<br />
<br />
# 开机时[[Wikipedia:Power-on self-test|加电自检]]。<br />
# 加电自检后,BIOS 初始化一些必要的硬件以准备引导,比如硬盘和键盘等。<br />
# BIOS 执行在「BIOS 硬盘顺序」中的第一块硬盘上的前 440 字节代码,即[[主引导记录]]。<br />
# MBR 接管后,执行它之后的第二阶段代码,如果后者存在的话,它一般就是[[Boot loaders (简体中文)|启动引导器]]。<br />
# 第二阶段代码会读取它的支持文件和配置文件。<br />
<br />
=== UEFI ===<br />
<br />
# 系统开机 - 上电自检(Power On Self Test 或 POST)。<br />
# UEFI 固件被加载,并由它初始化启动要用的硬件。<br />
# 固件读取其引导管理器以确定从何处(比如,从哪个硬盘及分区)加载哪个 UEFI 应用。<br />
# 固件按照引导管理器中的启动项目,加载UEFI 应用。<br />
# 已启动的 UEFI 应用还可以启动其他应用(对应于 UEFI shell 或 rEFInd 之类的引导管理器的情况)或者启动内核及initramfs(对应于GRUB之类引导器的情况),这取决于 UEFI 应用的配置。<br />
{{Note|在有些 UEFI 系统中,唯一可行的启动时(如果应用没有在 UEFI 启动菜单定制条目的话)加载 UEFI 应用的方法是把它放在此固定位置:{{ic|<EFI SYSTEM PARTITION>/EFI/boot/bootx64.efi}} (对于 64 位的 x86 系统)}}<br />
<br />
=== UEFI 的多重引导 ===<br />
<br />
因为每个操作系统或者提供者都可以维护自己的 EFI 系统分区中的文件,同时不影响其他系统,所以 UEFI 的多重启动只是简单的运行不同的UEFI 程序,对应于特定操作系统的引导程序。这避免了依赖 chainloading 机制(通过一个[[Boot loader|启动引导程序]]加载另一个引导程序,来切换操作系统)。<br />
<br />
参阅 [[Dual boot with Windows]].<br />
<br />
== 启动加载器 ==<br />
<br />
{{Expansion|需要补充解释启动加载器和启动管理器之间的区别|Talk:Arch boot process#Boot loader vs boot manager}}<br />
<br />
启动加载器是 [[Wikipedia:BIOS|BIOS]] 或 [[UEFI]] 启动的第一个程序。它负责使用正确的 [[kernel parameters|内核参数]] 加载内核, 并根据配置文件加载 [[mkinitcpio|初始化 RAM disk]]。对于 UEFI,内核本身可以由 UEFI 使用 EFI boot stub 直接启动,也可以使用单独的引导加载程序或引导管理器来在引导之前编辑内核参数。<br />
<br />
{{Note|加载 [[Microcode]] 补丁要求对启动加载器的配置进行调整。[https://www.archlinux.org/news/changes-to-intel-microcodeupdates/]}}<br />
<br />
=== 功能比较 ===<br />
<br />
{{Note|<br />
* 只需要启动加载器兼容内核和 initramfs 所处的位置({{ic|/boot}})的文件系统兼容即可。<br />
* 因为 GPT 是 UEFI 规范的一部分,所以所有的 UEFI 启动加载器都支持 GPT 磁盘。在 BIOS上 使用 GPT 磁盘也是可行的,要么根据[https://www.rodsbooks.com/gdisk/hybrid.html Hybrid MBR]使用混合启动,要么使用新的 [http://repo.or.cz/syslinux.git/blob/HEAD:/doc/gpt.txt GPT-only] 协议。但是这个协议可能在某些 BIOS 实现上会出问题,详情请参考 [http://www.rodsbooks.com/gdisk/bios.html#bios rodsbooks]。<br />
* 在文件系统支持中提到的“加密”是[[wikipedia:Filesystem-level encryption|文件系统级别加密]],和[[dm-crypt|块级别加密]]没有任何关系。 <br />
}}<br />
<br />
{| class="wikitable sortable"<br />
! rowspan="2"| 名称<br />
! colspan="2"| 固件类型<br />
! colspan="2"| [[Partitioning_(简体中文)#分区表|分区表]]<br />
! rowspan="2"| 多重启动<br />
! colspan="5"| [[File_systems_(简体中文)|文件系统]]<br />
! rowspan="2"| 备注<br />
|-<br />
! BIOS !! [[UEFI (简体中文)|UEFI]]<br />
! [[Partitioning_(简体中文)#Master_Boot_Record|MBR]] !! [[Partitioning_(简体中文)#GUID_分区表|GPT]]<br />
! [[Btrfs (简体中文)|Btrfs]] !! [[ext4 (简体中文)|ext4]] !! ReiserFS !! [[VFAT|VFAT]] !! [[XFS (简体中文)|XFS]]<br />
|-<br />
! [[EFISTUB|EFISTUB]]<br />
| {{-}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{-}}<br />
| {{-}} || {{-}} || {{-}} || {{Y|仅 ESP}} || {{-}}<br />
| 内核会变为一个 EFI 可执行文件来被 [[UEFI (简体中文)|UEFI]] 固件或者其他启动加载器加载。<br />
|-<br />
! [[Clover (简体中文)|Clover]]<br />
| {{G|模拟 UEFI}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{是}}<sup>1</sup><br />
| {{否}} || {{Y|不支持加密}} || {{否}} || {{是}} || {{否}}<br />
| 修改版的 rEFIt,用来运行[[wikipedia:Hackintosh|黑苹果]]。<br />
|-<br />
! [[GRUB (简体中文)|GRUB]]<br />
| {{是}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{是}}<br />
| {{是}} || {{是}} || {{是}} || {{是}} || {{是}}<br />
| 在 BIOS/GPT 配置下需要一个 [[GRUB_(简体中文)#GUID分区表_(GPT)_特殊操作|BIOS启动分区]]。<br/>支持RAID, LUKS1 和 LVM (但是不支持精简配置卷)。<br />
|-<br />
! [[rEFInd]]<br />
| {{否}} || {{是}}<br />
| {{是}} || {{是}}<br />
| {{是}}<sup>1</sup><br />
| {{Y|不支持加密和 zstd 压缩}} || {{Y|不支持加密}} || {{Y|不支持 tail-packing 功能}} || {{是}} || {{否}}<br />
| 支持自动寻找内核和确定内核参数而不需要手动配置。<br />
|-<br />
! [[Syslinux]]<br />
| {{是}} || {{Y|[[Syslinux#Limitations of UEFI Syslinux (简体中文)|有限支持]]}}<br />
| {{是}} || {{是}}<br />
| {{Y|[[Syslinux#Chainloading (简体中文)|有限支持]]}}<br />
| {{Y|不支持: 跨设备卷、压缩、加密}} || {{Y|不支持加密}} || {{否}} || {{是}} || {{Y|仅限MBR;不支持稀疏索引节点}}<br />
| 不支持某些 [[File systems (简体中文)|文件系统]] 功能 [https://wiki.syslinux.org/wiki/index.php?title=Filesystem] <br/>启动加载器只能够访问它所处的文件系统。[https://bugzilla.syslinux.org/show_bug.cgi?id=33]<br />
|-<br />
! [[systemd-boot]]<br />
| {{否}} || {{是}}<br />
| {{Y|[https://github.com/systemd/systemd/issues/1125 仅限手动安装]}} || {{是}}<br />
| {{是}}<sup>1</sup><br />
| {{否}} || {{否}} || {{否}} || {{Y|仅 ESP}} || {{否}}<br />
| 无法启动[[EFI_system_partition_(简体中文)|ESP]]以外的分区上的二进制文件。<br />
|-<br />
! {{Grey|[[GRUB Legacy (简体中文)|GRUB Legacy]]}}<br />
| {{是}} || {{否}}<br />
| {{是}} || {{否}}<br />
| {{是}}<br />
| {{否}} || {{否}} || {{是}} || {{是}} || {{Y|仅 v4}}<br />
| [https://www.gnu.org/software/grub/grub-legacy.html 停止开发],新版本为 GRUB。<br />
|-<br />
! {{Grey|[[LILO]]}}<br />
| {{是}} || {{否}}<br />
| {{是}} || {{否}}<br />
| {{是}}<br />
| {{否}} || {{Y|不支持加密}} || {{是}} || {{是}} || {{是|http://xfs.org/index.php/XFS_FAQ#Q:_Does_LILO_work_with_XFS.3F}}<br />
| 因为某些局限性 (如 Btrfs, GPT, RAID),已经[http://web.archive.org/web/20180323163248/http://lilo.alioth.debian.org/ 停止开发]。<br />
|}<br />
<br />
# 一种 [https://www.rodsbooks.com/efi-bootloaders/principles.html 启动管理器]。它只能启动其他 EFI 应用程序,例如,使用 {{ic|1=CONFIG_EFI_STUB=y}} 和 Windows {{ic|bootmgfw.efi}} 构建 Linux 内核镜像。<br />
<br />
更多信息,参见 [[Wikipedia:Comparison of boot loaders]]。<br />
<br />
== 内核 ==<br />
<br />
内核是操作系统的核心。它运行于一个叫「内核空间」的底层上,负责机器硬件和应用程序之间的交流。为了尽可能充分地压榨 CPU 性能,内核使用调度器,通过一定的优先级算法将 CPU 按照时间动态的分配给各个程序。让我们感觉就像所有程序都在同时使用 CPU 一样。<br />
<br />
== initramfs ==<br />
<br />
在 [[#Boot loader|boot loader]]{{Broken section link}} 加载 kernel 和可用的 initramfs 文件,并执行 kernel 之后,kernel 将 initramfs(初始RAM文件系统)压缩包解压缩到(然后清空)rootfs(初始根文件系统,特别是ramfs或tmpfs)。首先提取的 initramfs 是在 kernel 构建过程中嵌入 kernel 二进制Update translation.的 initramfs,然后提取可用的外部 initramfs 文件。因此,外部 initramfs 中的文件会覆盖嵌入式 initramfs 中具有相同名称的文件。然后, kernel 执行 {{ic|/init}} (在rootfs中)作为第一个进程。''early userspace''开始。<br />
<br />
Arch Linux 对内置的 initramfs 使用一个空的存档(在构建Linux时是默认的)。有关外部 initramfs 的更多信息和 Arch 特定的信息,请参见 [[mkinitcpio]]。<br />
<br />
initramfs 之所以存在,是为了帮系统访问真正的根文件系统(参见 [[Arch filesystem hierarchy (简体中文)]])。也就是说,那些硬件 IDE, SCSI, SATA, USB/FW 所要求的 kernel 模块,如果并没有内置在 kernel 里,就会被 initramfs 负责加载。一旦通过 [[udev (简体中文)]] 之类的程序或脚本加载好模块,启动流程才会继续下去。所以,initramfs 只要有能够让系统访问真实根文件系统的模块就可以了,不用尽可能地包含一切模块。当然,其它真正有用的模块之后会在 init 流程中被 udev 加载好。<br />
<br />
== Init 流程 ==<br />
<br />
在「早期用户空间」的最终环节里,'''真正'''的根文件系统被挂载好后,就会替换掉原来的'''伪'''根文件系统。接着 {{ic|/sbin/init}} 被执行,同样也替换掉原来的 {{ic|/init}} 进程。Arch 御用的 [[init]] 就是 [[systemd (简体中文)]].<br />
<br />
== Getty ==<br />
<br />
[[init]] 为每一个 [[Wikipedia:Virtual console|虚拟终端]] 调用 [[getty]],前者一般有六个,每个虚拟终端都会初始化 tty 并请求输入用户名和密码。当在某虚拟终端输入用户名和密码后,其 getty 会通过 {{ic|/etc/passwd}} 检查是否正确,如果正确,就接着调用 [[#Login|login]], 此外 getty 也可能会改启动一个显示管理器。<br />
<br />
== 显示管理器 ==<br />
<br />
[[display manager (简体中文)|显示管理器]], 可以配置为代替原来的 getty 登录命令行提示符。<br />
<br />
为了在引导后自动初始化显示管理器,必须通过[[systemd]]手动启用服务单元。 有关启用和启动服务单元的更多信息,请参见[[systemd#使用单元]]。<br />
<br />
== Login ==<br />
<br />
所谓的 ''login'' 程序会为用户启动一个设置了环境变量的「会话」,接着根据 {{ic|/etc/passwd}} 的配置启动用户专用 shell。<br />
<br />
在成功登录后,刚刚启动登录 shell 之前,''login'' 程序显示 [[Wikipedia:motd (Unix)|/etc/motd]] (''m''essage ''o''f ''t''he ''d''ay) 。在这里,您可以显示服务条款,以提醒用户您的本地政策或您想告诉他们的任何内容。<br />
<br />
== Shell ==<br />
<br />
一旦用户专用的 [[shell]] 启动了,它会在显示命令行提示符前,执行一个「有可执行性的配置文件」,比如 [[.bashrc]]. 如果用户有设定了 [[Start X at login]], 原来那个「有可执行性的配置文件」会调用 [[startx]] or [[xinit]].<br />
<br />
== GUI、 xinit 或者 wayland ==<br />
<br />
[[xinit]] 也会调用用户的 [[.xinitrc]] 这个「有可执行性的配置文件」,后者一般用来启动一个 [[window manager (简体中文)|窗口管理器]]。如果用户退出了窗口管理器、xinit、 startx 和 shell login 就会先后中断,返回到 [[#Getty|getty]].<br />
<br />
== 参见 ==<br />
* [http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ Early Userspace in Arch Linux]<br />
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Inside the Linux boot process]<br />
* [http://www.linuxjournal.com/article/4622 Boot with GRUB]<br />
* [[Wikipedia:Linux startup process]]<br />
* [[Wikipedia:initrd]]<br />
* [http://www.cyberciti.biz/faq/grub-boot-into-single-user-mode/ Boot Linux Grub Into Single User Mode]<br />
* [https://neosmart.net/wiki/mbr-boot-process/ NeoSmart: The BIOS/MBR Boot Process]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Persistent_block_device_naming_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626374
Persistent block device naming (简体中文)
2020-07-22T15:51:57Z
<p>VictriD: /* 持久化命名的方法 */ Add translateme tag</p>
<hr />
<div>[[Category:Boot process (简体中文)]]<br />
[[Category:File systems (简体中文)]]<br />
[[Category:Hardware detection and troubleshooting (简体中文)]]<br />
[[en:Persistent block device naming]]<br />
[[es:Persistent block device naming]]<br />
[[it:Persistent block device naming]]<br />
[[ja:永続的なブロックデバイスの命名]]<br />
[[pt:Persistent block device naming]]<br />
{{Related articles start}}<br />
{{Related|fstab (简体中文)}}<br />
{{Related|udev (简体中文)}}<br />
{{Related|LVM (简体中文)}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Persistent_block_device_naming|2016-07-31|423674}}<br />
<br />
本文讲述如何为你的块设备提供持久化命名。udev的导入使之成为可能,也使之优于基于总线的命名法。如果你的机器上有不止一个 SATA, SCSI 或 IDE 磁盘控制器,那么它们所对应的设备节点将会依随机次序添加。这样就可能导致每次引导时设备的名字如 {{ic|/dev/'''sda'''}} 与 {{ic|/dev/'''sdb'''}} 互换了,最终导致系统不可引导、kernel panic、或者设备不可见。持久化命名法可以解决这些问题。<br />
{{注意|<br />
* 持久设备名有一些超出本文范围的限制,比如虽然 [[mkinitcpio (简体中文)|mkinitcpio]] 支持某个方法,但 systemd 会对支持的设备名添加额外的限制(例如 {{Bug|42884}})。 <br />
* 如果你使用 [[LVM2]],本文将不适用。因为 LVM 自动处理这一问题。}}<br />
<br />
==持久化命名的方法==<br />
<br />
{{Translateme (简体中文)|by-uuid以后的部分都没有完成翻译。}}<br />
<br />
有四种持久化命名方案:[[#by-label|by-label]]、[[#by-uuid|by-uuid]]、[[#by-id 和 by-path|by-id 和 by-path]]。对于那些使用[[GUID Partition Table|GUID 分区表(GPT)]]的磁盘,还有额外的两种方案,[[#by-partlabel|by-partlabel]] 和 [[#by-partuuid|by-partuuid]]。你也可以[[#使用 Udev 静态设备名|使用 Udev 静态设备名]]方案。<br />
<br />
下面讲解各种命名方案及其用法。<br />
<br />
{{ic|lsblk -f}} 命令用于以图示方式查看第一种方案:<br />
<br />
{{hc|$ lsblk -f|<nowiki><br />
NAME FSTYPE LABEL UUID MOUNTPOINT<br />
sda <br />
├─sda1 vfat CBB6-24F2 /boot<br />
├─sda2 ext4 SYSTEM 0a3407de-014b-458b-b5c1-848e92a327a3 /<br />
├─sda3 ext4 DATA b411dc99-f0a0-4c87-9e05-184977be8539 /home<br />
└─sda4 swap f9fe0b69-a280-415d-a03a-a32752370dee [SWAP]<br />
</nowiki>}}<br />
<br />
[[GUID Partition Table|GPT 分区表]]的系统应改用 {{ic|blkid}} 命令,这个命令更方便脚本使用但可读性低。<br />
<br />
{{hc|$ blkid|<nowiki><br />
/dev/sda1: UUID="CBB6-24F2" TYPE="vfat" PARTLABEL="EFI SYSTEM PARTITION" PARTUUID="d0d0d110-0a71-4ed6-936a-304969ea36af" <br />
/dev/sda2: LABEL="SYSTEM" UUID="0a3407de-014b-458b-b5c1-848e92a327a3" TYPE="ext4" PARTLABEL="GNU/LINUX" PARTUUID="98a81274-10f7-40db-872a-03df048df366" <br />
/dev/sda3: LABEL="DATA" UUID="b411dc99-f0a0-4c87-9e05-184977be8539" TYPE="ext4" PARTLABEL="HOME" PARTUUID="7280201c-fc5d-40f2-a9b2-466611d3d49e" <br />
/dev/sda4: UUID="f9fe0b69-a280-415d-a03a-a32752370dee" TYPE="swap" PARTLABEL="SWAP" PARTUUID="039b6c1c-7553-4455-9537-1befbc9fbc5b"<br />
</nowiki><br />
}}<br />
<br />
===by-label===<br />
<br />
几乎每一个文件系统都可以有一个标签。所有有标签的分区都在 {{ic|/dev/disk/by-label}} 目录中列出。这个目录随着分区标签的变动而被动态地创建和销毁。<br />
<br />
{{hc|$ ls -l /dev/disk/by-label|<nowiki> <br />
total 0<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 DATA -> ../../sda3<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 SYSTEM -> ../../sda2<br />
</nowiki>}}<br />
<br />
可以修改文件系统的标签。下面列出常见文件系统标签的修改方法:<br />
<br />
; swap : {{ic|swaplabel -L <label> /dev/XXX}} 用 {{pkg|util-linux}}<br />
; ext2/3/4 : {{ic|e2label /dev/XXX <label>}} 用 {{pkg|e2fsprogs}}<br />
; btrfs : {{ic|btrfs filesystem label /dev/XXX <label>}} 用 {{pkg|btrfs-progs}}<br />
; reiserfs : {{ic|reiserfstune -l <label> /dev/XXX}} 用 {{pkg|reiserfsprogs}}<br />
; jfs : {{ic|jfs_tune -L <label> /dev/XXX}} 用 {{pkg|jfsutils}}<br />
; xfs : {{ic|xfs_admin -L <label> /dev/XXX}} 用 {{pkg|xfsprogs}}<br />
; fat/vfat : {{ic|dosfslabel /dev/XXX <label>}} 用 {{pkg|dosfstools}}<br />
; fat/vfat : {{ic|mlabel -i /dev/XXX ::<label>}} 用 {{pkg|mtools}}<br />
; ntfs : {{ic|ntfslabel /dev/XXX <label>}} 用 {{pkg|ntfs-3g}}<br />
; zfs : 这个文件系统不支持 {{ic|/dev/disk/by-label}}, 但可以使用 [[#by-partlabel]]<br />
<br />
{{注意|<br />
* Changing the filesystem label of the root partition has to be done from a "live" GNU/Linux distribution because the partition needs to be unmounted first.<br />
* 标签必须是唯一的,以防止可能的冲突。<br />
* 标签最多可以有16个字符。<br />
* 标签是文件系统的一个属性,所以无法持久地表示单一磁盘阵列设备。<br />
}}<br />
<br />
===by-uuid===<br />
<br />
[[wikipedia:UUID|UUID]] is a mechanism to give each filesystem a unique identifier. These identifiers are generated by filesystem utilities (e.g. {{ic|mkfs.*}}) when the partition gets formatted and are designed so that collisions are unlikely. All GNU/Linux filesystems (including swap and LUKS headers of raw encrypted devices) support UUID. FAT and NTFS filesystems (''fat'' and ''windows'' labels above) do not support UUID, but are still listed in {{ic|/dev/disk/by-uuid}} with a shorter UID (unique identifier):<br />
<br />
{{hc|$ ls -l /dev/disk/by-uuid/|<br />
total 0<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 0a3407de-014b-458b-b5c1-848e92a327a3 -> ../../sda2<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 b411dc99-f0a0-4c87-9e05-184977be8539 -> ../../sda3<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 CBB6-24F2 -> ../../sda1<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 f9fe0b69-a280-415d-a03a-a32752370dee -> ../../sda4<br />
}}<br />
<br />
The advantage of using the UUID method is that it is much less likely that name collisions occur than with labels. Further, it is generated automatically on creation of the filesystem. It will, for example, stay unique even if the device is plugged into another system (which may perhaps have a device with the same label). <br />
<br />
The disadvantage is that UUIDs make long code lines hard to read and break formatting in many configuration files (e.g. fstab or crypttab). Also every time a partition is resized or reformatted a new UUID is generated and configs have to get adjusted (manually).<br />
<br />
{{Tip|In case your swap partition does not have an UUID assigned, you will need to reset the swap partition using [[Swap#Swap partition|mkswap]] utility.}}<br />
<br />
===by-id 和 by-path===<br />
<br />
{{ic|by-id}} creates a unique name depending on the hardware serial number, {{ic|by-path}} depending on the shortest physical path (according to sysfs). Both contain strings to indicate which subsystem they belong to (i.e. {{ic|-ide-}} for {{ic|by-path}}, and {{ic|-ata-}} for {{ic|by-id}}), so they are linked to the hardware controlling the device. This implies different levels of persistence: the {{ic|by-path}} will already change when the device is plugged into a different port of the controller, the {{ic|by-id}} will change when the device is plugged into a port of a hardware controller subject to another subsystem. [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/persistent_naming.html] Thus, both are not suitable to achieve persistent naming tolerant to hardware changes. <br />
<br />
However, both provide important information to find a particular device in a large hardware infrastructure. For example, if you do not manually assign persistent labels ({{ic|by-label}} or {{ic|by-partlabel}}) and keep a directory with hardware port usage, {{ic|by-id}} and {{ic|by-path}} can be used to find a particular device.[http://linuxshellaccount.blogspot.in/2008/09/how-to-easily-find-wwns-of-qlogic-hba.html] [http://www.linuxquestions.org/questions/linux-server-73/how-to-find-wwn-for-dev-sdc-917269/]<br />
<br />
===by-partlabel===<br />
<br />
{{Note|This method only concerns disks with [[GUID Partition Table|GUID Partition Table (GPT)]].}}<br />
<br />
Partition labels can be defined in the header of the partition entry on GPT disks.<br />
<br />
See also [[Wikipedia:GUID_Partition_Table#Partition_entries]].<br />
<br />
This method is very similar to the [[#by-label|filesystem labels]], excepted that the dynamic directory is {{ic|/dev/disk/by-partlabel}}.<br />
<br />
{{hc|ls -l /dev/disk/by-partlabel/|<nowiki><br />
total 0<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 EFI\x20SYSTEM\x20PARTITION -> ../../sda1<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 GNU\x2fLINUX -> ../../sda2<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 HOME -> ../../sda3<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 SWAP -> ../../sda4<br />
</nowiki>}}<br />
<br />
{{Note|<br />
* GPT partition labels have also to be different to avoid conflicts. To change your partition label, you can use {{ic|gdisk}} or the ncurse-based version {{ic|cgdisk}}. Both are available from the {{Pkg|gptfdisk}} package. See [[Partitioning#Partitioning tools]].<br />
* According to the specification, GPT partition labels can be up to 72 characters long.}}<br />
<br />
===by-partuuid===<br />
{{Note|This method only concerns disks with [[GUID Partition Table|GUID Partition Table (GPT)]].}}<br />
<br />
Like [[#by-partlabel|GPT partition labels]], GPT partition UUID are defined in the partition entry on GPT disks. <br />
<br />
See also [[Wikipedia:GUID_Partition_Table#Partition_entries]].<br />
<br />
The dynamic directory is similar to other methods and, like [[#by-uuid|UUID filesystems]], using UUIDs is prefered over labels.<br />
<br />
{{hc|ls -l /dev/disk/by-partuuid/|<nowiki><br />
total 0<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 039b6c1c-7553-4455-9537-1befbc9fbc5b -> ../../sda4<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 7280201c-fc5d-40f2-a9b2-466611d3d49e -> ../../sda3<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 98a81274-10f7-40db-872a-03df048df366 -> ../../sda2<br />
lrwxrwxrwx 1 root root 10 May 27 23:31 d0d0d110-0a71-4ed6-936a-304969ea36af -> ../../sda1<br />
</nowiki><br />
}}<br />
<br />
===使用 Udev 静态设备名===<br />
<br />
参考 [[Udev (简体中文)#设置静态设备名|设置静态设备名]]。<br />
<br />
== 使用持久名称 ==<br />
<br />
有多种应用可以使用持久名称:<br />
<br />
=== fstab ===<br />
<br />
参考 [[fstab#Identifying filesystems]]<br />
<br />
===引导管理器===<br />
<br />
要在引导管理器中使用持久化名称,需要满足下列先决条件:<br />
<br />
* 使用 [[Mkinitcpio (简体中文)#配置|mkinitcpio]] 初始化 RAM 磁盘镜像<br />
* 在 {{ic|/etc/mkinitcpio.conf}} 中启用了 udev<br />
<br />
在上面的例子中,{{ic|/dev/sda1}} 是引导分区。在 [[GRUB]] 的 {{ic|grub.cfg}} 文件中,''linux'' 这行如下:<br />
<br />
linux /boot/vmlinuz-linux root=/dev/sda1 rw quiet<br />
<br />
根据选定的命名方案,将该行内容修改为如下之一:<br />
<br />
linux /boot/vmlinuz-linux root=/dev/disk/by-label/root_myhost rw quiet<br />
<br />
或者:<br />
<br />
linux /boot/vmlinuz-linux root=UUID=2d781b26-0285-421a-b9d0-d4a0d3b55680 rw quiet<br />
<br />
如果使用 [[LILO]],请勿使用 {{ic|1=root=...}} 配置选项,它不会工作。而应代之以 {{ic|1=append="root=..."}} 或 {{ic|1=addappend="root=..."}}。详情参阅 LILO 的 man 文档中的 {{ic|append}} 和 {{ic|addappend}} 章节。<br />
<br />
有一个替代的方法处理嵌入配置行中的文件系统标签。如上例中 {{ic|/dev/sda1}} 文件系统标签为 {{ic|root_myhost}},可以在 GRUB 的 配置行中这样写:<br />
<br />
linux /boot/vmlinuz-linux root=LABEL=root_myhost rw quiet</div>
VictriD
https://wiki.archlinux.org/index.php?title=ArchWiki:Translation_Team_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626373
ArchWiki:Translation Team (简体中文)
2020-07-22T15:39:28Z
<p>VictriD: /* 页面维护列表 */ Syslinux translation finished and synced.</p>
<hr />
<div>[[Category:ArchWiki (简体中文)]]<br />
[[Category:Teams (简体中文)]]<br />
[[ar:ArchWiki:Translation Team]]<br />
[[cs:ArchWiki:Translation Team]]<br />
[[el:ArchWiki:Translation Team]]<br />
[[en:ArchWiki:Translation Team]]<br />
[[es:ArchWiki:Translation Team]]<br />
[[fr:ArchWiki Translation Team]]<br />
[[hr:ArchWiki:Translation Team]]<br />
[[it:ArchWiki:Translation Team]]<br />
[[ja:ArchWiki:翻訳チーム]]<br />
[[ko:ArchWiki:Translation Team]]<br />
[[nl:ArchWiki:Translation Team]]<br />
[[pl:ArchWiki:Translation Team]]<br />
[[pt:ArchWiki:Translation Team]]<br />
[[ru:ArchWiki:Translation Team]]<br />
[[sk:ArchWiki:Translation Team]]<br />
[[uk:ArchWiki:Translation Team]]<br />
[[zh-hant:ArchWiki:Translation Team]]<br />
ArchWiki 上有许多中文页面,这其中大部分是从外文翻译过来的,这些页面是无数中文志愿者劳动的结晶。随着时间推移,有些页面因为没有及时维护,内容严重过时。而目前的翻译工作缺少组织,效率偏低。所以参照西班牙和意大利翻译组的做法,添加这个页面。<br />
<br />
如果你希望对 ArchWiki 做贡献,参与 Wiki 建设,比如翻译英文页面和对已翻译过的中文页面进行维护,只需要编辑下面的[[#页面维护列表]],添加相应的条目,并将自己加为相关页面的维护者。如果你在列表中还没有找到想要翻译的页面,可以自行添加。另外,如果因为时间原因无法再维护页面,请及时将自己从维护者列表中删除。<br />
<br />
== 创建翻译 ==<br />
<br />
{{警告|如果不准备翻译页面的大部分内容,请尽量不要新建简体中文页面。检查英文页面的更新需要花费不少精力,没有翻译的页面会增加维护负担。}}<br />
# 如果还不知道如何编辑 wiki,请阅读[[Help:Editing (简体中文)|编辑帮助]]。<br />
# 阅读 [[Help:i18n (简体中文)|i18n 帮助]],文章给出了 ArchWiki 国际化和本地化的指南。<br />
# [[Special:UserLogin|登录]]以进行编辑。<br />
# 选择要翻译的页面,例如从[[Special:Random|随机页面]]或[[#页面维护列表|页面维护列表]]中选择一个未翻译完成的页面。假设要翻译 [[ArchWiki:Translation Team]]。<br />
# 进入选择的英文页面,点击页面顶部的'''编辑'''。<br />
# 添加要翻译文件的语言间链接, 简体中文的话加入 <nowiki>[[zh-hans:Some Page]]</nowiki>,其它语言参见 [[Help:i18n#Interlanguage links]])。<br />
# 复制所有页面代码。<br />
# 预览页面 (新加了语言链接)<br />
# 访问页面左边新添加的语言链接,应该会进到 [[ArchWiki Translation Team (Language)]](打开新标签页,不要关闭预览的页面)<br />
# 因为页面不存在,点击'''创建'''。<br />
# 将显示一个编辑器 - 粘贴复制的英文页面。<br />
# 将文章分类修改为本地化版本,例如将 {{ic|<nowiki>[[Category:ArchWiki]]</nowiki>}} 修改为 {{ic|<nowiki>[[Category:ArchWiki (简体中文)]]</nowiki>}},参阅 [[Help:Category (简体中文)]].<br />
# 修改语言间链接,指向英文页面(将 {{ic|zh-hans}} 修改为 {{ic|en}},并将英文页面的语言间链接移到文章顶部)。<br />
# 翻译页面,进行保存,还需要使用合适的[[Help:Style (简体中文)#编辑摘要|编辑摘要]],例如 {{ic|translate <nowiki>[[ArchWiki Translation Team]]</nowiki>}}。碰到不好翻译的段落,可以保留英文。尽量不要让原文和不太确认的翻译同时存在,会让页面看上去比较杂乱。<br />
# 在翻译页面的底部,列出了该页面所包含的类别。检查所有这些类别是否存在,即,链接不应为红色。否则,请点击红色链接,然后创建所有缺少的类别 - 类别的创建方式与常规页面相同。<br />
# 返回预览的页面并保存页面。<br />
# (可选)将 [[Template:TranslationStatus (简体中文)]] 添加到已翻译的页面。有关使用方法,请参见 [[Template:TranslationStatus (简体中文)#用法]]。<br />
# (可选)创建另一个页面,例如 [[ArchWiki Translation Team 的翻译的标题]],其标题将是 [[ArchWiki Translation Team (Language)]] 的标题的翻译,输入 {{ic|<nowiki>#redirect [[ArchWiki Translation Team (Language)</nowiki>]]}} 作为其唯一内容并保存。<br />
<br />
== 模版 ==<br />
<br />
下表列出了应翻译的英文[[Help:Template (简体中文)|模版]]及其等效的简体中文模板。<br />
<br />
{| class=wikitable<br />
! 英文模版 || 简体中文模版<br />
|-<br />
! colspan=2| 文章模版<br />
|-<br />
| [[Template:Related articles start]] || [[Template:Related articles start (简体中文)]]<br />
|-<br />
| [[Template:Unsupported]] || [[Template:Unsupported (简体中文)]]<br />
|-<br />
| [[Template:Yes]] || [[Template:是]]<br />
|-<br />
| [[Template:No]] || [[Template:否]]<br />
|-<br />
| [[Template:Tip]] || [[Template:提示]]<br />
|-<br />
| [[Template:Note]] || [[Template:注意]]<br />
|-<br />
| [[Template:Warning]] || [[Template:警告]]<br />
|-<br />
| [[Template:Dead link]] || [[Template:失效链接]]<br />
|-<br />
| [[Template:Broken package link]] || [[Template:Broken package link (简体中文)]]<br />
|-<br />
| [[Template:Broken section link]] || [[Template:Broken section link (简体中文)]]<br />
|-<br />
! colspan=2| 翻译状态模板<br />
|-<br />
| [[Template:Bad translation]] || [[Template:Bad translation (简体中文)]]<br />
|-<br />
| [[Template:Translateme]] || [[Template:Translateme (简体中文)]]<br />
|-<br />
| [[Template:TranslationStatus]] || [[Template:TranslationStatus (简体中文)]]<br />
|-<br />
! colspan=2| 导航模版<br />
|-<br />
| [[Template:HCL/Laptops table header]] || [[Template:HCL/Laptops table header (简体中文)]]<br />
|-<br />
| [[Template:Laptops navigation]] || [[Template:Laptops navigation (简体中文)]]<br />
|-<br />
| [[Template:List of applications navigation]] || [[Template:List of applications navigation (简体中文)]]<br />
|-<br />
| [[Template:Package guidelines]] || [[Template:Package guidelines (简体中文)]]<br />
|-<br />
! colspan=2| 特殊模版<br />
|-<br />
| [[Template:Cat main]] || [[Template:Cat main (简体中文)]]<br />
|-<br />
| [[Template:Template]] || [[Template:Template (简体中文)]]<br />
|-<br />
| [[Template:META Error]] || [[Template:META Error (简体中文)]]<br />
|-<br />
| [[Template:META Unexplained Status Template]] || [[Template:META Unexplained Status Template (简体中文)]]<br />
|-<br />
| [[Template:Comment]] || [[Template:Comment (简体中文)]]<br />
|-<br />
| [[Template:Committed identity]] || [[Template:Committed identity (简体中文)]]<br />
|-<br />
| [[Template:Unsigned]] || [[Template:Unsigned (简体中文)]]<br />
|}<br />
<br />
== 翻译中应省略的模板 ==<br />
<br />
当页面或部分标记有 [[Template:Accuracy]],[[Template:Style]],[[Template:Archive]],[[Template:Remove]] 或 [[Template:Out of date]] 时 — 在解决问题并且删除模板之前,不要翻译有问题的页面/部分。<br />
<br />
如果看到 [[Template:Expansion]],[[Template:Merge]],[[Template:Move]] 或 [[Template:Redirect]],则可以安全地翻译页面,但不要将这些模板复制到翻译的文章中。<br />
<br />
如果看到 [[Template:Broken package link]],[[Template:Broken section link]] 或 [[Template:Dead link]],请不要将这些模板复制到翻译的文章中。要么在原始文本中将其修复,然后复制并在要翻译时翻译修复的链接,要么在翻译时忽略与它们有关的整个句子或部分。<br />
<br />
== 完善翻译 ==<br />
<br />
[https://wiki.archlinux.org/index.php?title=Special:WhatLinksHere/Template:Translateme_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&limit=100 这个特殊页面]包含了需要完善翻译的简体中文页面。完善翻译的基本步骤:<br />
# 选择自己比较熟悉的文章进行翻译<br />
# 先检查英文页面的对应段落,更新成最新的英文后再翻译,避免翻译过时的内容,减少信息遗漏。<br />
# 翻译完成后删除页面中的 <nowiki>{{translateme (简体中文)}}</nowiki> 标记<br />
# (可选)给翻译完成的页面加上[[Template:TranslationStatus (简体中文)|翻译状态]],请参见 [[#创建翻译]]。<br />
<br />
== 更新过期页面 ==<br />
<br />
如果发现有 Wiki 页面过期或错误:<br />
* 小的改动,有时间可以立即进行修改同步,维护者并不控制页面的编辑权限,越多的人参与维护越好。如果改动较大,请先联系维护者,避免重复劳动。<br />
* 没有时间查看更改,请给页面加上 {{ic|<nowiki>{{out of date}}</nowiki>}} 模版,这样其他贡献者更容易发现需要更新的页面,而读者看到过期标记就可以直接查看英文页面,以免被错误内容误导,白白耽误时间。<br />
* 没有时间翻译,请将过期的中文部分删去,从英文页面中复制更改的部分到中文页面的相应部分,去掉{{ic|<nowiki>{{out of date}}</nowiki>}}模板(如果页面上有的话)并加上{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他贡献者就更容易发现需要翻译的页面,而读者也不会被过期的内容误导。<br />
如果发现有页面未翻译:<br />
* 有时间的话,请将页面中的英文部分翻译为中文,并去掉{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板。<br />
* 没有时间翻译,请为页面添加{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他的贡献者就能更容易发现需要翻译的页面。<br />
{{注意|在修改页面上的模板时,请同时更新页面维护列表的翻译状态。}}<br />
<br />
== 维护翻译 ==<br />
<br />
完成页面的翻译只是初步完成任务,及时同步英文页面改动、更新翻译是一个持续性的工作,可能会耗费更多的时间。<br />
<br />
=== 页面认领 ===<br />
<br />
所有人都可以认领页面。认领后的责任包括进行翻译,关注英文页面的改动,及时同步翻译。<br />
<br />
为了更好的跟踪英文页面的修改,请务必在设置中启用监视列表邮件通知,并监视对应的英文页面(从设置中找到监视列表,加入英文页面。或者直接到英文页面点击页面顶端的监视标签。这样只要有改动,就会收到邮件通知)。<br />
<br />
{{小贴士|如果收到邮件通知后没有访问页面或者访问了页面却没有登录用户,下次页面改动时就不会再发邮件通知。可以点击监视列表中的'''标记所有页面为已读'''再次获取更新。}}<br />
<br />
如果页面有维护者但长期得不到更新,将会在维护列表中删除维护者。<br />
<br />
=== 翻译状态模板 ===<br />
<br />
Arch 作为滚动发行版,软件变化比较快,对应的文档变化也比较快。许多翻译的文章由于缺乏更新,会产生命令运行出错或不起作用等问题。而由于这些过期页面没有及时标记出来,所以用户无法及时获得更新。[[Template:TranslationStatus (简体中文)|翻译状态模板]]就是为了解决这个问题而创建。<br />
<br />
此模板可以起到如下作用:<br />
* 为用户提供翻译状况,包括翻译时间、英文页面的最后版本等<br />
* 用户可以点击查看翻译后,英文页面的改动,这样英文不是很好的用户可以只查看很小一部分英文内容,并判断出是否影响操作。<br />
* 翻译人员可以跟踪页面状况,通过[[Special:WhatLinksHere/Template:TranslationStatus_(简体中文)|模板的反向链接]]可以查找到所有标记页面,查看需要更新翻译的部分。<br />
<br />
[[Template:TranslationStatus (简体中文)|模板页面]]有详细的使用方法。<br />
<br />
=== 页面维护列表 ===<br />
<br />
{{注意|请按照拉丁字母顺序添加页面。}}<br />
<br />
翻译状态说明:<br />
;过期:页面内容未与英文页面同步,对应 {{ic|<nowiki>{{out of date}}</nowiki>}} 模版<br />
;未翻译:页面中含有英文内容,对应 {{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}} 模板<br />
;完成:页面已与英文页面同步<br />
<br />
{| class="wikitable sortable collapsible" border="1"<br />
|-<br />
! 页面<br />
! 翻译状态<br />
! 维护者<br />
! class="unsortable" width="30%" | 备注<br />
|-<br />
| [[Amateur radio (简体中文)]]<br />
| 翻译中<br />
| liu-shuyuan<br />
| <br />
|-<br />
| [[Arch-based distributions (简体中文)]]<br />
| 完成<br />
| Joshua<br />
| 勘误中<br />
|-<br />
| [[Arch boot process (简体中文)]]<br />
| 翻译中<br />
| Bangbo Zheng<br />
| <br />
|-<br />
| [[Arch Security Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Arch Testing Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ArchWiki:Maintenance Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ArchWiki:News (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ASCII art (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[AUR helpers (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 部分用词可能需要修改<br />
|-<br />
| [[Bash (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[Common Desktop Environment (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Conky (简体中文)]]<br />
| 完成<br />
| upi<br />
| 无<br />
|-<br />
| [[Core utilities (简体中文)]]<br />
| 完成<br />
| rentaro, Arisaka<br />
| 无<br />
|-<br />
| [[Dark mode switching (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Discord (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Django (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Dynamic Kernel Module Support (简体中文)]]<br />
| 完成<br />
| Mithrandir<br />
| 完善中<br />
|-<br />
| [[Emacs (简体中文)]]<br />
| 翻译中<br />
| Jaurung yuanhang<br />
| 未完成<br />
|-<br />
| [[Equinox Desktop Environment (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[FHEM (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Fish (简体中文)]]<br />
| 完成<br />
| liu-shuyuan<br />
| <br />
|-<br />
| [[Flatpak (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Fwupd (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Gcin (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[GIMP (简体中文)]]<br />
| 完成<br />
| [[User:驿窗|驿窗]]<br />
| 长期维护中<br />
|-<br />
| [[GNOME (简体中文)]]<br />
| 完成<br />
| skywet<br />
| <br />
|-<br />
| [[Google Authenticator (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[GRUB (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[GRUB/Tips and tricks (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[Heirloom (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Inkscape (简体中文)]]<br />
| 完成<br />
| [[User:驿窗|驿窗]]<br />
| 长期维护中<br />
|-<br />
| [[International communities (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Java (简体中文)]]<br />
| 翻译中<br />
| CaCaCarrot<br />
| 无<br />
|-<br />
| [[Kernel live patching (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[Libvirt (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 需要格式改进<br />
|-<br />
| [[Liri (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[List of applications (简体中文)]]<br />
| 部分翻译<br />
| DavidChen<br />
| 翻译中<br />
|-<br />
| [[Lua (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Lumina (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Minecraft (简体中文)]]<br />
| 完成<br />
| Xavier Lau<br />
| 页面已经与英文版同步,长期维护中<br />
|-<br />
| [[Moksha (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[MySQL (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Notion (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[OpenSSH (简体中文)]]<br />
| 完成<br />
| Arisaka<br />
| 无<br />
|-<br />
| [[pkgstats (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[ranger (简体中文)]]<br />
| 完成<br />
| Jason Zhang<br />
| 完善中<br />
|-<br />
| [[Rockbox (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Roles (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Rxvt-unicode (简体中文)]]<br />
| 完成<br />
| KyanCh<br />
| 无<br />
|-<br />
| [[Scheme (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[SDDM (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Steam (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Syslinux (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[TLP (简体中文)]]<br />
| 完成<br />
| Skywet<br />
| 持续更新中<br />
|-<br />
| [[Trac (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Trusted Users (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Twm (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Unofficial mirrors (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Unofficial user repositories (简体中文)]]<br />
| 翻译中<br />
| TransistorLogic<br />
| 无<br />
|-<br />
| [[UP Squared (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Vivaldi (简体中文)]]<br />
| 完成<br />
| [[User:Aaron Chen|Aaron Chen]]<br />
| 长期维护<br />
|-<br />
| [[Webmin (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[X2Go (简体中文)]]<br />
| 过期<br />
| [[User:Aaron Chen|Aaron Chen]]<br />
|</div>
VictriD
https://wiki.archlinux.org/index.php?title=Syslinux_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626372
Syslinux (简体中文)
2020-07-22T15:37:39Z
<p>VictriD: Translation Complete. Synced to the newest English version.</p>
<hr />
<div>[[Category:Boot loaders (简体中文)]]<br />
[[en:Syslinux]]<br />
[[es:Syslinux]]<br />
[[fr:Syslinux]]<br />
[[it:Syslinux]]<br />
[[ja:Syslinux]]<br />
[[ru:Syslinux]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Arch Boot Process (简体中文)}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Syslinux|2020-07-22|626182}}<br />
[[Wikipedia:SYSLINUX|Syslinux]]是一个启动加载器集合,可以从硬盘、光盘或通过 [[Preboot Execution Environment (简体中文)|PXE]] 的网络引导启动系统。支持的[[File systems (简体中文)|文件系统]]包括 [[Wikipedia:File Allocation Table|FAT]],[[Wikipedia:ext2|ext2]],[[ext3|ext3]],[[ext4 (简体中文)|ext4]] 和非压缩单设备 [[Btrfs]] 文件系统。<br />
<br />
{{警告|1=在 Syslinux 6.03 版本中,启动加载器可能不支持某些文件系统的部分功能。详情请参考 [https://wiki.syslinux.org/wiki/index.php/Filesystem]。}}<br />
<br />
<br />
{{注意|Syslinux 本身只能访问其所在分区上的数据,参阅 [[#链式加载]] 来了解如何绕过这个限制。}}<br />
<br />
== BIOS 系统 ==<br />
<br />
=== 启动流程 ===<br />
<br />
# '''第一阶段 - 第一部分''' - '''加载MBR''' 电脑启动时,BIOS 会先加载磁盘开始的 440 字节 [[Partitioning (简体中文)#Master Boot Record|MBR]] 启动代码 ({{ic|/usr/lib/syslinux/bios/mbr.bin}} 或 {{ic|/usr/lib/syslinux/bios/gptmbr.bin}})。<br />
# '''第一阶段 - 第二部分''' - '''寻找活动分区''' 第一阶段的MBR启动代码会寻找活动分区(设置了可启动标记的 MBR 分区),此处我们假设是 {{ic|/boot}} 分区。<br />
# '''第二阶段 - 第一部分''' - '''执行卷启动记录程序''' MBR 启动代码会执行上面找到的 {{ic|/boot}} 分区的卷启动记录程序(VBR,volume boot record)。对于 Syslinux 来说,VBR 就是由 {{ic|extlinux --install}} 命令创建的 {{ic|/boot/syslinux/ldlinux.sys}} 位于开始扇区的部分。请注意 {{ic|ldlinux.sys}} 和 {{ic|ldlinux.c32}} 是不同的。<br />
# '''第二阶段 - 第二部分''' - '''执行 {{ic|/boot/syslinux/ldlinux.sys}}''' VBR 会加载 {{ic|ldlinux.sys}} 剩余的部分。{{ic|ldlinux.sys}} 所处在的扇区位置不可更改,否则 syslinux 无法启动。{{注意|对于 Btrfs 来说,因为文件不断移动导致{{ic|ldlinux.sys}}扇区的位置不断变化,上述的方法将不会工作。因此在 Btrfs 中整个 {{ic|ldlinux.sys}} 文件会直接紧接着嵌入卷启动记录程序,而不是像其他文件系统那样保存在 {{ic|/boot/syslinux/ldlinux.sys}} 处。}}<br />
# '''第三阶段''' - '''加载 {{ic|/boot/syslinux/ldlinux.c32}}''' {{ic|ldlinux.sys}} 加载剩下的 syslinux 的核心部分 {{ic|/boot/syslinux/ldlinux.c32}}(这部分是因为文件大小限制无法放入 {{ic|ldlinux.sys}} 中的核心模块)。{{ic|ldlinux.c32}} 文件应该在每一个装有 syslinux 的实例中出现,并且与分区中的 {{ic|ldlinux.sys}} 版本相匹配,否则 Syslinux 将无法启动。更多资料请参阅 [https://bugzilla.syslinux.org/show_bug.cgi?id=7]。<br />
# '''第四阶段''' - '''查找并加载配置文件''' 当 syslinux 完全加载完毕,它将自动查找配置文件 {{ic|/boot/syslinux/syslinux.cfg}} (或某些情况下的 {{ic|/boot/syslinux/extlinux.conf}}),如果找到即加载。否则会进入 Syslinux {{ic|boot:}} 的命令提示符。这一步和剩下的'''非核心''' Syslinux 部分(除 {{ic|lib*.c32}} 和 {{ic|ldlinux.c32}}的{{ic|/boot/syslinux/*.c32}} 模块) 需要提供 {{ic|/boot/syslinux/lib*.c32}} (库)模块[https://wiki.syslinux.org/wiki/index.php/Common_Problems#ELF]。同样,{ic|lib*.c32}} 库模块和非核心的 {{ic|*.c32}} 模块需要与分区中的 {{ic|ldlinux.sys}} 版本相匹配。<br />
<br />
=== 在 BIOS 上安装===<br />
<br />
[[install (简体中文)|安装]]软件包 {{Pkg|syslinux}}。<br />
<br />
{{注意|<br />
* [[Partitioning_(简体中文)#GUID_分区表|GPT]] 支持需要安装软件包 {{Pkg|gptfdisk}}。请参考[[#自动安装]]部分。<br />
* [[FAT]] 支持需要安装软件包 {{Pkg|mtools}}。<br />
}}<br />
<br />
安装软件包并不是安装启动加载器。在安装完相关的包后,还需要安装启动加载器代码(到适合的位置,一般是 VBR)才能启动系统;接下来的部分对您的特定系统的特性提供了替代的指令。<br />
<br />
====自动安装====<br />
<br />
{{注意|脚本 {{ic|syslinux-install_update}} 是 Arch Linux 特有的,并不被 Syslinux 的上游提供/支持。请不要向上游,而是直接向 [https://bugs.archlinux.org/ Arch Bug Tracker] 提交关于这个特定脚本的 bug 报告。}}<br />
<br />
<br />
* 执行完 {{ic|syslinux-install_update}} 脚本后,请不要忘记按照[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}。<br />
<br />
{{警告|{{ic|syslinux-install_update}} 脚本很有可能会设置一个与您的特定系统不同的默认根分区。将 {{ic|/boot/syslinux/syslinux.cfg}} 文件中的根分区修改正确对于成功启动是至关重要的。参见[[#内核参数]]。}}<br />
<br />
syslinux-install_update脚本将自动安装启动加载器代码(一般到 VBR)、复制 {{ic|*.c32}} 模块到{{ic|/boot/syslinux}}、设置分区启动标记并将启动代码安装到 MBR。它可以处理软 RAID、[[Partitioning (简体中文)#Master Boot Record|MBR]] 和 [[Partitioning_(简体中文)#GUID_分区表|GPT]] 磁盘。<br />
<br />
如果您使用分开的启动分区,请用 {{ic|lsblk}} 命令确保它们都已被挂载。如果您没有看到 {{ic|/boot}} 挂载点,请在继续之前将其挂载。<br />
<br />
* {{ic|syslinux-install_update}} 的参数:{{ic|-i}} (安装文件),{{ic|-a}} (将活动分区标上启动标记),{{ic|-m}} (安装 MBR 启动代码): 如果 {{bc|# syslinux-install_update -i -a -m}} 命令失败并报错''Syslinux BIOS install failed'',问题可能出在 {{ic|extlinux}} 可执行文件不能找到包含 {{ic|/boot}} 的分区:<br />
<br />
{{hc|# extlinux --install /boot/syslinux/|<br />
extlinux: cannot find device for path /boot/syslinux<br />
extlinux: cannot open device (null)<br />
}}<br />
<br />
例如,这可能发生在从 [[LILO]] 升级时,后者在引导当前的自定义内核时,将诸如 {{ic|1=root=/dev/sda1}} 的内核命令行参数转写成了等效的数字参数 {{ic|1=root=801}}。这可以从 {{ic|/proc/cmdline}} 和 {{ic|mount}} 等命令的输出确认。 可以通过向 {{ic|extlinux}} 手动指定 {{ic|1=--device=/dev/sda1}} 来解决下文手动安装时的问题,或者先重启到现有的Arch Linux内核,这样会使用 initramfs 来避免此问题。<br />
<br />
{{注意|<br />
* 如果您现在重新启动系统,则会出现 Syslinux 的提示符。如果想要实现系统自动引导或显示引导目录,您需要创建(或编辑)配置文件。<br />
* 如果您位于另一个根目录(例如,从安装磁盘上),则可以通过 chroot,重定向后安装:<br />
# syslinux-install_update -i -a -m -c /mnt<br />
}}<br />
<br />
*现在您需要按照接下来的[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}文件。<br />
<br />
==== 手动安装 ====<br />
<br />
{{注意|如果您尝试使用Live CD拯救已安装的系统,请确保在执行这些命令之前已经 [[chroot]] 到目标系统。否则您必须在所有文件(除了{{ic|/dev/}})路径之前添加挂载点。}}<br />
<br />
您计划安装Syslinux的启动分区必须包含 FAT,ext2,ext3,ext4 或 Btrfs 文件系统。您不必把它安装在文件系统的根目录上,比如把磁盘 {{ic|/dev/sda1}} 挂在到 {{ic|/boot}}。 例如,可以在{{ic|syslinux}}子目录里安装 Syslinux:<br />
<br />
# mkdir /boot/syslinux<br />
<br />
如果您希望使用除基本引导提示之外的任何目录或配置,请把 {{ic|/usr/lib/syslinux/bios/}} 里的所有的 {{ic|.c32}} 文件复制到 {{ic|/boot/syslinux/}} 中。请不要使用符号链接。<br />
<br />
# cp /usr/lib/syslinux/bios/*.c32 /boot/syslinux/ <br />
<br />
现在安装启动加载器。对 挂载后的 FAT,ext2/3/4,或 btrfs 启动分区使用 ''extlinux'' 安装:<br />
<br />
# extlinux --install /boot/syslinux<br />
<br />
替代的,对一个'''没有被挂载'''的 FAT 启动分区使用''syslinux'' 安装:<br />
<br />
# syslinux --directory syslinux --install /dev/sda1<br />
<br />
在此之后,继续安装适用于对应分区表的 Syslinux 引导代码:<br />
* [[#MBR 分区表]]上会安装 {{ic|mbr.bin}}<br />
* [[#GPT 分区表]]上会安装 {{ic|gptmbr.bin}}<br />
这些会在下面的内容中详细描述。<br />
<br />
更多信息,请参考 [[Partitioning (简体中文)#Master Boot Record|MBR 分区表]]。<br />
{{提示|如果您不确定您的分区表类型,可以通过 {{ic|blkid -s PTTYPE -o value /dev/sda}} 来检查。}}<br />
{{注意|对于一个无盘安装实例,不需要向MBR中安装Syslinux 引导代码。您可以跳过这一段,直接跳到[[#配置]]部分。更多信息请参考[https://unix.stackexchange.com/questions/103501/boot-partiotionless-disk-with-syslinux]。}}<br />
<br />
===== MBR 分区表 =====<br />
<br />
对于一个安装在 [[Partitioning (简体中文)#Master Boot Record|MBR 分区表]]上的实例,请确保您的启动分区已经被标记为活动分区(有启动标志)。您可以用 [[fdisk (简体中文)|fdisk]]、[[parted (简体中文)|parted]] 等工具确认。它应该看起来像这个样子:<br />
<br />
{{hc|# fdisk -l /dev/sda|<br />
[...]<br />
Device Boot Start End Blocks Id System<br />
/dev/sda1 * 2048 104447 51200 83 Linux<br />
/dev/sda2 104448 625142447 312519000 83 Linux<br />
}}<br />
<br />
安装 MBR 启动代码:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sda<br />
<br />
Syslinux 提供一个替代的分区表 {{ic|altmbr.bin}}。这个分区表''不会''扫描可启动分区,而是从 MBR 的最后一个字节中的值读取用于启动的分区。下面的操作会将这个分区表写入。<br />
<br />
# printf '\x5' | cat /usr/lib/syslinux/bios/altmbr.bin - | dd bs=440 count=1 iflag=fullblock of=/dev/sda<br />
<br />
在这个例子中,一个数值为5(十六进制的)的单个字节会被添加到 {{ic|altmbr.bin}} 的内容后,并向 {{ic|sda}} 的 MBR 分区表中写入440字节的内容。Syslinux 会被安装到磁盘的第一个逻辑分区({{ic|/dev/sda5}})。<br />
<br />
===== GPT 分区表 =====<br />
<br />
对于一个安装在 [[Partitioning (简体中文)#GUID 分区表|GPT 分区表]]上的实例, 请确保您的启动分区 {{ic|/boot}} 被设置上了 2 号属性"传统BIOS可启动"(legacy BIOS bootable)。[[Parted (简体中文)|Parted]] 可以使用"legacy_boot"参数实现,而 [[GPT fdisk (简体中文)|sgdisk]] 则需要输入下面的命令:<br />
<br />
# sgdisk /dev/sda --attributes=1:set:2<br />
<br />
这会在 {{ic|/dev/sda}} 的第一个分区设置"传统BIOS可启动"属性。检查命令:<br />
<br />
{{hc|1=# sgdisk /dev/sda --attributes=1:show|2=<br />
1:2:1 (legacy BIOS bootable)<br />
}}<br />
<br />
安装 MBR 启动代码:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sda<br />
<br />
== UEFI 系统 ==<br />
<br />
{{注意|<br />
* {{ic|efi64}} 对应 x86_64 UEFI 系统。如果是 IA32(32位) EFI 您需要在下面的命令中将 {{ic|efi64}} 替换为 {{ic|efi32}}。<br />
* 因为 Syslinux(目前)没有办法访问它自己所在以外的分区,因此内核与 initramfs 文件需要位于 Syslinux 同在的 [[EFI system partition (简体中文)|EFI 系统分区]](也叫ESP)。因此,这里推荐将ESP分区挂载在 {{ic|/boot}}。<br />
* {{ic|/usr/bin/syslinux-install_update}} 自动安装脚本不支持 UEFI 安装。<br />
* {{ic|syslinux.cfg}} 文件的配置与 BIOS 的配置方法相同。<br />
}}<br />
<br />
=== UEFI Syslinux 的局限性 ===<br />
<br />
* UEFI Syslinux 程序 {{ic|syslinux.efi}} 不能通过 {{ic|sbsign}}({{Pkg|sbsigntools}} 软件包提供)签名,导致无法进行 UEFI 安全启动。查看关于此的 Bug 报告:[https://bugzilla.syslinux.org/show_bug.cgi?id=8]<br />
* 在 UEFI Syslinux 目录中编辑内核参数时使用 TAB 缩进会导致显示错误(重叠显示)。查看关于此的 Bug 报告:[https://bugzilla.syslinux.org/show_bug.cgi?id=9]<br />
* UEFI Syslinux 程序不支持链式加载其他如 {{ic|UEFI Shell}}、{{ic|Windows Boot Manager}} 等 EFI 应用程序。查看关于此的增强请求:[https://bugzilla.syslinux.org/show_bug.cgi?id=17]<br />
* 在某些情况下,UEFI Syslinux 可能不能在通过 [[QEMU (简体中文)|QEMU]]/OVMF、[[VirtualBox (简体中文)|VirtualBox]] 和 [[VMware (简体中文)|VMware]] 的一些特定产品或版本构建的虚拟机的中启动。一些如 DUET 等 UEFI 模拟环境中也是如此。Syslinux 的贡献者已经确认,在 VMware Workstation 10.0.2 版本、Syslinux 6.02 版本以后不会发生这个问题。查看关于此的 Bug 报告:[https://bugzilla.syslinux.org/show_bug.cgi?id=21], [https://bugzilla.syslinux.org/show_bug.cgi?id=23] 和 [https://bugzilla.syslinux.org/show_bug.cgi?id=72]<br />
* Memdisk 不被 UEFI 支持。查看关于此的增强请求:[https://bugzilla.syslinux.org/show_bug.cgi?id=30]<br />
<br />
=== 在 UEFI 上安装 ===<br />
<br />
{{注意|在与 UEFI 有关的命令中,{{ic|''esp''}} 指的是 [[EFI system partition (简体中文)|EFI 系统分区]](ESP)所挂载的位置。}}<br />
<br />
* 安装来自[[official repositories (简体中文)|官方软件源]]的 {{Pkg|syslinux}} 和 {{Pkg|efibootmgr}}。然后按如下步骤安装 Syslinux 到 EFI 系统分区(ESP):<br />
* 复制 Syslinux 文件到 EFI 系统分区:<br />
<br />
# mkdir -p ''esp''/EFI/syslinux<br />
# cp -r /usr/lib/syslinux/efi64/* ''esp''/EFI/syslinux<br />
<br />
* 使用 [[Unified Extensible Firmware Interface (简体中文)#efibootmgr|efibootmgr]] 安装引导记录:<br />
<br />
# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/syslinux/syslinux.efi --label "Syslinux" --verbose<br />
<br />
其中,{{ic|/dev/sdXY}}是包含启动加载器的分区。<br />
<br />
* 按照[[#配置]]创建或编辑{{ic|''esp''/EFI/syslinux/syslinux.cfg}}文件。<br />
<br />
{{注意|<br />
* UEFI 的配置文件是 {{ic|''esp''/EFI/syslinux/syslinux.cfg}} 而非 {{ic|/boot/syslinux/syslinux.cfg}}。在 {{ic|/boot/syslinux/}} 中的文件是 BIOS 启动专用的,和 UEFI Syslinux 无关。<br />
在BIOS模式下启动时,{{Pkg | efibootmgr}} 将无法为 {{ic | /EFI/syslinux/syslinux.efi}} 设置 EFI 存储于非易失性存储器(nvram)的条目。欲实现此,请将资源放在默认 EFI 位置:{{ic|''esp''/EFI/syslinux/* -> ''esp''/EFI/BOOT/*}} 和 {{ic|''esp''/EFI/syslinux/syslinux.efi -> ''esp''/EFI/BOOT/bootx64.efi}} 处。<br />
}}<br />
<br />
<br />
== 配置 ==<br />
<br />
Syslinux 的配置文件 {{ic|syslinux.cfg}} 必须和 Syslinux 放在同一个目录下。在我们的示例中,BIOS 系统放在 {{ic|/boot/syslinux/}} 处,UEFI 系统放在 {{ic|''esp''/EFI/syslinux/}} 处。<br />
<br />
启动器将自动寻找 {{ic|syslinux.cfg}} (优先)和 {{ic|extlinux.conf}}这两个配置文件之一。<br />
<br />
{{提示|<br />
* 除了 {{ic|LINUX}},您也可以使用 {{ic|KERNEL}} 关键字。{{ic|KERNEL}} 关键字会试图去检测内核文件的类型,而 {{ic|LINUX}} 总是会将其按照 Linux 内核处理。 <br />
* {{ic|TIMEOUT}} 的单位是 '''0.1 秒''',也就是说 50 代表 5 秒。<br />
}}<br />
<br />
=== 示例 ===<br />
<br />
{{注意|<br />
* 示例这一节中的所有配置文件都需要编辑并设定合适的内核参数。参见[[#内核参数]]节。<br />
* 请一定仔细检查路径。这个实例可能不能够直接照搬到您的安装实例,尤其是 UEFI 系统。<br />
* 接下来的例子假设内核与 initrd 文件都位于 {{ic|syslinux.cfg}} 的父目录。(准确的说,是工作目录的父目录)。<br />
}}<br />
<br />
==== 启动提示符 ====<br />
<br />
这是一个非常简单的配置文件,会显示 {{ic|boot:}} 提示符并在 5 秒后自动启动。如果您不希望看见提示符,请将 {{ic|PROMPT}} 设置为 {{ic|0}}。<br />
<br />
配置文件:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
PROMPT 1<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
==== 文本启动目录 ====<br />
<br />
Syslinux 允许您使用一个文本启动目录来选择。要做到这一点,请将 {{ic|menu}} 和 {{ic|libutil}} 模块复制到您的 Syslinux 目录:<br />
<br />
# cp /usr/lib/syslinux/bios/{menu,libutil}.c32 /boot/syslinux/<br />
<br />
在 5.00 版本之后,其他的 {{ic|lib*.c32}} 库模块也会频繁地被调用。参考 [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies Syslinux 维基]来查看依赖树。<br />
<br />
配置文件:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI menu.c32<br />
PROMPT 0<br />
<br />
MENU TITLE Boot Menu<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
更多关于启动目录的信息,请参考 [https://wiki.syslinux.org/wiki/index.php/Menu Syslinux 维基]。<br />
<br />
==== 图形化启动目录 ====<br />
<br />
Syslinux 允许您使用一个文本启动目录来选择。要做到这一点,请将 {{ic|vesamenu}} COM32 模块复制到您的 Syslinux 目录:<br />
<br />
# cp /usr/lib/syslinux/bios/vesamenu.c32 /boot/syslinux/<br />
<br />
在 5.00 版本之后,其他的 {{ic|lib*.c32}} 库模块也会频繁地被调用。参考 [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies Syslinux 维基]来查看依赖树。<br />
<br />
{{注意| 如果您使用的是 [[UEFI (简体中文)|UEFI]] 系统,请一定从 {{ic|/usr/lib/syslinux/efi64/}} 目录(或者 IA32 (32位) EFI 的 {{ic|efi32}}) 中复制。否则电脑会黑屏。如果出现这个情况,请从 Live CD 中启动并使用 [[chroot (简体中文)|chroot]] 来进行正确的修改。}}<br />
<br />
这个配置文件使用了和 Arch Linux 安装光盘相同的目录设计,您可以在 [https://gitlab.archlinux.org/archlinux/archiso/-/tree/master/configs/releng/syslinux gitlab.archlinux.org] 上找到。[https://gitlab.archlinux.org/archlinux/archiso/-/raw/master/configs/releng/syslinux/splash.png?inline=false Arch Linux 启动背景图像] 也可以在那儿下载。请把图像复制到 {{ic|/boot/syslinux/splash.png}} 处。<br />
<br />
配置文件:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI vesamenu.c32<br />
DEFAULT arch<br />
PROMPT 0<br />
MENU TITLE Boot Menu<br />
MENU BACKGROUND splash.png<br />
TIMEOUT 50<br />
<br />
MENU WIDTH 78<br />
MENU MARGIN 4<br />
MENU ROWS 5<br />
MENU VSHIFT 10<br />
MENU TIMEOUTROW 13<br />
MENU TABMSGROW 11<br />
MENU CMDLINEROW 11<br />
MENU HELPMSGROW 16<br />
MENU HELPMSGENDROW 29<br />
<br />
# Refer to https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32<br />
<br />
MENU COLOR border 30;44 #40ffffff #a0000000 std<br />
MENU COLOR title 1;36;44 #9033ccff #a0000000 std<br />
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all<br />
MENU COLOR unsel 37;44 #50ffffff #a0000000 std<br />
MENU COLOR help 37;40 #c0ffffff #a0000000 std<br />
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std<br />
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std<br />
MENU COLOR msg07 37;40 #90ffffff #a0000000 std<br />
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std<br />
<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
从 Syslinux 3.84 版本开始,{{ic|vesamenu.c32}} 支持 {{ic|MENU RESOLUTION $WIDTH $HEIGHT}} 指令。<br />
使用这个指令,请将 {{ic|MENU RESOLUTION 1440 900}} 插入您的配置文件,这样可以将分辨率设置为 1440x900。<br />
但是,背景图像需要和分辨率完全一致,否则 Syslinux 将拒绝加载目录。<br />
<br />
如果想要将目录居中并调整分辨率,请调节 {{ic|MENU RESOLUTION}}、{{ic|MENU HSHIFT $N}} 和 {{ic|MENU VSHIFT $N}} 三个参数。将 {{ic|$N}} 设置为非负值会将其从左上角开始移动。默认值都是 {{ic|0}},因此目录会显示在显示器的左上角。反过来,如果这个数值为负,则会从反方向开始移动。(比如说 {{ic|VHSHIFT -4}}是从底部向上移动四行)。<br />
<br />
如果想要使目录居中,请添加或改为这些值:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
MENU RESOLUTION 800 600 # or whatever your screen resolution is<br />
MENU WIDTH 78 # width of the menu also required to bring the menu box to size<br />
MENU VSHIFT 10 # moves menu down<br />
MENU HSHIFT 10 # moves menu right<br />
</nowiki>}}<br />
<br />
VESA 标准通常最大允许 25 行 80 列,因此如果将其设置得过大可能会将目录移出屏幕外,可能需要使用救援介质才能改回来。<br />
<br />
=== 内核参数 ===<br />
<br />
在 {{ic|syslinux.cfg}} 中,[[kernel parameters (简体中文)|内核参数]]的设定使用 {{ic|APPEND}} 指令: <br />
对每一个 {{ic|LABEL}} 记录, [https://wiki.syslinux.org/wiki/index.php/Config#APPEND APPEND] 命令只能出现在一行内(就是说,把命令拆分成多行是无效的)。<br />
<br />
推荐将下列的设置同时作为回滚条目。<br />
<br />
'''最简单的情形''',{{ic|root}} 参数中的分区名称需要被修改。 将 {{ic|/dev/sda2}} 改为正确的启动分区。<br />
<br />
APPEND root=/dev/sda2<br />
<br />
'''如果您想使用 [[Persistent_block_device_naming_(简体中文)#by-uuid|UUID]]''',通过[[persistent block device naming (简体中文)|块设备持久化命名]]制定启动分区,请如下改变 {{ic|APPEND}} 行。这里我们用{{ic|1234}}来代表您需要修改的{{ic|UUID}}:<br />
<br />
APPEND root=UUID=''1234'' rw<br />
<br />
'''如果您想使用 [[dm-crypt (简体中文)|dm-crypt]] 加密设备''' 请如下改变 {{ic|APPEND}} 行。<br />
<br />
APPEND root=/dev/mapper/''name'' cryptdevice=/dev/sda2:''name'' rw<br />
<br />
'''如果您使用 [http://neil.brown.name/blog/mdadm mdadm] 构建的软 RAID''' , 请如下改变 {{ic|APPEND}} 行来适配您的 RAID 阵列。下面是一个适配 3 RAID-1 阵列、并将一个合适的分区设为根分区的示例。<br />
<br />
APPEND root=/dev/md1 rw md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4<br />
<br />
如果在内核设备节点模式下通过软 RAID 启动失败,下面是一个替代的更可靠的方法:使用分区标签:<br />
<br />
APPEND root=LABEL=''THEROOTPARTITIONLABEL'' rw<br />
<br />
'''如果从一个 [[btrfs (简体中文)|btrfs]] 子卷启动''',向 {{ic|APPEND}} 添加 {{ic|rootflags<nowiki>=</nowiki>subvol<nowiki>=</nowiki><root subvolume>}} 这一行。举个例子,我们称 {{ic|/dev/sda2}} 被挂载到一个叫 'ROOT' 的 btrfs 子卷。(例如 {{ic|mount -o noatime,subvol<nowiki>=</nowiki>ROOT /dev/sda2 /mnt}}),这时应该将 {{ic|APPEND}} 行改为这样:<br />
<br />
APPEND root=/dev/sda2 rw rootflags=subvol=ROOT<br />
<br />
如果此处错误,会收到 {{ic|ERROR: Root device mounted successfully, but /sbin/init does not exist.}}错误信息。<br />
<br />
=== 自动启动 ===<br />
<br />
If you do not want to see the Syslinux menu at all, use the 如果您根本不想看见 Syslinux 的目录,请参考[[#启动提示符]]一节,将 {{ic|PROMPT}} 设置为 {{ic|0}} 并将任何 {{ic|UI}} 的目录记录注释掉。将 {{ic|TIMEOUT}} 设置为 {{ic|0}} 也可以。确保您在 {{ic|syslinux.cfg}} 设置的有默认回滚 {{ic|DEFAULT}} 选项。按下 {{ic|Shift}} 或者 {{ic|Alt}},或者设置为按下 {{ic|Caps Lock}} 或 {{ic|Scroll Lock}}, 在启动时可以允许更多除了默认选项以外的操作。更多可以设置的替代键,请参考[https://wiki.syslinux.org/wiki/index.php/Directives/special_keys 上游的维基]。<br />
<br />
=== 安全措施 ===<br />
<br />
Syslinux 有两级启动加载器安全措施,可以在 {{ic|syslinux.cfg}} 中配置目录主密码,和分别针对每个条目的密码。使用<br />
<br />
MENU MASTER PASSWD passwd <br />
<br />
来配置目录主密码,在 {{ic|LABEL}} 的块中使用<br />
<br />
MENU PASSWD passwd <br />
<br />
来设定针对这个条目的密码。<br />
<br />
密码可以是明文,也可以是哈希值。更多信息,请参考[https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32 官方文档]。<br />
<br />
=== 链式加载 ===<br />
<br />
在 BIOS 上配置的 Syslinux 不能直接链式加载其他分区上的文件,但是 {{ic|chain.c32}} 模块可以启动其他启动分区上的卷启动记录程序(VBR),或是另一个磁盘上的 MBR 启动代码。<br />
<br />
==== 链式加载卷启动记录程序 ====<br />
<br />
如果您想要链式加载另一个操作系统(比如 Windows)或启动加载器,请将 {{ic|chain.c32}} 模块复制到 Syslinux 目录(还需要复制其他需要的 {{ic|lib*.c32}} 库模块。更多信息请参考前面几节),然后在配置文件中建立下面这一节:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND hd0 3<br />
...<br />
}}<br />
<br />
{{ic|hd0 3}} 是第一个 BIOS 控制驱动器上的第三个分区。请注意,驱动器计数从 0 开始,而分区计数则是从 1 开始。<br />
<br />
{{注意|对于引导 Windows,这样会跳过 Windows 自己的启动管理器环节 ({{ic|bootmgr}}),而一些系统更新([https://support.microsoft.com/kb/2883200 例子])会需要这个组件才能完成。如果更新需要,在这种情况下建议临时将 MBR 的启动分区标记设在 Windows 所在分区(可以使用 [[GParted (简体中文)|GParted]])并完成更新安装,再将启动分区标记改回 Syslinux 所在的分区。(可以使用 Windows自带的 [https://www.online-tech-tips.com/computer-tips/set-active-partition-vista-xp DiskPart])。}}<br />
<br />
==== 链式加载 MBR 启动代码 ====<br />
<br />
如果您不知道 BIOS 会怎么安排驱动器的编号,您也可以使用 MBR 标记,或者说 GPT 的文件系统标签。使用 MBR 标记请如下文所示设置:<br />
<br />
{{hc|# fdisk -l /dev/sdb|<nowiki><br />
Disk /dev/sdb: 128.0 GB, 128035676160 bytes <br />
255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors<br />
Units = sectors of 1 * 512 = 512 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0xf00f1fd3<br />
<br />
Device Boot Start End Blocks Id System<br />
/dev/sdb1 2048 4196351 2097152 7 HPFS/NTFS/exFAT<br />
/dev/sdb2 4196352 250066943 122935296 7 HPFS/NTFS/exFAT<br />
</nowiki>}}<br />
<br />
将 {{ic|/dev/sdb}} 改成您想要链式加载的驱动器。这里需要使用您磁盘的十六进制标识符,这个例子中是 {{ic|0xf00f1fd3}}。{{ic|syslinux.cfg}} 需要改成这个样子:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xf00f1fd3<br />
...<br />
}}<br />
<br />
更多关于链式启动的信息,请参阅 [https://wiki.syslinux.org/wiki/index.php/Comboot/chain.c32 Syslinux 维基]。<br />
<br />
==== 链式加载另一个启动加载器 ====<br />
<br />
如果您在同一个分区安装了 [[GRUB (简体中文)|GRUB]] 引导程序,您可以像这样来链式加载它:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2<br />
MENU LABEL Grub2<br />
COM32 chain.c32<br />
APPEND file=../grub/boot.img<br />
...<br />
</nowiki>}}<br />
<br />
作为替代,也可以将 [[GRUB (简体中文)|GRUB]] 作为一个 linux 内核来引导。只需要用 {{ic|lnxboot.img}} 来替代 {{ic|core.img}}。{{ic|lnxboot.img}} 文件是 {{ic|core/grub}} 提供的,您可以在 {{ic|/usr/lib/grub/i386-pc}} 处找到它。<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2lnx<br />
MENU LABEL Grub2 (lnxboot)<br />
LINUX ../grub/i386-pc/lnxboot.img<br />
INITRD ../grub/i386-pc/core.img<br />
...<br />
</nowiki>}}<br />
<br />
对于需要从 ISO 镜像引导的系统,这可能会被用到。<br />
<br />
=== 使用内存测试 memtest ===<br />
<br />
安装来自[[official repositories (简体中文)|官方软件源]]的 {{Pkg|memtest86+}}。<br />
<br />
用这个 {{ic|LABEL}} 片段来启动[[Wikipedia:Memtest86|内存测试]]:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL memtest<br />
MENU LABEL Memtest86+<br />
LINUX ../memtest86+/memtest.bin<br />
...<br />
}}<br />
<br />
{{注意|如果您使用 PXELINUX,请将 {{ic|memtest.bin}} 重命名为 {{ic|memtest}}。因为 PXELINUX 会把有 ''.bin'' 后缀名的文件当作启动扇区,这样就只会读取文件的前 2KB。}}<br />
<br />
=== 硬件检测工具 ===<br />
<br />
[https://wiki.syslinux.org/wiki/index.php/Hdt_(Hardware_Detection_Tool) 硬件检测工具(HDT)] 可以显示硬件信息。和前文所述的一样,{{ic|.c32}} 模块需要从 {{ic|/boot/syslinux/}} 中复制,其他需要的 {{ic|lib*.c32}} 库模块也需要一并复制。<br />
如果想要显示 PCI 总线信息请将 {{ic|/usr/share/hwdata/pci.ids}} 复制到 {{ic|/boot/syslinux/pci.ids}},并在您的配置文件中添加这些行:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL hdt<br />
MENU LABEL Hardware Info<br />
COM32 hdt.c32<br />
}}<br />
<br />
=== 重启和关机 ===<br />
<br />
{{注意|对于 Syslinux 6.03 版本,{{ic|poweroff.c32}} 只能在[[Wikipedia:Advanced Power Management|高级电源管理(APM)]]下使用,而不适配[[Wikipedia:Advanced Configuration and Power Interface|高级配置与电源接口(ACPI)]]。您可以参考[https://www.syslinux.org/archives/2012-March/017661.html acpioff: 一种关闭使用 ACPI 控制机器的 COM32 模块],这是一种可能的解决办法。}}<br />
<br />
使用下面的片段来重启或关机:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL reboot<br />
MENU LABEL Reboot<br />
COM32 reboot.c32<br />
<br />
LABEL poweroff<br />
MENU LABEL Power Off<br />
COM32 poweroff.c32<br />
}}<br />
<br />
=== 清空目录 ===<br />
<br />
当退出时清空屏幕,在配置文件中加入下面这一行:<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU CLEAR<br />
}}<br />
<br />
=== 键盘布局 ===<br />
<br />
如果您需要经常修改 Syslinux 启动提示符下的参数,您可能想要匹配您的键盘布局。这样您就可以在一个非美式英语键盘上方便地输入"="、"/"等字符了。<br />
<br />
{{注意|{{Pkg|syslinux}} 软件包下的 {{ic|keytab-lilo}} 是一个调用''键位加载''的 perl 脚本。}}<br />
<br />
生成一个适配的键盘布局映射表,(比如说,德语键盘),运行:<br />
<br />
# keytab-lilo /usr/share/kbd/keymaps/i386/qwerty/us.map.gz /usr/share/kbd/keymaps/i386/qwertz/de.map.gz > /boot/syslinux/de.ktl<br />
<br />
现在在 {{ic|syslinux.cfg}} 文件中加入<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
KBDMAP de.ktl<br />
}}<br />
<br />
更多细节,请参考 [https://wiki.syslinux.org/wiki/index.php/Directives/kbdmap Syslinux 维基]。<br />
<br />
=== 隐藏目录 ===<br />
<br />
在配置文件中使用<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU HIDDEN<br />
}}<br />
参数来隐藏目录并只显示超时倒计时。按下任意按键来显示目录。<br />
<br />
=== PXELINUX ===<br />
<br />
{{注意|对于 UEFI 设备,Syslinux 使用相同的二进制文件来从磁盘和网络启动。从 TFTP 或其他网络协议中启动要求 Syslinux 的网络启动。}}<br />
<br />
PXELINUX 和 {{Pkg|syslinux}} 软件包一起提供。<br />
<br />
对于一个 BIOS 客户机,将 {{ic|<nowiki>{l,}pxelinux.0</nowiki>}} 启动加载器复制到客户机的启动目录。对于 5.00 版本及以上的 Syslinux,还需要将同一个软件包中的 {{ic|ldlinux.c32}} 复制过去。<br />
<br />
# cp /usr/lib/syslinux/bios/pxelinux.0 "''TFTP_root''/boot/"<br />
# cp /usr/lib/syslinux/bios/ldlinux.c32 "''TFTP_root''/boot/"<br />
# mkdir "''TFTP_root''/boot/pxelinux.cfg"<br />
<br />
这时,我们同时也创建了 {{ic|pxelinux.cfg}} 目录。PXELINUX 会默认在这个目录中寻找配置文件。我们不想对每一个不同的主机 MAC 地址都作出单独的设置,我们需要创建 {{ic|default}} 作为默认配置。<br />
<br />
{{hc|''TFTP_root''/boot/pxelinux.cfg/default|<nowiki><br />
DEFAULT linux<br />
<br />
LABEL linux<br />
KERNEL vmlinuz-linux<br />
APPEND initrd=initramfs-linux.img quiet ip=:::::eth0:dhcp nfsroot=10.0.0.1:/arch<br />
</nowiki>}}<br />
<br />
如果您使用 NBD 网络存储启动,添加下面这行:<br />
<br />
{{bc|<nowiki>append ro initrd=initramfs-linux.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_port=10809 nbd_name=arch root=/dev/nbd0</nowiki>}}<br />
<br />
{{注意|您需要对应修改 {{ic|nbd_host}} 和/或 {{ic|nfsroot}} 来与您的网络配置(NFS/NBD 服务器的地址)相匹配。}}<br />
<br />
PXELINUX 的配置和 SYSLINUX 使用相同的语法。参考上游的文档来获取更多信息。<br />
<br />
内核与 initramfs 会通过 TFTP 传输,因此需要设置对 TFTP 根目录的相对路径。否则,根文件系统需要挂载在 NFS 挂载点上。<br />
<br />
若要加载 PXELINUX, 请将 {{ic|/etc/dhcpd.conf}} 文件中的 {{ic|filename "/grub/i386-pc/core.0";}} 替换为 {{ic|filename "/pxelinux.0"}} (或 {{ic|filename "/lpxelinux.0"}})。<br />
<br />
=== 通过 memdisk 启动 ISO9660 镜像 ===<br />
<br />
Syslinux 支持通过 [https://wiki.syslinux.org/wiki/index.php/MEMDISK memdisk] 模块从 ISO 镜像中启动。参考[[Multiboot USB drive#Using Syslinux and memdisk]]中的示例。<br />
<br />
=== 串行控制台 ===<br />
<br />
参考 [[Working with the serial console#Syslinux]]。<br />
<br />
=== 单次引导到另一个操作系统 ===<br />
<br />
可以临时改变 Syslinux 的行为,让其仅在下一次启动时引导进入另一个操作系统。下面的命令展示了怎样临时引导 {{ic|archfallback}}。<br />
<br />
# extlinux -o archfallback /boot/syslinux<br />
<br />
在下一次启动的过程中,上面制定的启动标签会在没有任何 Syslinux 启动提示符的情况下直接启动。默认的启动行为会在下一次重启的时候复原。<br />
<br />
== 常见问题 ==<br />
<br />
=== 无法加载 ldlinux ===<br />
<br />
启动时出现 "Failed to load ldlinux.c32" 错误提示可能会有很多原因。<br />
其中的一种可能是文件系统工具或者文件系统结构遭到了更改。<br />
<br />
{{警告|1=在 Syslinux 6.03 版本中,启动加载器可能不支持某些文件系统的部分功能。详情请参考 [https://wiki.syslinux.org/wiki/index.php/Filesystem]。}}<br />
<br />
{{注意|1=出现 {{ic|Failed to load ldlinux.c32}} 并不一定与文件系统出现问题直接相关:<br />
* 文件系统可能出现的其他症状,除了这条信息,还可能指出另一些与文件系统有关的问题。<br />
* 这条信息并不说明问题处在了文件系统。还有其他的一些问题会导致这条信息出现。<br />
}}<br />
<br />
您也可以参考 [https://wiki.syslinux.org/wiki/index.php/Common_Problems#Failed_to_load_ldlinux]。 (这一整页都和常见问题有关)。<br />
<br />
=== 使用 Syslinux 启动提示符 ===<br />
<br />
您可以输入(在您的 {{ic|syslinux.cfg}} 配置过的) {{ic|LABEL}} 的名称来启动对应的系统。如果您是按照上述的例子进行的配置,您只需要输入:<br />
<br />
boot: arch<br />
<br />
如果您收到了配置文件无法加载的错误信息,您可以向启动提示符中直接输入您的启动参数。比如说:<br />
<br />
boot: ../vmlinuz-linux root=/dev/sda2 rw initrd=../initramfs-linux.img<br />
<br />
如果在[[Ramdisk|ramfs]]中您没有 {{ic|boot:}} 的访问权限,并且您暂时无法启动内核,<br />
:1. 创建一个临时的目录,来加载您的根分区 (如果不存在的话):<br />
# mkdir -p /new_root<br />
:2. 将 {{ic|/}} 挂载到 {{ic|/new_root}} (我们假设 {{ic|/boot/}} 也在同一个分区,否则您需要将这些分区全部挂载):<br />
{{注意|如果 {{ic|/boot}} 在自己的 ext2 分区,Busybox 将无法挂载。}}<br />
# mount /dev/sd[a-z][1-9] /new_root<br />
<br />
:3. 使用 {{ic|vim}} 来重新将 {{ic|syslinux.cfg}} 编辑正确。保存文件。<br />
:4. 重启。<br />
<br />
=== 根分区文件系统检测失败 ===<br />
<br />
如果根分区被严重损坏(分区日志受损),在ramfs的应急 shell 中,加载根分区文件系统:<br />
<br />
# mount /dev/''root partition'' /new_root<br />
<br />
将二进制程序 tune2fs 从根分区中复制出来(这个不包含在 Syslinux 中)。<br />
<br />
# cp /new_root/sbin/tune2fs /sbin/<br />
<br />
按照下面的指示[[Fsck#ext2fs_:_no_external_journal|ext2fs: 日志损坏]]重建根分区日志。<br />
<br />
=== 没有找到默认回滚和界面设置 ===<br />
<br />
有些主板厂家对 USB 设备启动的支持会差一些。此时一个在通常的现代电脑上都能启动的 ext4 格式的 U 盘,一些要求内核与 initrd 文件必须存储在 FAT16 分区的电脑可能无法正常运作。为了避免这种老设备无法读取 {{ic|syslinux.cfg}} 而去加载 {{ic|ldlinux}},用 {{Pkg|dosfstools}} 工具建立一个 [[FAT16]] 的小分区(≤ 2 GB):<br />
<br />
# mkfs.fat -F 16 /dev/sda1<br />
<br />
再来安装配置 Syslinux。<br />
<br />
=== 找不到操作系统 ===<br />
<br />
* 确保您在[[#MBR 分区表]]上安装的是 {{ic|mbr.bin}},在[[#GPT 分区表]]上安装的是 {{ic|gptmbr.bin}}。如果安装错误,{{ic|mbr.bin}} 会显示 "Missing operating system" 错误信息,而 {{ic|gptmbr.bin}} 会显示 "Missing OS" 信息。<br />
* 检查包含 {{ic|/boot}} 的分区是否有可启动标记。<br />
* 检查第一个分区是否是从 1 扇区,而不是 63 扇区或 2048 扇区开始的。您可以使用 {{ic|fdisk -l}} 命令确认。如果是从 1 扇区开始的,您可以通过救援介质上的 {{ic|gparted}} 修改。如果您有另一个启动分区,您可以将 {{ic|/boot}} 备份:<br />
<br />
# cp -a /boot /boot.bak<br />
<br />
然后使用 Arch 安装磁盘启动。接下来,使用 {{ic|cfdisk}} 删掉 {{ic|/boot}} 分区,再重建它。现在这个分区应该从正确的 '''63''' 扇区开始。现在挂载您的分区,并按照[[installation guide (简体中文)|安装指南]]中写的那样 {{ic|chroot}} 进入待修复系统。使用以下指令恢复 {{ic|/boot}}。<br />
<br />
# cp -a /boot.bak/ /boot/<br />
<br />
检查 {{ic|/etc/fstab}} 是否正确:<br />
<br />
# syslinux-install_update -iam<br />
<br />
然后重启。<br />
<br />
如果您试图从用一个太新以至于 Syslinux 无法识别其元数据的工具创建的 md [[RAID_(简体中文)|RAID]]-1 阵列启动,您也会得到这个错误信息。在 2013 年 8 月 mdadm 会创建使用 1.2 版本的元数据的阵列,但是 Syslinux 不能够识别高于 1.0 版本的元数据。如果是因此而出错,您需要重建您的序列,并在使用 mdadm 时添加 {{ic|1=--metadata=1.0}} 参数。<br />
<br />
=== 启动了 Windows,Syslinux 被忽略掉了 ===<br />
<br />
'''解决办法:''' 确保包含 {{ic|/boot}} 的分区上有可启动标记。同时,确保 Windows 分区上没有这个标记。请参考上面的[[#链式加载卷启动记录程序]]部分。<br />
<br />
Syslinux 所在的 MBR 会找到第一个有可启动标记的活动分区。Windows 分区很可能最先被发现。如果您想要修改,您可以使用 Windows 或 MS-DOS 上的 {{ic|fdisk}}。<br />
<br />
=== 目录项失效 ===<br />
<br />
您选择了一个目录项,但是什么都没有发生,只是''"刷新"''了一下目录。这通常意味着您的 {{ic|syslinux.cfg}} 文件出了问题。按下 {{ic|Tab}} 键来修改您的启动参数。或者您也可以按下 {{ic|Esc}} 键,并输入您的启动项的 {{ic|LABEL}}。(比如说,''arch'')。另一种可能导致这个情况的原因可能是您没有安装内核。想个办法进入您的文件系统(比如说,用live CD),检查 {{ic|/mount/vmlinuz-linux}} 文件存在并且非空。如果是这里出错,请重新安装您的内核。<br />
<br />
=== 无法删除 ldlinux.sys ===<br />
<br />
{{ic|ldlinux.sys}} 文件设置了[[File_permissions_and_attributes#File_attributes|不可变属性]],禁止您删除或覆盖它。这样保证了除了重装 Syslinux,没有别的办法来修改这个文件。若要删除这个文件,请运行下面的指令:<br />
<br />
# chattr -i /boot/syslinux/ldlinux.sys<br />
# rm /boot/syslinux/ldlinux.sys<br />
<br />
=== vesamenu的左上角有白色块 ===<br />
<br />
问题:<br />
''从 linux-3.0 开始,模式设置驱动程序会在更改分辨率后尝试保留屏幕的当前内容(至少在我的 Intel 设备上,使用 Syslinux 的文本模式的情况下如此)。而 Syslinux 中的 vesamenu 模块会与这个特性冲突。(白色方框实际上是驱动程序试图保留 Syslinux 目录,但是驱动程序无法从 vesa 图形模式下捕获图片)。''<br />
<br />
如果您的分辨率是自定义的,而 {{ic|vesamenu}} 在很早就进行了模式设置,请尝试在 {{ic|syslinux.cfg}} 添加这一行来消除白色块:<br />
<br />
APPEND root=/dev/sda6 rw 5 '''vga=current''' quiet splash<br />
<br />
=== 当 Windows 安装在另一张磁盘上时,链式启动失效 ===<br />
<br />
如果 Windows 安装在在另一张磁盘上,您又不能通过链式启动来引导 Windows, 请尝试下列配置:<br />
<br />
{{bc|<br />
LABEL Windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xdfc1ba9e swap<br />
}}<br />
<br />
将 MBR 代码换成您的 Windows 驱动器的值(详见[[#链式加载|上文]]),并将 {{ic|swap}} 加入选项。<br />
<br />
=== 查看启动加载器日志 ===<br />
<br />
在一些情况下(比如启动加载器无法启动内核),我们很想得到启动的更多信息。Syslinux 会显示错误信息,但是文字一闪而过,看不清。为了保留日志信息,请禁用 {{ic|syslinux.cfg}} 中的 {{ic|UI menu}},并使用默认的命令提示符。这意味着<br />
<br />
* 不使用 {{ic|UI}} 命令<br />
* 不使用 {{ic|ONTIMEOUT}}<br />
* 不使用 {{ic|ONERROR}}<br />
* 不使用 {{ic|MENU CLEAR}}<br />
* 将 {{ic|TIMEOUT}} 设为更高的值<br />
* 使用 {{ic|PROMPT 1}}<br />
* 使用 {{ic|DEFAULT ''problematic_label''}}<br />
<br />
若要得到更详细的调试日志,To get more detailed debug log, 添加下面的 C 编译标志并[[Arch Build System (简体中文)|重新编译]] {{Pkg|syslinux}} 软件包:<br />
<br />
-DDEBUG_STDIO=1 -DCORE_DEBUG=1<br />
<br />
=== Btrfs 压缩 ===<br />
<br />
从压缩 Btrfs 文件系统启动不受支持。[https://wiki.syslinux.org/wiki/index.php/Syslinux_4_Changelog#Changes_in_4.02]<br />
会显示下列错误信息:<br />
<br />
btrfs: found compressed data, cannot continue!<br />
invalid or corrupt kernel image.<br />
<br />
=== 多设备 Btrfs ===<br />
<br />
从多设备 Btrfs 文件系统启动不受支持。[http://repo.or.cz/syslinux.git/blob/HEAD:/extlinux/main.c] (21-Jul-2016 版本,main.c 文件第 1246 行validate_device_btrfs()会对此进行检查)<br />
这个令人抓狂的问题会显示下列错误信息:(假设您将 Syslinux 装在 sda1):<br />
<br />
/boot/syslinux is device /dev/sda1<br />
extlinux: path /boot/syslinux doesn't match device /dev/sda1<br />
<br />
== 更多信息 ==<br />
<br />
* [https://www.syslinux.org 官方网站]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Syslinux_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626370
Syslinux (简体中文)
2020-07-22T14:57:16Z
<p>VictriD: Add some parts of translation. still translating...</p>
<hr />
<div>[[Category:Boot loaders (简体中文)]]<br />
[[en:Syslinux]]<br />
[[es:Syslinux]]<br />
[[fr:Syslinux]]<br />
[[it:Syslinux]]<br />
[[ja:Syslinux]]<br />
[[ru:Syslinux]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Arch Boot Process (简体中文)}}<br />
{{Related articles end}}<br />
{{translateme (简体中文)|这个版本正在由[[User:VictriD|VictriD]]进行维护。过去不完善的内容还在翻译中。}}<br />
{{TranslationStatus (简体中文)|Syslinux|2020-07-22|609036}}<br />
[[Wikipedia:SYSLINUX|Syslinux]]是一个启动加载器集合,可以从硬盘、光盘或通过 [[Preboot Execution Environment (简体中文)|PXE]] 的网络引导启动系统。支持的[[File systems (简体中文)|文件系统]]包括 [[Wikipedia:File Allocation Table|FAT]],[[Wikipedia:ext2|ext2]],[[ext3|ext3]],[[ext4 (简体中文)|ext4]] 和非压缩单设备 [[Btrfs]] 文件系统。<br />
<br />
{{警告|1=在 Syslinux 6.03 版本中,启动加载器可能不支持某些文件系统的部分功能。详情请参考 [https://wiki.syslinux.org/wiki/index.php/Filesystem]。}}<br />
<br />
<br />
{{注意|Syslinux 本身只能访问其所在分区上的数据,参阅 [[#链式加载]] 来了解如何绕过这个限制。}}<br />
<br />
== BIOS 系统 ==<br />
<br />
=== 启动流程 ===<br />
<br />
# '''第一阶段 - 第一部分''' - '''加载MBR''' 电脑启动时,BIOS 会先加载磁盘开始的 440 字节 [[Partitioning (简体中文)#Master Boot Record|MBR]] 启动代码 ({{ic|/usr/lib/syslinux/bios/mbr.bin}} 或 {{ic|/usr/lib/syslinux/bios/gptmbr.bin}})。<br />
# '''第一阶段 - 第二部分''' - '''寻找活动分区''' 第一阶段的MBR启动代码会寻找活动分区(设置了可启动标记的 MBR 分区),此处我们假设是 {{ic|/boot}} 分区。<br />
# '''第二阶段 - 第一部分''' - '''执行卷启动记录程序''' MBR 启动代码会执行上面找到的 {{ic|/boot}} 分区的卷启动记录程序(VBR,volume boot record)。对于 Syslinux 来说,VBR 就是由 {{ic|extlinux --install}} 命令创建的 {{ic|/boot/syslinux/ldlinux.sys}} 位于开始扇区的部分。请注意 {{ic|ldlinux.sys}} 和 {{ic|ldlinux.c32}} 是不同的。<br />
# '''第二阶段 - 第二部分''' - '''执行 {{ic|/boot/syslinux/ldlinux.sys}}''' VBR 会加载 {{ic|ldlinux.sys}} 剩余的部分。{{ic|ldlinux.sys}} 所处在的扇区位置不可更改,否则 syslinux 无法启动。{{注意|对于 Btrfs 来说,因为文件不断移动导致{{ic|ldlinux.sys}}扇区的位置不断变化,上述的方法将不会工作。因此在 Btrfs 中整个 {{ic|ldlinux.sys}} 文件会直接紧接着嵌入卷启动记录程序,而不是像其他文件系统那样保存在 {{ic|/boot/syslinux/ldlinux.sys}} 处。}}<br />
# '''第三阶段''' - '''加载 {{ic|/boot/syslinux/ldlinux.c32}}''' {{ic|ldlinux.sys}} 加载剩下的 syslinux 的核心部分 {{ic|/boot/syslinux/ldlinux.c32}}(这部分是因为文件大小限制无法放入 {{ic|ldlinux.sys}} 中的核心模块)。{{ic|ldlinux.c32}} 文件应该在每一个装有 syslinux 的实例中出现,并且与分区中的 {{ic|ldlinux.sys}} 版本相匹配,否则 Syslinux 将无法启动。更多资料请参阅 [https://bugzilla.syslinux.org/show_bug.cgi?id=7]。<br />
# '''第四阶段''' - '''查找并加载配置文件''' 当 syslinux 完全加载完毕,它将自动查找配置文件 {{ic|/boot/syslinux/syslinux.cfg}} (或某些情况下的 {{ic|/boot/syslinux/extlinux.conf}}),如果找到即加载。否则会进入 Syslinux {{ic|boot:}} 的命令提示符。这一步和剩下的'''非核心''' Syslinux 部分(除 {{ic|lib*.c32}} 和 {{ic|ldlinux.c32}}的{{ic|/boot/syslinux/*.c32}} 模块) 需要提供 {{ic|/boot/syslinux/lib*.c32}} (库)模块[https://wiki.syslinux.org/wiki/index.php/Common_Problems#ELF]。同样,{ic|lib*.c32}} 库模块和非核心的 {{ic|*.c32}} 模块需要与分区中的 {{ic|ldlinux.sys}} 版本相匹配。<br />
<br />
=== 在 BIOS 上安装===<br />
<br />
[[install (简体中文)|安装]]软件包 {{Pkg|syslinux}}。<br />
<br />
{{注意|<br />
* [[Partitioning_(简体中文)#GUID_分区表|GPT]] 支持需要安装软件包 {{Pkg|gptfdisk}}。请参考[[#自动安装]]部分。<br />
* [[FAT]] 支持需要安装软件包 {{Pkg|mtools}}。<br />
}}<br />
<br />
安装软件包并不是安装启动加载器。在安装完相关的包后,还需要安装启动加载器代码(到适合的位置,一般是 VBR)才能启动系统;接下来的部分对您的特定系统的特性提供了替代的指令。<br />
<br />
====自动安装====<br />
<br />
{{注意|脚本 {{ic|syslinux-install_update}} 是 Arch Linux 特有的,并不被 Syslinux 的上游提供/支持。请不要向上游,而是直接向 [https://bugs.archlinux.org/ Arch Bug Tracker] 提交关于这个特定脚本的 bug 报告。}}<br />
<br />
<br />
* 执行完 {{ic|syslinux-install_update}} 脚本后,请不要忘记按照[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}。<br />
<br />
{{警告|{{ic|syslinux-install_update}} 脚本很有可能会设置一个与您的特定系统不同的默认根分区。将 {{ic|/boot/syslinux/syslinux.cfg}} 文件中的根分区修改正确对于成功启动是至关重要的。参见[[#内核参数]]。}}<br />
<br />
syslinux-install_update脚本将自动安装启动加载器代码(一般到 VBR)、复制 {{ic|*.c32}} 模块到{{ic|/boot/syslinux}}、设置分区启动标记并将启动代码安装到 MBR。它可以处理软 RAID、[Partitioning (简体中文)#Master Boot Record|MBR]] 和 [Partitioning_(简体中文)#GUID_分区表|GPT]] 磁盘。<br />
<br />
如果您使用分开的启动分区,请用 {{ic|lsblk}} 命令确保它们都已被挂载。如果您没有看到 {{ic|/boot}} 挂载点,请在继续之前将其挂载。<br />
<br />
* {{ic|syslinux-install_update}} 的参数:{{ic|-i}} (安装文件),{{ic|-a}} (将活动分区标上启动标记),{{ic|-m}} (安装 MBR 启动代码): 如果 {{bc|# syslinux-install_update -i -a -m}} 命令失败并报错''Syslinux BIOS install failed'',问题可能出在 {{ic|extlinux}} 可执行文件不能找到包含 {{ic|/boot}} 的分区:<br />
<br />
{{hc|# extlinux --install /boot/syslinux/|<br />
extlinux: cannot find device for path /boot/syslinux<br />
extlinux: cannot open device (null)<br />
}}<br />
<br />
例如,这可能发生在从 [[LILO]] 升级时,后者在引导当前的自定义内核时,将诸如 {{ic|1=root=/dev/sda1}} 的内核命令行参数转写成了等效的数字参数 {{ic|1=root=801}}。这可以从 {{ic|/proc/cmdline}} 和 {{ic|mount}} 等命令的输出确认。 可以通过向 {{ic|extlinux}} 手动指定 {{ic|1=--device=/dev/sda1}} 来解决下文手动安装时的问题,或者先重启到现有的Arch Linux内核,这样会使用 initramfs 来避免此问题。<br />
<br />
{{注意|<br />
* 如果您现在重新启动系统,则会出现 Syslinux 的提示符。如果想要实现系统自动引导或显示引导目录,您需要创建(或编辑)配置文件。<br />
* 如果您位于另一个根目录(例如,从安装磁盘上),则可以通过 chroot,重定向后安装:<br />
# syslinux-install_update -i -a -m -c /mnt<br />
}}<br />
<br />
*现在您需要按照接下来的[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}文件。<br />
<br />
==== 手动安装 ====<br />
<br />
{{注意|如果您尝试使用Live CD拯救已安装的系统,请确保在执行这些命令之前已经 [[chroot]] 到目标系统。否则您必须在所有文件(除了{{ic|/dev/}})路径之前添加挂载点。}}<br />
<br />
您计划安装Syslinux的启动分区必须包含 FAT,ext2,ext3,ext4 或 Btrfs 文件系统。您不必把它安装在文件系统的根目录上,比如把磁盘 {{ic|/dev/sda1}} 挂在到 {{ic|/boot}}。 例如,可以在{{ic|syslinux}}子目录里安装 Syslinux:<br />
<br />
# mkdir /boot/syslinux<br />
<br />
如果您希望使用除基本引导提示之外的任何目录或配置,请把 {{ic|/usr/lib/syslinux/bios/}} 里的所有的 {{ic|.c32}} 文件复制到 {{ic|/boot/syslinux/}} 中。请不要使用符号链接。<br />
<br />
# cp /usr/lib/syslinux/bios/*.c32 /boot/syslinux/ <br />
<br />
现在安装启动加载器。对 挂载后的 FAT,ext2/3/4,或 btrfs 启动分区使用 ''extlinux'' 安装:<br />
<br />
# extlinux --install /boot/syslinux<br />
<br />
替代的,对一个'''没有被挂载'''的 FAT 启动分区使用''syslinux'' 安装:<br />
<br />
# syslinux --directory syslinux --install /dev/sda1<br />
<br />
在此之后,继续安装适用于对应分区表的 Syslinux 引导代码:<br />
* [[#MBR 分区表]]上会安装 {{ic|mbr.bin}}<br />
* [[#GPT 分区表]]上会安装 {{ic|gptmbr.bin}}<br />
这些会在下面的内容中详细描述。<br />
<br />
更多信息,请参考 [[Partitioning (简体中文)#Master Boot Record|MBR 分区表]]。<br />
{{提示|如果您不确定您的分区表类型,可以通过 {{ic|blkid -s PTTYPE -o value /dev/sda}} 来检查。}}<br />
{{注意|对于一个无盘安装实例,不需要向MBR中安装Syslinux 引导代码。您可以跳过这一段,直接跳到[[#配置]]部分。更多信息请参考[https://unix.stackexchange.com/questions/103501/boot-partiotionless-disk-with-syslinux]。}}<br />
<br />
===== MBR 分区表 =====<br />
<br />
对于一个安装在 [[Partitioning (简体中文)#Master Boot Record|MBR 分区表]]上的实例,请确保您的启动分区已经被标记为活动分区(有启动标志)。您可以用 [[fdisk (简体中文)|fdisk]]、[[parted (简体中文)|parted]] 等工具确认。它应该看起来像这个样子:<br />
<br />
{{hc|# fdisk -l /dev/sda|<br />
[...]<br />
Device Boot Start End Blocks Id System<br />
/dev/sda1 * 2048 104447 51200 83 Linux<br />
/dev/sda2 104448 625142447 312519000 83 Linux<br />
}}<br />
<br />
安装 MBR 启动代码:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sda<br />
<br />
Syslinux 提供一个替代的分区表 {{ic|altmbr.bin}}。这个分区表''不会''扫描可启动分区,而是从 MBR 的最后一个字节中的值读取用于启动的分区。下面的操作会将这个分区表写入。<br />
<br />
# printf '\x5' | cat /usr/lib/syslinux/bios/altmbr.bin - | dd bs=440 count=1 iflag=fullblock of=/dev/sda<br />
<br />
在这个例子中,一个数值为5(十六进制的)的单个字节会被添加到 {{ic|altmbr.bin}} 的内容后,并向 {{ic|sda}} 的 MBR 分区表中写入440字节的内容。Syslinux 会被安装到磁盘的第一个逻辑分区({{ic|/dev/sda5}})。<br />
<br />
===== GPT 分区表 =====<br />
<br />
对于一个安装在 [[Partitioning (简体中文)#GUID 分区表|GPT 分区表]]上的实例, 请确保您的启动分区 {{ic|/boot}} 被设置上了 2 号属性"传统BIOS可启动"(legacy BIOS bootable)。[[Parted (简体中文)|Parted]] 可以使用"legacy_boot"参数实现,而 [[GPT fdisk (简体中文)|sgdisk]]则需要输入下面的命令:<br />
<br />
# sgdisk /dev/sda --attributes=1:set:2<br />
<br />
这会在 {{ic|/dev/sda}} 的第一个分区设置"传统BIOS可启动"属性。检查命令:<br />
<br />
{{hc|1=# sgdisk /dev/sda --attributes=1:show|2=<br />
1:2:1 (legacy BIOS bootable)<br />
}}<br />
<br />
安装 MBR 启动代码:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sda<br />
<br />
== UEFI 系统 ==<br />
<br />
{{注意|<br />
* {{ic|efi64}} 对应 x86_64 UEFI 系统。如果是 IA32(32位) EFI 您需要在下面的命令中将 {{ic|efi64}} 替换为 {{ic|efi32}}。<br />
* 因为 Syslinux(目前)没有办法访问它自己所在以外的分区,因此内核与 initramfs 文件需要位于 Syslinux 同在的 [[EFI system partition (简体中文)|EFI 系统分区]](也叫ESP)。因此,这里推荐将ESP分区挂载在 {{ic|/boot}}。<br />
* {{ic|/usr/bin/syslinux-install_update}} 自动安装脚本不支持 UEFI 安装。<br />
* {{ic|syslinux.cfg}} 文件的配置与 BIOS 的配置方法相同。<br />
}}<br />
<br />
=== UEFI Syslinux 的局限性 ===<br />
<br />
* UEFI Syslinux 程序 {{ic|syslinux.efi}} 不能通过 {{ic|sbsign}}({{Pkg|sbsigntools}} 软件包提供)签名,导致无法进行 UEFI 安全启动。查看关于此的 Bug 报告:[https://bugzilla.syslinux.org/show_bug.cgi?id=8]<br />
* 在 UEFI Syslinux 目录中编辑内核参数时使用 TAB 缩进会导致显示错误(重叠显示)。查看关于此的 Bug 报告:[https://bugzilla.syslinux.org/show_bug.cgi?id=9]<br />
* UEFI Syslinux 程序不支持链式加载其他如 {{ic|UEFI Shell}}、{{ic|Windows Boot Manager}} 等 EFI 应用程序。查看关于此的增强请求:[https://bugzilla.syslinux.org/show_bug.cgi?id=17]<br />
* 在某些情况下,UEFI Syslinux 可能不能在通过 [[QEMU (简体中文)|QEMU]]/OVMF、[[VirtualBox (简体中文)|VirtualBox]] 和 [[VMware (简体中文)|VMware]] 的一些特定产品或版本构建的虚拟机的中启动。一些如 DUET 等 UEFI 模拟环境中也是如此。Syslinux 的贡献者已经确认,在 VMware Workstation 10.0.2 版本、Syslinux 6.02 版本以后不会发生这个问题。查看关于此的 Bug 报告:[https://bugzilla.syslinux.org/show_bug.cgi?id=21], [https://bugzilla.syslinux.org/show_bug.cgi?id=23] 和 [https://bugzilla.syslinux.org/show_bug.cgi?id=72]<br />
* Memdisk 不被 UEFI 支持。查看关于此的增强请求:[https://bugzilla.syslinux.org/show_bug.cgi?id=30]<br />
<br />
=== 在 UEFI 上安装 ===<br />
<br />
{{注意|在与 UEFI 有关的命令中,{{ic|''esp''}} 指的是 [[EFI system partition (简体中文)|EFI 系统分区]](ESP)所挂载的位置。}}<br />
<br />
* 安装来自[[official repositories (简体中文)|官方软件源]]的 {{Pkg|syslinux}} 和 {{Pkg|efibootmgr}}。然后按如下步骤安装 Syslinux 到 EFI 系统分区(ESP):<br />
* 复制 Syslinux 文件到 EFI 系统分区:<br />
<br />
# mkdir -p ''esp''/EFI/syslinux<br />
# cp -r /usr/lib/syslinux/efi64/* ''esp''/EFI/syslinux<br />
<br />
* 使用 [[Unified Extensible Firmware Interface (简体中文)#efibootmgr|efibootmgr]] 安装引导记录:<br />
<br />
# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/syslinux/syslinux.efi --label "Syslinux" --verbose<br />
<br />
其中,{{ic|/dev/sdXY}}是包含启动加载器的分区。<br />
<br />
* 按照[[#配置]]创建或编辑{{ic|''esp''/EFI/syslinux/syslinux.cfg}}文件。<br />
<br />
{{注意|<br />
* UEFI 的配置文件是 {{ic|''esp''/EFI/syslinux/syslinux.cfg}} 而非 {{ic|/boot/syslinux/syslinux.cfg}}。在 {{ic|/boot/syslinux/}} 中的文件是 BIOS 启动专用的,和 UEFI Syslinux 无关。<br />
在BIOS模式下启动时,{{Pkg | efibootmgr}} 将无法为 {{ic | /EFI/syslinux/syslinux.efi}} 设置 EFI 存储于非易失性存储器(nvram)的条目。欲实现此,请将资源放在默认 EFI 位置:{{ic|''esp''/EFI/syslinux/* -> ''esp''/EFI/BOOT/*}} 和 {{ic|''esp''/EFI/syslinux/syslinux.efi -> ''esp''/EFI/BOOT/bootx64.efi}} 处。<br />
}}<br />
<br />
<br />
== 配置 ==<br />
<br />
Syslinux 的配置文件 {{ic|syslinux.cfg}} 必须和 Syslinux 放在同一个目录下。在我们的示例中,BIOS 系统放在 {{ic|/boot/syslinux/}} 处,UEFI 系统放在 {{ic|''esp''/EFI/syslinux/}} 处。<br />
<br />
启动器将自动寻找 {{ic|syslinux.cfg}} (优先)和 {{ic|extlinux.conf}}这两个配置文件之一。<br />
<br />
{{提示|<br />
* 除了 {{ic|LINUX}},您也可以使用 {{ic|KERNEL}} 关键字。{{ic|KERNEL}} 关键字会试图去检测内核文件的类型,而 {{ic|LINUX}} 总是会将其按照 Linux 内核处理。 <br />
* {{ic|TIMEOUT}} 的单位是 '''0.1 秒''',也就是说 50 代表 5 秒。<br />
}}<br />
<br />
=== 示例 ===<br />
<br />
{{注意|<br />
* 示例这一节中的所有配置文件都需要编辑并设定合适的内核参数。参见[[#内核参数]]节。<br />
* 请一定仔细检查路径。这个实例可能不能够直接照搬到您的安装实例,尤其是 UEFI 系统。<br />
* 接下来的例子假设内核与 initrd 文件都位于 {{ic|syslinux.cfg}} 的父目录。(准确的说,是工作目录的父目录)。<br />
}}<br />
<br />
==== 启动提示符 ====<br />
<br />
这是一个非常简单的配置文件,会显示 {{ic|boot:}} 提示符并在 5 秒后自动启动。如果您不希望看见提示符,请将 {{ic|PROMPT}} 设置为 {{ic|0}}。<br />
<br />
配置文件:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
PROMPT 1<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
==== 文本启动目录 ====<br />
<br />
Syslinux 允许您使用一个文本启动目录来选择。要做到这一点,请将 {{ic|menu}} 和 {{ic|libutil}} 模块复制到您的 Syslinux 目录:<br />
<br />
# cp /usr/lib/syslinux/bios/{menu,libutil}.c32 /boot/syslinux/<br />
<br />
在 5.00 版本之后,其他的 {{ic|lib*.c32}} 库模块也会频繁地被调用。参考 [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies Syslinux 维基]来查看依赖树。<br />
<br />
配置文件:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI menu.c32<br />
PROMPT 0<br />
<br />
MENU TITLE Boot Menu<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
更多关于启动目录的信息,请参考 [https://wiki.syslinux.org/wiki/index.php/Menu Syslinux 维基]。<br />
<br />
==== 图形化启动目录 ====<br />
<br />
Syslinux 允许您使用一个文本启动目录来选择。要做到这一点,请将 {{ic|vesamenu}} COM32 模块复制到您的 Syslinux 目录:<br />
<br />
# cp /usr/lib/syslinux/bios/vesamenu.c32 /boot/syslinux/<br />
<br />
在 5.00 版本之后,其他的 {{ic|lib*.c32}} 库模块也会频繁地被调用。参考 [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies Syslinux 维基]来查看依赖树。<br />
<br />
{{注意| 如果您使用的是 [[UEFI (简体中文)|UEFI]] 系统,请一定从 {{ic|/usr/lib/syslinux/efi64/}} 目录(或者 IA32 (32位) EFI 的 {{ic|efi32}}) 中复制。否则电脑会黑屏。如果出现这个情况,请从 Live CD 中启动并使用 [[chroot (简体中文)|chroot]] 来进行正确的修改。}}<br />
<br />
这个配置文件使用了和 Arch Linux 安装光盘相同的目录设计,您可以在 [https://projects.archlinux.org/archiso.git/tree/configs/releng/syslinux projects.archlinux.org] 上找到。[https://projects.archlinux.org/archiso.git/plain/configs/releng/syslinux/splash.png Arch Linux 启动背景图像] 也可以在那儿下载。请把图像复制到 {{ic|/boot/syslinux/splash.png}} 处。<br />
<br />
配置文件:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI vesamenu.c32<br />
DEFAULT arch<br />
PROMPT 0<br />
MENU TITLE Boot Menu<br />
MENU BACKGROUND splash.png<br />
TIMEOUT 50<br />
<br />
MENU WIDTH 78<br />
MENU MARGIN 4<br />
MENU ROWS 5<br />
MENU VSHIFT 10<br />
MENU TIMEOUTROW 13<br />
MENU TABMSGROW 11<br />
MENU CMDLINEROW 11<br />
MENU HELPMSGROW 16<br />
MENU HELPMSGENDROW 29<br />
<br />
# Refer to https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32<br />
<br />
MENU COLOR border 30;44 #40ffffff #a0000000 std<br />
MENU COLOR title 1;36;44 #9033ccff #a0000000 std<br />
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all<br />
MENU COLOR unsel 37;44 #50ffffff #a0000000 std<br />
MENU COLOR help 37;40 #c0ffffff #a0000000 std<br />
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std<br />
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std<br />
MENU COLOR msg07 37;40 #90ffffff #a0000000 std<br />
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std<br />
<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
从 Syslinux 3.84 版本开始,{{ic|vesamenu.c32}} 支持 {{ic|MENU RESOLUTION $WIDTH $HEIGHT}} 指令。<br />
使用这个指令,请将 {{ic|MENU RESOLUTION 1440 900}} 插入您的配置文件,这样可以将分辨率设置为 1440x900。<br />
但是,背景图像需要和分辨率完全一致,否则 Syslinux 将拒绝加载目录。<br />
<br />
如果想要将目录居中并调整分辨率,请调节 {{ic|MENU RESOLUTION}}、{{ic|MENU HSHIFT $N}} 和 {{ic|MENU VSHIFT $N}} 三个参数。将 {{ic|$N}} 设置为非负值会将其从左上角开始移动。默认值都是 {{ic|0}},因此目录会显示在显示器的左上角。反过来,如果这个数值为负,则会从反方向开始移动。(比如说 {{ic|VHSHIFT -4}}是从底部向上移动四行)。<br />
<br />
如果想要使目录居中,请添加或改为这些值:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
MENU RESOLUTION 800 600 # or whatever your screen resolution is<br />
MENU WIDTH 78 # width of the menu also required to bring the menu box to size<br />
MENU VSHIFT 10 # moves menu down<br />
MENU HSHIFT 10 # moves menu right<br />
</nowiki>}}<br />
<br />
VESA 标准通常最大允许 25 行 80 列,因此如果将其设置得过大可能会将目录移出屏幕外,可能需要使用救援介质才能改回来。<br />
<br />
=== 内核参数 ===<br />
<br />
在 {{ic|syslinux.cfg}} 中,[[kernel parameters (简体中文)|内核参数]]的设定使用 {{ic|APPEND}} 指令: <br />
对每一个 {{ic|LABEL}} 记录, [https://wiki.syslinux.org/wiki/index.php/Config#APPEND APPEND] 命令只能出现在一行内(就是说,把命令拆分成多行是无效的)。<br />
<br />
推荐将下列的设置同时作为回滚条目。<br />
<br />
'''最简单的情形''',{{ic|root}} 参数中的分区名称需要被修改。 将 {{ic|/dev/sda2}} 改为正确的启动分区。<br />
<br />
APPEND root=/dev/sda2<br />
<br />
'''如果您想使用 [[Persistent_block_device_naming_(简体中文)#by-uuid|UUID]]''',通过[[persistent block device naming (简体中文)|块设备持久化命名]]制定启动分区,请如下改变 {{ic|APPEND}} 行。这里我们用{{ic|1234}}来代表您需要修改的{{ic|UUID}}:<br />
<br />
APPEND root=UUID=''1234'' rw<br />
<br />
'''如果您想使用 [[dm-crypt (简体中文)|dm-crypt]] 加密设备''' 请如下改变 {{ic|APPEND}} 行。<br />
<br />
APPEND root=/dev/mapper/''name'' cryptdevice=/dev/sda2:''name'' rw<br />
<br />
'''如果您使用 [http://neil.brown.name/blog/mdadm mdadm] 构建的软 RAID''' , 请如下改变 {{ic|APPEND}} 行来适配您的 RAID 阵列。下面是一个适配 3 RAID-1 阵列、并将一个合适的分区设为根分区的示例。<br />
<br />
APPEND root=/dev/md1 rw md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4<br />
<br />
如果在内核设备节点模式下通过软 RAID 启动失败,下面是一个替代的更可靠的方法:使用分区标签:<br />
<br />
APPEND root=LABEL=''THEROOTPARTITIONLABEL'' rw<br />
<br />
'''如果从一个 [[btrfs (简体中文)|btrfs]] 子卷启动''',向 {{ic|APPEND}} 添加 {{ic|rootflags<nowiki>=</nowiki>subvol<nowiki>=</nowiki><root subvolume>}} 这一行。举个例子,我们称 {{ic|/dev/sda2}} 被挂载到一个叫 'ROOT' 的 btrfs 子卷。(例如 {{ic|mount -o noatime,subvol<nowiki>=</nowiki>ROOT /dev/sda2 /mnt}}),这时应该将 {{ic|APPEND}} 行改为这样:<br />
<br />
APPEND root=/dev/sda2 rw rootflags=subvol=ROOT<br />
<br />
如果此处错误,会收到 {{ic|ERROR: Root device mounted successfully, but /sbin/init does not exist.}}错误信息。<br />
<br />
=== 自动启动 ===<br />
<br />
If you do not want to see the Syslinux menu at all, use the 如果您根本不想看见 Syslinux 的目录,请参考[[#启动提示符]]一节,将 {{ic|PROMPT}} 设置为 {{ic|0}} 并将任何 {{ic|UI}} 的目录记录注释掉。将 {{ic|TIMEOUT}} 设置为 {{ic|0}} 也可以。确保您在 {{ic|syslinux.cfg}} 设置的有默认回滚 {{ic|DEFAULT}} 选项。按下 {{ic|Shift}} 或者 {{ic|Alt}},或者设置为按下 {{ic|Caps Lock}} 或 {{ic|Scroll Lock}}, 在启动时可以允许更多除了默认选项以外的操作。更多可以设置的替代键,请参考[https://wiki.syslinux.org/wiki/index.php/Directives/special_keys 上游的维基]。<br />
<br />
=== 安全措施 ===<br />
<br />
Syslinux 有两级启动加载器安全措施,可以在 {{ic|syslinux.cfg}} 中配置目录主密码,和分别针对每个条目的密码。使用<br />
<br />
MENU MASTER PASSWD passwd <br />
<br />
来配置目录主密码,在 {{ic|LABEL}} 的块中使用<br />
<br />
MENU PASSWD passwd <br />
<br />
来设定针对这个条目的密码。<br />
<br />
密码可以是明文,也可以是哈希值。更多信息,请参考[https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32 官方文档]。<br />
<br />
=== 链式加载 ===<br />
<br />
在 BIOS 上配置的 Syslinux 不能直接链式加载其他分区上的文件,但是 {{ic|chain.c32}} 模块可以启动其他启动分区上的卷启动记录程序(VBR),或是另一个磁盘上的 MBR 启动代码。<br />
<br />
==== 链式加载卷启动记录程序 ====<br />
<br />
如果您想要链式加载另一个操作系统(比如 Windows)或启动加载器,请将 {{ic|chain.c32}} 模块复制到 Syslinux 目录(还需要复制其他需要的 {{ic|lib*.c32}} 库模块。更多信息请参考前面几节),然后在配置文件中建立下面这一节:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND hd0 3<br />
...<br />
}}<br />
<br />
{{ic|hd0 3}} 是第一个 BIOS 控制驱动器上的第三个分区。请注意,驱动器计数从 0 开始,而分区计数则是从 1 开始。<br />
<br />
{{注意|对于引导 Windows,这样会跳过 Windows 自己的启动管理器环节 ({{ic|bootmgr}}),而一些系统更新([https://support.microsoft.com/kb/2883200 例子])会需要这个组件才能完成。如果更新需要,在这种情况下建议临时将 MBR 的启动分区标记设在 Windows 所在分区(可以使用 [[GParted (简体中文)|GParted]])并完成更新安装,再将启动分区标记改回 Syslinux 所在的分区。(可以使用 Windows自带的 [https://www.online-tech-tips.com/computer-tips/set-active-partition-vista-xp DiskPart])。}}<br />
<br />
==== 链式加载 MBR 启动代码 ====<br />
<br />
如果您不知道 BIOS 会怎么安排驱动器的编号,您也可以使用 MBR 标记,或者说 GPT 的文件系统标签。使用 MBR 标记请如下文所示设置:<br />
<br />
{{hc|# fdisk -l /dev/sdb|<nowiki><br />
Disk /dev/sdb: 128.0 GB, 128035676160 bytes <br />
255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors<br />
Units = sectors of 1 * 512 = 512 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0xf00f1fd3<br />
<br />
Device Boot Start End Blocks Id System<br />
/dev/sdb1 2048 4196351 2097152 7 HPFS/NTFS/exFAT<br />
/dev/sdb2 4196352 250066943 122935296 7 HPFS/NTFS/exFAT<br />
</nowiki>}}<br />
<br />
将 {{ic|/dev/sdb}} 改成您想要链式加载的驱动器。这里需要使用您磁盘的十六进制标识符,这个例子中是 {{ic|0xf00f1fd3}}。{{ic|syslinux.cfg}} 需要改成这个样子:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xf00f1fd3<br />
...<br />
}}<br />
<br />
更多关于链式启动的信息,请参阅 [https://wiki.syslinux.org/wiki/index.php/Comboot/chain.c32 Syslinux 维基]。<br />
<br />
==== 链式加载另一个启动加载器 ====<br />
<br />
如果您在同一个分区安装了 [[GRUB (简体中文)|GRUB]] 引导程序,您可以像这样来链式加载它:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2<br />
MENU LABEL Grub2<br />
COM32 chain.c32<br />
APPEND file=../grub/boot.img<br />
...<br />
</nowiki>}}<br />
<br />
作为替代,也可以将 [[GRUB (简体中文)|GRUB]] 作为一个 linux 内核来引导。只需要用 {{ic|lnxboot.img}} 来替代 {{ic|core.img}}。{{ic|lnxboot.img}} 文件是 {{ic|core/grub}} 提供的,您可以在 {{ic|/usr/lib/grub/i386-pc}} 处找到它。<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2lnx<br />
MENU LABEL Grub2 (lnxboot)<br />
LINUX ../grub/i386-pc/lnxboot.img<br />
INITRD ../grub/i386-pc/core.img<br />
...<br />
</nowiki>}}<br />
<br />
对于需要从 ISO 镜像引导的系统,这可能会被用到。<br />
<br />
=== 使用内存测试 memtest ===<br />
<br />
安装来自[[official repositories (简体中文)|官方软件源]]的 {{Pkg|memtest86+}}。<br />
<br />
用这个 {{ic|LABEL}} 片段来启动[[Wikipedia:Memtest86|内存测试]]:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL memtest<br />
MENU LABEL Memtest86+<br />
LINUX ../memtest86+/memtest.bin<br />
...<br />
}}<br />
<br />
{{注意|如果您使用 PXELINUX,请将 {{ic|memtest.bin}} 重命名为 {{ic|memtest}}。因为 PXELINUX 会把有 ''.bin'' 后缀名的文件当作启动扇区,这样就只会读取文件的前 2KB。}}<br />
<br />
=== 硬件检测工具 ===<br />
<br />
[https://wiki.syslinux.org/wiki/index.php/Hdt_(Hardware_Detection_Tool) 硬件检测工具(HDT)] 可以显示硬件信息。和前文所述的一样,{{ic|.c32}} 模块需要从 {{ic|/boot/syslinux/}} 中复制,其他需要的 {{ic|lib*.c32}} 库模块也需要一并复制。<br />
如果想要显示 PCI 总线信息请将 {{ic|/usr/share/hwdata/pci.ids}} 复制到 {{ic|/boot/syslinux/pci.ids}},并在您的配置文件中添加这些行:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL hdt<br />
MENU LABEL Hardware Info<br />
COM32 hdt.c32<br />
}}<br />
<br />
=== 重启和关机 ===<br />
<br />
{{注意|对于 Syslinux 6.03 版本,{{ic|poweroff.c32}} 只能在[[Wikipedia:Advanced Power Management|高级电源管理(APM)]]下使用,而不适配[[Wikipedia:Advanced Configuration and Power Interface|高级配置与电源接口(ACPI)]]。您可以参考[https://www.syslinux.org/archives/2012-March/017661.html acpioff: 一种关闭使用 ACPI 控制机器的 COM32 模块],这是一种可能的解决办法。}}<br />
<br />
使用下面的片段来重启或关机:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL reboot<br />
MENU LABEL Reboot<br />
COM32 reboot.c32<br />
<br />
LABEL poweroff<br />
MENU LABEL Power Off<br />
COM32 poweroff.c32<br />
}}<br />
<br />
=== 清空目录 ===<br />
<br />
当退出时清空屏幕,在配置文件中加入下面这一行:<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU CLEAR<br />
}}<br />
<br />
=== 键盘布局 ===<br />
<br />
如果您需要经常修改 Syslinux 启动提示符下的参数,您可能想要匹配您的键盘布局。这样您就可以在一个非美式英语键盘上方便地输入"="、"/"等字符了。<br />
<br />
{{注意|{{Pkg|syslinux}} 软件包下的 {{ic|keytab-lilo}} 是一个调用''键位加载''的 perl 脚本。}}<br />
<br />
生成一个适配的键盘布局映射表,(比如说,德语键盘),运行:<br />
<br />
# keytab-lilo /usr/share/kbd/keymaps/i386/qwerty/us.map.gz /usr/share/kbd/keymaps/i386/qwertz/de.map.gz > /boot/syslinux/de.ktl<br />
<br />
现在在 {{ic|syslinux.cfg}} 文件中加入<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
KBDMAP de.ktl<br />
}}<br />
<br />
更多细节,请参考 [https://wiki.syslinux.org/wiki/index.php/Directives/kbdmap Syslinux 维基]。<br />
<br />
=== 隐藏目录 ===<br />
<br />
在配置文件中使用<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU HIDDEN<br />
}}<br />
参数来隐藏目录并只显示超时倒计时。按下任意按键来显示目录。<br />
<br />
=== PXELINUX ===<br />
<br />
{{注意|对于 UEFI 设备,Syslinux 使用相同的二进制文件来从磁盘和网络启动。从 TFTP 或其他网络协议中启动要求 Syslinux 的网络启动。}}<br />
<br />
PXELINUX 和 {{Pkg|syslinux}} 软件包一起提供。<br />
<br />
对于一个 BIOS 客户机,将 {{ic|<nowiki>{l,}pxelinux.0</nowiki>}} 启动加载器复制到客户机的启动目录。对于 5.00 版本及以上的 Syslinux,还需要将同一个软件包中的 {{ic|ldlinux.c32}} 复制过去。<br />
<br />
# cp /usr/lib/syslinux/bios/pxelinux.0 "''TFTP_root''/boot/"<br />
# cp /usr/lib/syslinux/bios/ldlinux.c32 "''TFTP_root''/boot/"<br />
# mkdir "''TFTP_root''/boot/pxelinux.cfg"<br />
<br />
这时,我们同时也创建了 {{ic|pxelinux.cfg}} 目录。PXELINUX 会默认在这个目录中寻找配置文件。我们不想对每一个不同的主机 MAC 地址都作出单独的设置,我们需要创建 {{ic|default}} 作为默认配置。<br />
<br />
{{hc|''TFTP_root''/boot/pxelinux.cfg/default|<nowiki><br />
DEFAULT linux<br />
<br />
LABEL linux<br />
KERNEL vmlinuz-linux<br />
APPEND initrd=initramfs-linux.img quiet ip=:::::eth0:dhcp nfsroot=10.0.0.1:/arch<br />
</nowiki>}}<br />
<br />
如果您使用 NBD 网络存储启动,添加下面这行:<br />
<br />
{{bc|<nowiki>append ro initrd=initramfs-linux.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_port=10809 nbd_name=arch root=/dev/nbd0</nowiki>}}<br />
<br />
{{注意|您需要对应修改 {{ic|nbd_host}} 和/或 {{ic|nfsroot}} 来与您的网络配置(NFS/NBD 服务器的地址)相匹配。}}<br />
<br />
PXELINUX 的配置和 SYSLINUX 使用相同的语法。参考上游的文档来获取更多信息。<br />
<br />
内核与 initramfs 会通过 TFTP 传输,因此需要设置对 TFTP 根目录的相对路径。否则,根文件系统需要挂载在 NFS 挂载点上。<br />
<br />
若要加载 PXELINUX, 请将 {{ic|/etc/dhcpd.conf}} 文件中的 {{ic|filename "/grub/i386-pc/core.0";}} 替换为 {{ic|filename "/pxelinux.0"}} (或 {{ic|filename "/lpxelinux.0"}})。<br />
<br />
=== 通过 memdisk 启动 ISO9660 镜像 ===<br />
<br />
Syslinux 支持通过 [https://wiki.syslinux.org/wiki/index.php/MEMDISK memdisk] 模块从 ISO 镜像中启动。参考[[Multiboot USB drive#Using Syslinux and memdisk]]中的示例。<br />
<br />
=== 串行控制台 ===<br />
<br />
参考 [[Working with the serial console#Syslinux]]。<br />
<br />
=== 单次引导到另一个操作系统 ===<br />
<br />
可以临时改变 Syslinux 的行为,让其仅在下一次启动时引导进入另一个操作系统。下面的命令展示了怎样临时引导 {{ic|archfallback}}。<br />
<br />
# extlinux -o archfallback /boot/syslinux<br />
<br />
在下一次启动的过程中,上面制定的启动标签会在没有任何 Syslinux 启动提示符的情况下直接启动。默认的启动行为会在下一次重启的时候复原。<br />
<br />
== 常见问题 ==<br />
<br />
=== 无法加载 ldlinux ===<br />
<br />
启动时出现 "Failed to load ldlinux.c32" 错误提示可能会有很多原因。<br />
其中的一种可能是文件系统工具或者文件系统结构遭到了更改。<br />
<br />
{{警告|1=在 Syslinux 6.03 版本中,启动加载器可能不支持某些文件系统的部分功能。详情请参考 [https://wiki.syslinux.org/wiki/index.php/Filesystem]。}}<br />
<br />
{{注意|1=出现 {{ic|Failed to load ldlinux.c32}} 并不一定与文件系统出现问题直接相关:<br />
* 文件系统可能出现的其他症状,除了这条信息,还可能指出另一些与文件系统有关的问题。<br />
* 这条信息并不说明问题处在了文件系统。还有其他的一些问题会导致这条信息出现。<br />
}}<br />
<br />
您也可以参考 [https://wiki.syslinux.org/wiki/index.php/Common_Problems#Failed_to_load_ldlinux]。 (这一整页都和常见问题有关)。<br />
<br />
=== 使用 Syslinux 启动提示符 ===<br />
<br />
您可以输入(在您的 {{ic|syslinux.cfg}} 配置过的) {{ic|LABEL}} 的名称来启动对应的系统。如果您是按照上述的例子进行的配置,您只需要输入:<br />
<br />
boot: arch<br />
<br />
如果您收到了配置文件无法加载的错误信息,您可以向启动提示符中直接输入您的启动参数。比如说:<br />
<br />
boot: ../vmlinuz-linux root=/dev/sda2 rw initrd=../initramfs-linux.img<br />
<br />
如果在[[Ramdisk|ramfs]]中您没有 {{ic|boot:}} 的访问权限,并且您暂时无法启动内核,<br />
:1. 创建一个临时的目录,来加载您的根分区 (如果不存在的话):<br />
# mkdir -p /new_root<br />
:2. 将 {{ic|/}} 挂载到 {{ic|/new_root}} (我们假设 {{ic|/boot/}} 也在同一个分区,否则您需要将这些分区全部挂载):<br />
{{注意|如果 {{ic|/boot}} 在自己的 ext2 分区,Busybox 将无法挂载。}}<br />
# mount /dev/sd[a-z][1-9] /new_root<br />
<br />
:3. 使用 {{ic|vim}} 来重新将 {{ic|syslinux.cfg}} 编辑正确。保存文件。<br />
:4. 重启。<br />
<br />
=== 根分区文件系统检测失败 ===<br />
<br />
如果根分区被严重损坏(分区日志受损),在ramfs的应急 shell 中,加载根分区文件系统:<br />
<br />
# mount /dev/''root partition'' /new_root<br />
<br />
将二进制程序 tune2fs 从根分区中复制出来(这个不包含在 Syslinux 中)。<br />
<br />
# cp /new_root/sbin/tune2fs /sbin/<br />
<br />
按照下面的指示[[Fsck#ext2fs_:_no_external_journal|ext2fs: 日志损坏]]重建根分区日志。<br />
<br />
=== 没有找到默认回滚和界面设置 ===<br />
<br />
有些主板厂家对 USB 设备启动的支持会差一些。此时一个在通常的现代电脑上都能启动的 ext4 格式的 U 盘,一些要求内核与 initrd 文件必须存储在 FAT16 分区的电脑可能无法正常运作。为了避免这种老设备无法读取 {{ic|syslinux.cfg}} 而去加载 {{ic|ldlinux}},用 {{Pkg|dosfstools}} 工具建立一个 [[FAT16]] 的小分区(≤ 2 GB):<br />
<br />
# mkfs.fat -F 16 /dev/sda1<br />
<br />
再来安装配置 Syslinux。<br />
<br />
=== 找不到操作系统 ===<br />
<br />
* 确保您在[[#MBR 分区表]]上安装的是 {{ic|mbr.bin}},在[[#GPT 分区表]]上安装的是 {{ic|gptmbr.bin}}。如果安装错误,{{ic|mbr.bin}} 会显示 "Missing operating system" 错误信息,而 {{ic|gptmbr.bin}} 会显示 "Missing OS" 信息。<br />
* 检查包含 {{ic|/boot}} 的分区是否有可启动标记。<br />
* 检查第一个分区是否是从 1 扇区,而不是 63 扇区或 2048 扇区开始的。您可以使用 {{ic|fdisk -l}} 命令确认。如果是从 1 扇区开始的,您可以通过救援介质上的 {{ic|gparted}} 修改。如果您有另一个启动分区,您可以将 {{ic|/boot}} 备份:<br />
<br />
# cp -a /boot /boot.bak<br />
<br />
然后使用 Arch 安装磁盘启动。接下来,使用 {{ic|cfdisk}} 删掉 {{ic|/boot}} 分区,再重建它。现在这个分区应该从正确的 '''63''' 扇区开始。现在挂载您的分区,并按照[[installation guide (简体中文)|安装指南]]中写的那样 {{ic|chroot}} 进入待修复系统。使用以下指令恢复 {{ic|/boot}}。<br />
<br />
# cp -a /boot.bak/ /boot/<br />
<br />
检查 {{ic|/etc/fstab}} 是否正确:<br />
<br />
# syslinux-install_update -iam<br />
<br />
然后重启。<br />
<br />
You will also get this error if you are trying to boot from a md [[RAID]] 1 array and created the array with a too new version of the metadata that Syslinux does not understand. As of August 2013 by default mdadm will create an array with version 1.2 metadata, but Syslinux does not understand metadata newer than 1.0. If this is the case you will need to recreate your [[RAID]] array using the {{ic|1=--metadata=1.0}} flag to mdadm.<br />
<br />
=== Windows boots up, ignoring Syslinux ===<br />
<br />
'''Solution:''' Make sure the partition that contains {{ic|/boot}} has the boot flag enabled. Also, make sure the boot flag is not enabled on the Windows partition. See the [[#Chainloading a partition's VBR|installation section]] above.<br />
<br />
The MBR that comes with Syslinux looks for the first active partition that has the boot flag set. The Windows partition was likely found first and had the boot flag set. If you wanted, you could use the MBR that Windows or MS-DOS {{ic|fdisk}} provides.<br />
<br />
=== Menu entries do nothing ===<br />
<br />
You select a menu entry and it does nothing, it just ''"refreshes"'' the menu. This usually means that you have an error in your {{ic|syslinux.cfg}} file. Hit {{ic|Tab}} to edit your boot parameters. Alternatively, press {{ic|Esc}} and type in the {{ic|LABEL}} of your boot entry (e.g. ''arch''). Another cause could be that you do not have a kernel installed. Find a way to access your file system (through live CD, etc) and make sure that {{ic|/mount/vmlinuz-linux}} exists and does not have a size of 0. If this is the case, reinstall your kernel.<br />
<br />
=== Cannot remove ldlinux.sys ===<br />
<br />
The {{ic|ldlinux.sys}} file has the [[File_permissions_and_attributes#File_attributes|immutable attribute]] set, which prevents it from being deleted or overwritten. This is because the sector location of the file must not change or else Syslinux has to be reinstalled. To remove it, run:<br />
<br />
# chattr -i /boot/syslinux/ldlinux.sys<br />
# rm /boot/syslinux/ldlinux.sys<br />
<br />
=== White block in upper left corner when using vesamenu ===<br />
<br />
Problem:<br />
''As of linux-3.0, the modesetting driver tries to keep the current contents of the screen after changing the resolution (at least it does so with my Intel, when having Syslinux in text mode). It seems that this goes wrong when combined with the vesamenu module in Syslinux (the white block is actually an attempt to keep the Syslinux menu, but the driver fails to capture the picture from vesa graphics mode).''<br />
<br />
If you have a custom resolution and a {{ic|vesamenu}} with early modesetting, try to append the following in {{ic|syslinux.cfg}} to remove the white block and continue in graphics mode:<br />
<br />
APPEND root=/dev/sda6 rw 5 '''vga=current''' quiet splash<br />
<br />
=== Chainloading Windows does not work, when it is installed on another drive ===<br />
<br />
If Windows is installed on a different drive than Arch and you have trouble chainloading it, try the following configuration:<br />
<br />
{{bc|<br />
LABEL Windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xdfc1ba9e swap<br />
}}<br />
<br />
Replace the mbr code with the one your Windows drive has (details [[#Chainloading|above]]), and append {{ic|swap}} to the options.<br />
<br />
=== Read bootloader log ===<br />
<br />
In some cases (e.g. bootloader unable to boot kernel) it is highly desirable to get more information from the boot process. ''Syslinux'' prints error messages to screen but the boot menu quickly overwrites the text. To avoid losing the log information, disable {{ic|UI menu}} in {{ic|syslinux.cfg}} and use the default "command-line" prompt. It means:<br />
<br />
* avoid the {{ic|UI}} directive<br />
* avoid {{ic|ONTIMEOUT}}<br />
* avoid {{ic|ONERROR}}<br />
* avoid {{ic|MENU CLEAR}}<br />
* use a higher {{ic|TIMEOUT}}<br />
* use {{ic|PROMPT 1}}<br />
* use {{ic|DEFAULT ''problematic_label''}}<br />
<br />
To get more detailed debug log, [[ABS|recompile]] the {{Pkg|syslinux}} package with additional CFLAGS:<br />
<br />
-DDEBUG_STDIO=1 -DCORE_DEBUG=1<br />
<br />
=== Btrfs compression ===<br />
<br />
Booting from btrfs with compression is not supported.[https://wiki.syslinux.org/wiki/index.php/Syslinux_4_Changelog#Changes_in_4.02]<br />
This error will show:<br />
<br />
btrfs: found compressed data, cannot continue!<br />
invalid or corrupt kernel image.<br />
<br />
=== Btrfs multi-device ===<br />
<br />
Booting from multiple-device btrfs is not supported.[http://repo.or.cz/syslinux.git/blob/HEAD:/extlinux/main.c] (As of 21-Jul-2016 line 1246 in validate_device_btrfs() in main.c)<br />
This head-scratching error will show (assuming you're installing on sda1):<br />
<br />
/boot/syslinux is device /dev/sda1<br />
extlinux: path /boot/syslinux doesn't match device /dev/sda1<br />
<br />
== See also ==<br />
<br />
* [https://www.syslinux.org Official website]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Syslinux_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626279
Syslinux (简体中文)
2020-07-22T01:38:35Z
<p>VictriD: Add some parts of translation. still translating...</p>
<hr />
<div>[[Category:Boot loaders (简体中文)]]<br />
[[en:Syslinux]]<br />
[[es:Syslinux]]<br />
[[fr:Syslinux]]<br />
[[it:Syslinux]]<br />
[[ja:Syslinux]]<br />
[[ru:Syslinux]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Arch Boot Process (简体中文)}}<br />
{{Related articles end}}<br />
{{translateme (简体中文)|这个版本正在由[[User:VictriD|VictriD]]进行维护。过去不完善的内容还在翻译中。}}<br />
{{TranslationStatus (简体中文)|Syslinux|2020-07-22|609036}}<br />
[[Wikipedia:SYSLINUX|Syslinux]]是一个启动加载器集合,可以从硬盘、光盘或通过 [[Preboot Execution Environment (简体中文)|PXE]] 的网络引导启动系统。支持的[[File systems (简体中文)|文件系统]]包括 [[Wikipedia:File Allocation Table|FAT]],[[Wikipedia:ext2|ext2]],[[ext3|ext3]],[[ext4 (简体中文)|ext4]] 和非压缩单设备 [[Btrfs]] 文件系统。<br />
<br />
{{警告|1=在 Syslinux 6.03 版本中,启动加载器可能不支持某些文件系统的部分功能。详情请参考 [https://wiki.syslinux.org/wiki/index.php/Filesystem]。}}<br />
<br />
<br />
{{注意|Syslinux 本身只能访问其所在分区上的数据,参阅 [[#链式加载]] 来了解如何绕过这个限制。}}<br />
<br />
== BIOS 系统 ==<br />
<br />
=== 启动流程 ===<br />
<br />
# '''第一阶段 - 第一部分''' - '''加载MBR''' 电脑启动时,BIOS 会先加载磁盘开始的 440 字节 [[Partitioning (简体中文)#Master Boot Record|MBR]] 启动代码 ({{ic|/usr/lib/syslinux/bios/mbr.bin}} 或 {{ic|/usr/lib/syslinux/bios/gptmbr.bin}})。<br />
# '''第一阶段 - 第二部分''' - '''寻找活动分区''' 第一阶段的MBR启动代码会寻找活动分区(设置了可启动标记的 MBR 分区),此处我们假设是 {{ic|/boot}} 分区。<br />
# '''第二阶段 - 第一部分''' - '''执行卷启动记录程序''' MBR 启动代码会执行上面找到的 {{ic|/boot}} 分区的卷启动记录程序(VBR,volume boot record)。对于 Syslinux 来说,VBR 就是由 {{ic|extlinux --install}} 命令创建的 {{ic|/boot/syslinux/ldlinux.sys}} 位于开始扇区的部分。请注意 {{ic|ldlinux.sys}} 和 {{ic|ldlinux.c32}} 是不同的。<br />
# '''第二阶段 - 第二部分''' - '''执行 {{ic|/boot/syslinux/ldlinux.sys}}''' VBR 会加载 {{ic|ldlinux.sys}} 剩余的部分。{{ic|ldlinux.sys}} 所处在的扇区位置不可更改,否则 syslinux 无法启动。{{注意|对于 Btrfs 来说,因为文件不断移动导致{{ic|ldlinux.sys}}扇区的位置不断变化,上述的方法将不会工作。因此在 Btrfs 中整个 {{ic|ldlinux.sys}} 文件会直接紧接着嵌入卷启动记录程序,而不是像其他文件系统那样保存在 {{ic|/boot/syslinux/ldlinux.sys}} 处。}}<br />
# '''第三阶段''' - '''加载 {{ic|/boot/syslinux/ldlinux.c32}}''' {{ic|ldlinux.sys}} 加载剩下的 syslinux 的核心部分 {{ic|/boot/syslinux/ldlinux.c32}}(这部分是因为文件大小限制无法放入 {{ic|ldlinux.sys}} 中的核心模块)。{{ic|ldlinux.c32}} 文件应该在每一个装有 syslinux 的实例中出现,并且与分区中的 {{ic|ldlinux.sys}} 版本相匹配,否则 Syslinux 将无法启动。更多资料请参阅 [https://bugzilla.syslinux.org/show_bug.cgi?id=7]。<br />
# '''第四阶段''' - '''查找并加载配置文件''' 当 syslinux 完全加载完毕,它将自动查找配置文件 {{ic|/boot/syslinux/syslinux.cfg}} (或某些情况下的 {{ic|/boot/syslinux/extlinux.conf}}),如果找到即加载。否则会进入 Syslinux {{ic|boot:}} 的命令提示符。这一步和剩下的'''非核心''' Syslinux 部分(除 {{ic|lib*.c32}} 和 {{ic|ldlinux.c32}}的{{ic|/boot/syslinux/*.c32}} 模块) 需要提供 {{ic|/boot/syslinux/lib*.c32}} (库)模块[https://wiki.syslinux.org/wiki/index.php/Common_Problems#ELF]。同样,{ic|lib*.c32}} 库模块和非核心的 {{ic|*.c32}} 模块需要与分区中的 {{ic|ldlinux.sys}} 版本相匹配。<br />
<br />
=== 在 BIOS 上安装===<br />
<br />
[[install (简体中文)|安装]]软件包 {{Pkg|syslinux}}。<br />
<br />
{{注意|<br />
* [[Partitioning_(简体中文)#GUID_分区表|GPT]] 支持需要安装软件包 {{Pkg|gptfdisk}}。请参考[[#自动安装]]部分。<br />
* [[FAT]] 支持需要安装软件包 {{Pkg|mtools}}。<br />
}}<br />
<br />
安装软件包并不是安装启动加载器。在安装完相关的包后,还需要安装启动加载器代码(到适合的位置,一般是 VBR)才能启动系统;接下来的部分对您的特定系统的特性提供了替代的指令。<br />
<br />
====自动安装====<br />
<br />
{{注意|脚本 {{ic|syslinux-install_update}} 是 Arch Linux 特有的,并不被 Syslinux 的上游提供/支持。请不要向上游,而是直接向 [https://bugs.archlinux.org/ Arch Bug Tracker] 提交关于这个特定脚本的 bug 报告。}}<br />
<br />
<br />
* 执行完 {{ic|syslinux-install_update}} 脚本后,请不要忘记按照[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}。<br />
<br />
{{警告|{{ic|syslinux-install_update}} 脚本很有可能会设置一个与您的特定系统不同的默认根分区。将 {{ic|/boot/syslinux/syslinux.cfg}} 文件中的根分区修改正确对于成功启动是至关重要的。参见[[#内核参数]]。}}<br />
<br />
syslinux-install_update脚本将自动安装启动加载器代码(一般到 VBR)、复制 {{ic|*.c32}} 模块到{{ic|/boot/syslinux}}、设置分区启动标记并将启动代码安装到 MBR。它可以处理软 RAID、[Partitioning (简体中文)#Master Boot Record|MBR]] 和 [Partitioning_(简体中文)#GUID_分区表|GPT]] 磁盘。<br />
<br />
如果您使用分开的启动分区,请用 {{ic|lsblk}} 命令确保它们都已被挂载。如果您没有看到 {{ic|/boot}} 挂载点,请在继续之前将其挂载。<br />
<br />
* {{ic|syslinux-install_update}} 的参数:{{ic|-i}} (安装文件),{{ic|-a}} (将活动分区标上启动标记),{{ic|-m}} (安装 MBR 启动代码): 如果 {{bc|# syslinux-install_update -i -a -m}} 命令失败并报错''Syslinux BIOS install failed'',问题可能出在 {{ic|extlinux}} 可执行文件不能找到包含 {{ic|/boot}} 的分区:<br />
<br />
{{hc|# extlinux --install /boot/syslinux/|<br />
extlinux: cannot find device for path /boot/syslinux<br />
extlinux: cannot open device (null)<br />
}}<br />
<br />
例如,这可能发生在从 [[LILO]] 升级时,后者在引导当前的自定义内核时,将诸如 {{ic|1=root=/dev/sda1}} 的内核命令行参数转写成了等效的数字参数 {{ic|1=root=801}}。这可以从 {{ic|/proc/cmdline}} 和 {{ic|mount}} 等命令的输出确认。 可以通过向 {{ic|extlinux}} 手动指定 {{ic|1=--device=/dev/sda1}} 来解决下文手动安装时的问题,或者先重启到现有的Arch Linux内核,这样会使用 initramfs 来避免此问题。<br />
<br />
{{注意|<br />
* 如果您现在重新启动系统,则会出现 Syslinux 的提示符。如果想要实现系统自动引导或显示引导目录,您需要创建(或编辑)配置文件。<br />
* 如果您位于另一个根目录(例如,从安装磁盘上),则可以通过 chroot,重定向后安装:<br />
# syslinux-install_update -i -a -m -c /mnt<br />
}}<br />
<br />
*现在您需要按照接下来的[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}文件。<br />
<br />
==== 手动安装 ====<br />
<br />
{{注意|如果您尝试使用Live CD拯救已安装的系统,请确保在执行这些命令之前已经 [[chroot]] 到目标系统。否则您必须在所有文件(除了{{ic|/dev/}})路径之前添加挂载点。}}<br />
<br />
您计划安装Syslinux的启动分区必须包含 FAT,ext2,ext3,ext4 或 Btrfs 文件系统。您不必把它安装在文件系统的根目录上,比如把磁盘 {{ic|/dev/sda1}} 挂在到 {{ic|/boot}}。 例如,可以在{{ic|syslinux}}子目录里安装 Syslinux:<br />
<br />
# mkdir /boot/syslinux<br />
<br />
如果您希望使用除基本引导提示之外的任何目录或配置,请把 {{ic|/usr/lib/syslinux/bios/}} 里的所有的 {{ic|.c32}} 文件复制到 {{ic|/boot/syslinux/}} 中。请不要使用符号链接。<br />
<br />
# cp /usr/lib/syslinux/bios/*.c32 /boot/syslinux/ <br />
<br />
现在安装启动加载器。对 挂载后的 FAT,ext2/3/4,或 btrfs 启动分区使用 ''extlinux'' 安装:<br />
<br />
# extlinux --install /boot/syslinux<br />
<br />
替代的,对一个'''没有被挂载'''的 FAT 启动分区使用''syslinux'' 安装:<br />
<br />
# syslinux --directory syslinux --install /dev/sda1<br />
<br />
在此之后,继续安装适用于对应分区表的 Syslinux 引导代码:<br />
* [[#MBR 分区表]]上会安装 {{ic|mbr.bin}}<br />
* [[#GPT 分区表]]上会安装 {{ic|gptmbr.bin}}<br />
这些会在下面的内容中详细描述。<br />
<br />
更多信息,请参考 [[Partitioning (简体中文)#Master Boot Record|MBR 分区表]]。<br />
{{提示|如果您不确定您的分区表类型,可以通过 {{ic|blkid -s PTTYPE -o value /dev/sda}} 来检查。}}<br />
{{注意|对于一个无盘安装实例,不需要向MBR中安装Syslinux 引导代码。您可以跳过这一段,直接跳到[[#配置]]部分。更多信息请参考[https://unix.stackexchange.com/questions/103501/boot-partiotionless-disk-with-syslinux]。}}<br />
<br />
===== MBR 分区表 =====<br />
<br />
对于一个安装在 [[Partitioning (简体中文)#Master Boot Record|MBR 分区表]]上的实例,请确保您的启动分区已经被标记为活动分区(有启动标志)。您可以用 [[fdisk (简体中文)|fdisk]]、[[parted (简体中文)|parted]] 等工具确认。它应该看起来像这个样子:<br />
<br />
{{hc|# fdisk -l /dev/sda|<br />
[...]<br />
Device Boot Start End Blocks Id System<br />
/dev/sda1 * 2048 104447 51200 83 Linux<br />
/dev/sda2 104448 625142447 312519000 83 Linux<br />
}}<br />
<br />
安装 MBR 启动代码:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sda<br />
<br />
Syslinux 提供一个替代的分区表 {{ic|altmbr.bin}}。这个分区表''不会''扫描可启动分区,而是从 MBR 的最后一个字节中的值读取用于启动的分区。下面的操作会将这个分区表写入。<br />
<br />
# printf '\x5' | cat /usr/lib/syslinux/bios/altmbr.bin - | dd bs=440 count=1 iflag=fullblock of=/dev/sda<br />
<br />
在这个例子中,一个数值为5(十六进制的)的单个字节会被添加到 {{ic|altmbr.bin}} 的内容后,并向 {{ic|sda}} 的 MBR 分区表中写入440字节的内容。Syslinux 会被安装到磁盘的第一个逻辑分区({{ic|/dev/sda5}})。<br />
<br />
===== GPT 分区表 =====<br />
<br />
对于一个安装在 [[Partitioning (简体中文)#GUID 分区表|GPT 分区表]]上的实例, 请确保您的启动分区 {{ic|/boot}} 被设置上了 2 号属性"传统BIOS可启动"(legacy BIOS bootable)。[[Parted (简体中文)|Parted]] 可以使用"legacy_boot"参数实现,而 [[GPT fdisk (简体中文)|sgdisk]]则需要输入下面的命令:<br />
<br />
# sgdisk /dev/sda --attributes=1:set:2<br />
<br />
这会在 {{ic|/dev/sda}} 的第一个分区设置"传统BIOS可启动"属性。检查命令:<br />
<br />
{{hc|1=# sgdisk /dev/sda --attributes=1:show|2=<br />
1:2:1 (legacy BIOS bootable)<br />
}}<br />
<br />
安装 MBR 启动代码:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sda<br />
<br />
== UEFI 系统 ==<br />
<br />
{{注意|<br />
* {{ic|efi64}} 对应 x86_64 UEFI 系统。如果是 IA32(32位) EFI 您需要在下面的命令中将 {{ic|efi64}} 替换为 {{ic|efi32}}。<br />
* 因为 Syslinux(目前)没有办法访问它自己所在以外的分区,因此内核与 initramfs 文件需要位于 Syslinux 同在的 [[EFI system partition (简体中文)|EFI 系统分区]](也叫ESP)。因此,这里推荐将ESP分区挂载在 {{ic|/boot}}。<br />
* {{ic|/usr/bin/syslinux-install_update}} 自动安装脚本不支持 UEFI 安装。<br />
* {{ic|syslinux.cfg}} 文件的配置与 BIOS 的配置方法相同。<br />
}}<br />
<br />
=== UEFI Syslinux 的局限性 ===<br />
<br />
* UEFI Syslinux 程序 {{ic|syslinux.efi}} 不能通过 {{ic|sbsign}}({{Pkg|sbsigntools}} 软件包提供)签名,导致无法进行 UEFI 安全启动。查看关于此的 Bug 报告:[https://bugzilla.syslinux.org/show_bug.cgi?id=8]<br />
* 在 UEFI Syslinux 目录中编辑内核参数时使用 TAB 缩进会导致显示错误(重叠显示)。查看关于此的 Bug 报告:[https://bugzilla.syslinux.org/show_bug.cgi?id=9]<br />
* UEFI Syslinux 程序不支持链式加载其他如 {{ic|UEFI Shell}}、{{ic|Windows Boot Manager}} 等 EFI 应用程序。查看关于此的增强请求:[https://bugzilla.syslinux.org/show_bug.cgi?id=17]<br />
* 在某些情况下,UEFI Syslinux 可能不能在通过 [[QEMU (简体中文)|QEMU]]/OVMF、[[VirtualBox (简体中文)|VirtualBox]] 和 [[VMware (简体中文)|VMware]] 的一些特定产品或版本构建的虚拟机的中启动。一些如 DUET 等 UEFI 模拟环境中也是如此。Syslinux 的贡献者已经确认,在 VMware Workstation 10.0.2 版本、Syslinux 6.02 版本以后不会发生这个问题。查看关于此的 Bug 报告:[https://bugzilla.syslinux.org/show_bug.cgi?id=21], [https://bugzilla.syslinux.org/show_bug.cgi?id=23] 和 [https://bugzilla.syslinux.org/show_bug.cgi?id=72]<br />
* 以内存作为硬盘不被 UEFI 支持。查看关于此的增强请求:[https://bugzilla.syslinux.org/show_bug.cgi?id=30]<br />
<br />
=== 在 UEFI 上安装 ===<br />
<br />
{{注意|在与 UEFI 有关的命令中,{{ic|''esp''}} 指的是 [[EFI system partition (简体中文)|EFI 系统分区]](ESP)所挂载的位置。}}<br />
<br />
* 安装来自[[official repositories (简体中文)|官方存储库]]的 {{Pkg|syslinux}} 和 {{Pkg|efibootmgr}}。然后按如下步骤安装 Syslinux 到 EFI 系统分区(ESP):<br />
* 复制 Syslinux 文件到 EFI 系统分区:<br />
<br />
# mkdir -p ''esp''/EFI/syslinux<br />
# cp -r /usr/lib/syslinux/efi64/* ''esp''/EFI/syslinux<br />
<br />
* 使用 [[efibootmgr (简体中文)|efibootmgr]] 安装引导记录:<br />
<br />
# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/syslinux/syslinux.efi --label "Syslinux" --verbose<br />
<br />
其中,{{ic|/dev/sdXY}}是包含启动加载器的分区。<br />
<br />
* 按照[[#配置]]创建或编辑{{ic|''esp''/EFI/syslinux/syslinux.cfg}}文件。<br />
<br />
{{注意|<br />
* UEFI 的配置文件是 {{ic|''esp''/EFI/syslinux/syslinux.cfg}} 而非 {{ic|/boot/syslinux/syslinux.cfg}}。在 {{ic|/boot/syslinux/}} 中的文件是 BIOS 启动专用的,和 UEFI Syslinux 无关。<br />
在BIOS模式下启动时,{{Pkg | efibootmgr}} 将无法为 {{ic | /EFI/syslinux/syslinux.efi}} 设置 EFI 存储于非易失性存储器(nvram)的条目。欲实现此,请将资源放在默认 EFI 位置:{{ic|''esp''/EFI/syslinux/* -> ''esp''/EFI/BOOT/*}} 和 {{ic|''esp''/EFI/syslinux/syslinux.efi -> ''esp''/EFI/BOOT/bootx64.efi}} 处。<br />
}}<br />
<br />
<br />
== 配置 ==<br />
<br />
Syslinux 的配置文件 {{ic|syslinux.cfg}} 必须和 Syslinux 放在同一个目录下。在我们的示例中,BIOS 系统放在 {{ic|/boot/syslinux/}} 处,UEFI 系统放在 {{ic|''esp''/EFI/syslinux/}} 处。<br />
<br />
启动器将自动寻找 {{ic|syslinux.cfg}} (优先)和 {{ic|extlinux.conf}}这两个配置文件之一。<br />
<br />
{{提示|<br />
* 除了 {{ic|LINUX}},您也可以使用 {{ic|KERNEL}} 关键字。{{ic|KERNEL}} 关键字会试图去检测内核文件的类型,而 {{ic|LINUX}} 总是会将其按照 Linux 内核处理。 <br />
* {{ic|TIMEOUT}} 的单位是 '''0.1 秒''',也就是说 50 代表 5 秒。<br />
}}<br />
<br />
=== 示例 ===<br />
<br />
{{注意|<br />
* 示例这一节中的所有配置文件都需要编辑并设定合适的内核参数。参见[[#内核参数]]节。<br />
* 请一定仔细检查路径。这个实例可能不能够直接照搬到您的安装实例,尤其是 UEFI 系统。<br />
* 接下来的例子假设内核与 initrd 文件都位于 {{ic|syslinux.cfg}} 的父目录。(准确的说,是工作目录的父目录)。<br />
}}<br />
<br />
==== 启动提示符 ====<br />
<br />
这是一个非常简单的配置文件,会显示 {{ic|boot:}} 提示符并在 5 秒后自动启动。如果您不希望看见提示符,请将 {{ic|PROMPT}} 设置为 {{ic|0}}。<br />
<br />
配置文件:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
PROMPT 1<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
==== 文本启动目录 ====<br />
<br />
Syslinux 允许您使用一个文本启动目录来选择。要做到这一点,请将 {{ic|menu}} 和 {{ic|libutil}} 模块复制到您的 Syslinux 目录:<br />
<br />
# cp /usr/lib/syslinux/bios/{menu,libutil}.c32 /boot/syslinux/<br />
<br />
在 5.00 版本之后,其他的 {{ic|lib*.c32}} 库模块也会频繁地被调用。参考 [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies Syslinux 维基]来查看依赖树。<br />
<br />
配置文件:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI menu.c32<br />
PROMPT 0<br />
<br />
MENU TITLE Boot Menu<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
更多关于启动目录的信息,请参考 [https://wiki.syslinux.org/wiki/index.php/Menu Syslinux 维基]。<br />
<br />
==== 图形化启动目录 ====<br />
<br />
Syslinux 允许您使用一个文本启动目录来选择。要做到这一点,请将 {{ic|vesamenu}} COM32 模块复制到您的 Syslinux 目录:<br />
<br />
# cp /usr/lib/syslinux/bios/vesamenu.c32 /boot/syslinux/<br />
<br />
在 5.00 版本之后,其他的 {{ic|lib*.c32}} 库模块也会频繁地被调用。参考 [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies Syslinux 维基]来查看依赖树。<br />
<br />
{{注意| 如果您使用的是 [[UEFI (简体中文)|UEFI]] 系统,请一定从 {{ic|/usr/lib/syslinux/efi64/}} 目录(或者 IA32 (32位) EFI 的 {{ic|efi32}}) 中复制。否则电脑会黑屏。如果出现这个情况,请从 Live CD 中启动并使用 [[chroot (简体中文)|chroot]] 来进行正确的修改。}}<br />
<br />
这个配置文件使用了和 Arch Linux 安装光盘相同的目录设计,您可以在 [https://projects.archlinux.org/archiso.git/tree/configs/releng/syslinux projects.archlinux.org] 上找到。[https://projects.archlinux.org/archiso.git/plain/configs/releng/syslinux/splash.png Arch Linux 启动背景图像] 也可以在那儿下载。请把图像复制到 {{ic|/boot/syslinux/splash.png}} 处。<br />
<br />
配置文件:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI vesamenu.c32<br />
DEFAULT arch<br />
PROMPT 0<br />
MENU TITLE Boot Menu<br />
MENU BACKGROUND splash.png<br />
TIMEOUT 50<br />
<br />
MENU WIDTH 78<br />
MENU MARGIN 4<br />
MENU ROWS 5<br />
MENU VSHIFT 10<br />
MENU TIMEOUTROW 13<br />
MENU TABMSGROW 11<br />
MENU CMDLINEROW 11<br />
MENU HELPMSGROW 16<br />
MENU HELPMSGENDROW 29<br />
<br />
# Refer to https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32<br />
<br />
MENU COLOR border 30;44 #40ffffff #a0000000 std<br />
MENU COLOR title 1;36;44 #9033ccff #a0000000 std<br />
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all<br />
MENU COLOR unsel 37;44 #50ffffff #a0000000 std<br />
MENU COLOR help 37;40 #c0ffffff #a0000000 std<br />
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std<br />
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std<br />
MENU COLOR msg07 37;40 #90ffffff #a0000000 std<br />
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std<br />
<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
从 Syslinux 3.84 版本开始,{{ic|vesamenu.c32}} 支持 {{ic|MENU RESOLUTION $WIDTH $HEIGHT}} 指令。<br />
使用这个指令,请将 {{ic|MENU RESOLUTION 1440 900}} 插入您的配置文件,这样可以将分辨率设置为 1440x900。<br />
但是,背景图像需要和分辨率完全一致,否则 Syslinux 将拒绝加载目录。<br />
<br />
如果想要将目录居中并调整分辨率,请调节 {{ic|MENU RESOLUTION}}、{{ic|MENU HSHIFT $N}} 和 {{ic|MENU VSHIFT $N}} 三个参数。将 {{ic|$N}} 设置为非负值会将其从左上角开始移动。默认值都是 {{ic|0}},因此目录会显示在显示器的左上角。反过来,如果这个数值为负,则会从反方向开始移动。(比如说 {{ic|VHSHIFT -4}}是从底部向上移动四行)。<br />
<br />
如果想要使目录居中,请添加或改为这些值:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
MENU RESOLUTION 800 600 # or whatever your screen resolution is<br />
MENU WIDTH 78 # width of the menu also required to bring the menu box to size<br />
MENU VSHIFT 10 # moves menu down<br />
MENU HSHIFT 10 # moves menu right<br />
</nowiki>}}<br />
<br />
VESA 标准通常最大允许 25 行 80 列,因此如果将其设置得过大可能会将目录移出屏幕外,可能需要使用救援CD才能改回来。<br />
<br />
=== 内核参数 ===<br />
<br />
在 {{ic|syslinux.cfg}} 中,[[kernel parameters (简体中文)|内核参数]]的设定使用 {{ic|APPEND}} 指令: <br />
对每一个 {{ic|LABEL}} 记录, [https://wiki.syslinux.org/wiki/index.php/Config#APPEND APPEND] 命令只能出现在一行内(就是说,把命令拆分成多行是无效的)。<br />
<br />
推荐将下列的设置同时作为回滚条目。<br />
<br />
'''最简单的情形''',{{ic|root}} 参数中的分区名称需要被修改。 将 {{ic|/dev/sda2}} 改为正确的启动分区。<br />
<br />
APPEND root=/dev/sda2<br />
<br />
'''If you want to use [[UUID]]''' for [[persistent block device naming]] change the {{ic|APPEND}} line as follows, substituting {{ic|1234}} with the {{ic|UUID}} of your root partition:<br />
<br />
APPEND root=UUID=''1234'' rw<br />
<br />
'''If you use [[dm-crypt]] encryption''' change the {{ic|APPEND}} line to use your encrypted volume:<br />
<br />
APPEND root=/dev/mapper/''name'' cryptdevice=/dev/sda2:''name'' rw<br />
<br />
'''If you are using software''' [[Wikipedia:RAID|RAID]] using [http://neil.brown.name/blog/mdadm mdadm], change the {{ic|APPEND}} line to accommodate your RAID arrays. As an example the following accommodates three RAID 1 arrays and sets the appropriate one as root:<br />
<br />
APPEND root=/dev/md1 rw md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4<br />
<br />
If booting from a software raid partition fails using the kernel device node method above an alternative, a more reliable, way is to use partition labels:<br />
<br />
APPEND root=LABEL=''THEROOTPARTITIONLABEL'' rw<br />
<br />
'''If booting a [[btrfs]] subvolume''', amend the {{ic|APPEND}} line with {{ic|rootflags<nowiki>=</nowiki>subvol<nowiki>=</nowiki><root subvolume>}}. For example, where {{ic|/dev/sda2}} has been mounted as a btrfs subvolume called 'ROOT' (e.g. {{ic|mount -o noatime,subvol<nowiki>=</nowiki>ROOT /dev/sda2 /mnt}}), then the {{ic|APPEND}} line would need to be modified as follows:<br />
<br />
APPEND root=/dev/sda2 rw rootflags=subvol=ROOT<br />
<br />
A failure to do so will otherwise result in the following error message: {{ic|ERROR: Root device mounted successfully, but /sbin/init does not exist.}}<br />
<br />
=== Auto boot ===<br />
<br />
If you do not want to see the Syslinux menu at all, use the [[#Boot prompt]], and set {{ic|PROMPT}} to {{ic|0}} and comment out any {{ic|UI}} menu entries. Setting the {{ic|TIMEOUT}} variable to {{ic|0}} might also be a good idea. Make sure there is a {{ic|DEFAULT}} set in your {{ic|syslinux.cfg}}. Holding either {{ic|Shift}} or {{ic|Alt}}, or setting either {{ic|Caps Lock}} or {{ic|Scroll Lock}}, during boot will allow for options other than default to be used.<br />
See the [https://wiki.syslinux.org/wiki/index.php/Directives/special_keys upstream wiki] for additional alternatives.<br />
<br />
=== Security ===<br />
<br />
Syslinux has two levels of bootloader security: a menu master password, and a per-menu-item password. In {{ic|syslinux.cfg}}, use<br />
<br />
MENU MASTER PASSWD passwd <br />
<br />
to set a master bootloader password, and<br />
<br />
MENU PASSWD passwd <br />
<br />
within a {{ic|LABEL}} block to password-protect individual boot items.<br />
<br />
The passwd can be either a cleartext password or hashed: [https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32 see official documentation].<br />
<br />
=== Chainloading ===<br />
<br />
Syslinux BIOS cannot directly chainload files located on other partitions; however, {{ic|chain.c32}} can boot a partition boot sector (VBR) or another disk's MBR.<br />
<br />
==== Chainloading a partition's VBR ====<br />
<br />
If you want to chainload other operating systems (such as Windows) or boot loaders, copy the {{ic|chain.c32}} module to the Syslinux directory (additional {{ic|lib*.c32}} library modules might be needed too; for details, see the instructions in the previous section). Then create a section in the configuration file:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND hd0 3<br />
...<br />
}}<br />
<br />
{{ic|hd0 3}} is the third partition on the first BIOS drive - drives are counted from zero, but partitions are counted from one. <br />
<br />
{{注意|For Windows, this skips the system's own boot manager ({{ic|bootmgr}}), which is required for a few important updates ([https://support.microsoft.com/kb/2883200 eg.]) to complete. In such cases it may be advisable to temporarily set the MBR boot flag to the Windows partition (eg. with [[GParted]]), let the update finish installing, and then reset the flag to the Syslinux partition (eg. with Windows's own [https://www.online-tech-tips.com/computer-tips/set-active-partition-vista-xp DiskPart]).}}<br />
<br />
==== Chainloading a disk's MBR ====<br />
<br />
If you are unsure about which drive your BIOS thinks is "first", you can instead use the MBR identifier, or if you are using GPT, the filesystem labels. To use the MBR identifier, run the command<br />
<br />
{{hc|# fdisk -l /dev/sdb|<nowiki><br />
Disk /dev/sdb: 128.0 GB, 128035676160 bytes <br />
255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors<br />
Units = sectors of 1 * 512 = 512 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0xf00f1fd3<br />
<br />
Device Boot Start End Blocks Id System<br />
/dev/sdb1 2048 4196351 2097152 7 HPFS/NTFS/exFAT<br />
/dev/sdb2 4196352 250066943 122935296 7 HPFS/NTFS/exFAT<br />
</nowiki>}}<br />
<br />
replacing {{ic|/dev/sdb}} with the drive you wish to chainload. Using the hexadecimal number under Disk identifier: {{ic|0xf00f1fd3}} in this case, the syntax in {{ic|syslinux.cfg}} is<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xf00f1fd3<br />
...<br />
}}<br />
<br />
For more details about chainloading, see [https://wiki.syslinux.org/wiki/index.php/Comboot/chain.c32 the Syslinux wiki].<br />
<br />
==== Chainloading other boot loaders ====<br />
<br />
If you have [[GRUB]] installed on the same partition, you can chainload it by using: <br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2<br />
MENU LABEL Grub2<br />
COM32 chain.c32<br />
APPEND file=../grub/boot.img<br />
...<br />
</nowiki>}}<br />
<br />
Alternatively, it is also possible to load [[GRUB]] as a linux kernel by prepending {{ic|lnxboot.img}} to {{ic|core.img}}. The file {{ic|lnxboot.img}} is part of {{ic|core/grub}} and can be found in {{ic|/usr/lib/grub/i386-pc}}.<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2lnx<br />
MENU LABEL Grub2 (lnxboot)<br />
LINUX ../grub/i386-pc/lnxboot.img<br />
INITRD ../grub/i386-pc/core.img<br />
...<br />
</nowiki>}}<br />
<br />
This may be required for booting from ISO images.<br />
<br />
==== Chainloading other Linux systems ====<br />
<br />
{{Accuracy|Among other inaccuracies... 1_ There is no obligation to install yet another boot loader if you already have one related to the other partition/OS (e.g. GRUB2 installed in the MBR or in the VBR of the partition being chainloaded to). 2_ Syslinux (in any of its derivatives) is never "installed to the MBR", so mentioning the MBR in this section without any explanation of what it is being meant or how to do it in practical terms is just adding confusion. 3_ Typos and misspelling. 4_No need to explain (yet again) how to install some (other) bootloader to some (other) partition / OS; just how to chainload from Syslinux to that other partition / bootloader / OS.}}<br />
<br />
Chainloading another bootloader such as Windows' is pretty obvious, as there is a definite bootloader to chain to. But with Syslinux, it is only able to load files residing on the same partition as the configuration file. Thus, if you have another version of Linux on a separate partition, without a shared {{ic|/boot}}, it becomes ''necessary'' to employ EXTLINUX rather than the other OS's default bootloader (eg. GRUB2). Essentially, EXTLINUX can be installed on the partition superblock/[[wikipedia:Volume_boot_record|VBR]] and be called as a ''separate bootloader'' right from the MBR installed by Syslinux. EXTLINUX is part of The Syslinux Project and is included with the {{Pkg|syslinux}} package.<br />
<br />
The following instructions assume you have Syslinux installed already. These instructions will also assume that the typical Arch Linux configuration path of {{ic|/boot/syslinux}} is being used and the chainloaded system's {{ic|/}} is on {{ic|/dev/sda3}}. <br />
<br />
From a booted Linux (likely the partition that Syslinux is set up to boot), mount the other system's root partition to your desired mount point. In this example this will be {{ic|/mnt}}. Also, if a separate {{ic|/boot}} partition is used on the second operating system, that will also need to be mounted. The example assumes this is {{ic|/dev/sda2}}.<br />
<br />
# mount /dev/sda3 /mnt<br />
# mount /dev/sda2 /mnt/boot (only necessary for separate /boot)<br />
<br />
Install EXTLINUX to the partition VBR, and copy necessary {{ic|*.c32}} files<br />
<br />
# extlinux -i /mnt/boot/syslinux/ (first create the directory if necessary)<br />
# cp /usr/lib/syslinux/bios/*.c32 /mnt/boot/syslinux<br />
<br />
Create {{ic|/mnt/boot/syslinux/syslinux.cfg}}. You can use the other Linux's bootloader menu file for reference. Below is an example:<br />
<br />
{{hc|/mnt/boot/syslinux/syslinux.cfg '''on /dev/sda3'''|<nowiki><br />
TIMEOUT 10<br />
<br />
UI menu.c32<br />
<br />
LABEL OtherLinux<br />
LINUX /boot/vmlinuz-linux<br />
INITRD /boot/initramfs-linux.img<br />
APPEND root=/dev/sda3 rw quiet<br />
<br />
LABEL MAIN<br />
COM32 chain.c32<br />
APPEND hd0 0<br />
</nowiki>}}<br />
<br />
And then add an entry to your main syslinux.cfg <br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
LABEL OtherLinux<br />
COM32 chain.c32<br />
APPEND hd0 3<br />
</nowiki>}}<br />
<br />
Note that the other Linux entry in {{ic|<other-OS>/boot/syslinux/syslinux.cfg}} will need to be edited each time you update this OS's kernel unless it has symlinks to its latest kernel and initrd in {{ic|/}}. Since we are booting the kernel directly and not chainloading the other-OS's default bootloader.<br />
<br />
=== Using memtest ===<br />
<br />
Install {{Pkg|memtest86+}} from the [[official repositories]].<br />
<br />
Use this {{ic|LABEL}} section to launch [[Wikipedia:Memtest86|memtest]]:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL memtest<br />
MENU LABEL Memtest86+<br />
LINUX ../memtest86+/memtest.bin<br />
...<br />
}}<br />
<br />
{{注意|If you are using PXELINUX, change the name from {{ic|memtest.bin}} to {{ic|memtest}} since PXELINUX treats the file with ''.bin'' extension as a boot sector and loads only 2KB of it.}}<br />
<br />
=== HDT ===<br />
<br />
[https://wiki.syslinux.org/wiki/index.php/Hdt_(Hardware_Detection_Tool) HDT (Hardware Detection Tool)] displays hardware information. Like before, the {{ic|.c32}} file has to be copied from {{ic|/boot/syslinux/}}. Additional {{ic|lib*.c32}} library modules might be needed too.<br />
For PCI info, copy {{ic|/usr/share/hwdata/pci.ids}} to {{ic|/boot/syslinux/pci.ids}} and add the following to your configuration file:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL hdt<br />
MENU LABEL Hardware Info<br />
COM32 hdt.c32<br />
}}<br />
<br />
=== Reboot and power off ===<br />
<br />
{{注意|As of Syslinux 6.03, {{ic|poweroff.c32}} only works with [[Wikipedia:Advanced Power Management|APM]] and not with [[Wikipedia:Advanced Configuration and Power Interface|ACPI]]. For a possible solution, see [https://www.syslinux.org/archives/2012-March/017661.html acpioff: COM32 module to shut off machine using ACPI].}}<br />
<br />
Use the following sections to reboot or power off your machine:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL reboot<br />
MENU LABEL Reboot<br />
COM32 reboot.c32<br />
<br />
LABEL poweroff<br />
MENU LABEL Power Off<br />
COM32 poweroff.c32<br />
}}<br />
<br />
=== Clear menu ===<br />
<br />
To clear the screen when exiting the menu, add the following line:<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU CLEAR<br />
}}<br />
<br />
=== Keyboard layout ===<br />
<br />
If you often have to edit your boot command with diverse parameters in the Syslinux boot prompt, then you might want to remap your keyboard layout. This allows you to enter "=", "/" and other characters easily on a non-US keyboard.<br />
<br />
{{注意|{{ic|keytab-lilo}}, which is included in the {{Pkg|syslinux}} package, is a perl script invoking the ''loadkeys'' program.}}<br />
<br />
To create a compatible keymap (e.g. a german one) run:<br />
<br />
# keytab-lilo /usr/share/kbd/keymaps/i386/qwerty/us.map.gz /usr/share/kbd/keymaps/i386/qwertz/de.map.gz > /boot/syslinux/de.ktl<br />
<br />
Now edit {{ic|syslinux.cfg}} and add:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
KBDMAP de.ktl<br />
}}<br />
<br />
See the [https://wiki.syslinux.org/wiki/index.php/Directives/kbdmap Syslinux wiki] for more details.<br />
<br />
=== Hiding the menu ===<br />
<br />
Use the option:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU HIDDEN<br />
}}<br />
to hide the menu while displaying only the timeout. Press any key to bring up the menu.<br />
<br />
=== PXELINUX ===<br />
<br />
{{注意|For UEFI, Syslinux uses the same binary for disk booting and network booting. Loading files from TFTP or other network protocols will require network booting Syslinux. }}<br />
<br />
PXELINUX is provided by the {{Pkg|syslinux}} package.<br />
<br />
For BIOS clients, copy the {{ic|<nowiki>{l,}pxelinux.0</nowiki>}} bootloader to the boot directory of the client. For version 5.00 and newer, also copy {{ic|ldlinux.c32}} from the same package:<br />
<br />
# cp /usr/lib/syslinux/bios/pxelinux.0 "''TFTP_root''/boot/"<br />
# cp /usr/lib/syslinux/bios/ldlinux.c32 "''TFTP_root''/boot/"<br />
# mkdir "''TFTP_root''/boot/pxelinux.cfg"<br />
<br />
We also created the {{ic|pxelinux.cfg}} directory, which is where PXELINUX searches for configuration files by default. Because we do not want to discriminate between different host MACs, we then create the {{ic|default}} configuration.<br />
<br />
{{hc|''TFTP_root''/boot/pxelinux.cfg/default|<nowiki><br />
DEFAULT linux<br />
<br />
LABEL linux<br />
KERNEL vmlinuz-linux<br />
APPEND initrd=initramfs-linux.img quiet ip=:::::eth0:dhcp nfsroot=10.0.0.1:/arch<br />
</nowiki>}}<br />
<br />
Or if you are using NBD, use the following append line:<br />
<br />
{{bc|<nowiki>append ro initrd=initramfs-linux.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_port=10809 nbd_name=arch root=/dev/nbd0</nowiki>}}<br />
<br />
{{注意|You will need to change {{ic|nbd_host}} and/or {{ic|nfsroot}}, respectively, to match your network configuration (the address of the NFS/NBD server)}}<br />
<br />
PXELINUX uses the same configuration syntax as SYSLINUX; refer to the upstream documentation for more information.<br />
<br />
The kernel and initramfs will be transferred via TFTP, so the paths to those are going to be relative to the TFTP root. Otherwise, the root filesystem is going to be the NFS mount itself, so those are relative to the root of the NFS server.<br />
<br />
To actually load PXELINUX, replace {{ic|filename "/grub/i386-pc/core.0";}} in {{ic|/etc/dhcpd.conf}} with {{ic|filename "/pxelinux.0"}} (or with {{ic|filename "/lpxelinux.0"}}).<br />
<br />
=== Booting ISO9660 image files with memdisk ===<br />
<br />
Syslinux supports booting from ISO images directly using the [https://wiki.syslinux.org/wiki/index.php/MEMDISK memdisk] module, see [[Multiboot USB drive#Using Syslinux and memdisk]] for examples.<br />
<br />
=== Serial console ===<br />
<br />
See [[Working with the serial console#Syslinux]].<br />
<br />
=== Boot another OS once ===<br />
<br />
It is possible to temporarily change the default Syslinux action and boot another label only during the next boot. The following command shows how to boot the {{ic|archfallback}} label once:<br />
<br />
# extlinux -o archfallback /boot/syslinux<br />
<br />
During the next boot, the specified label will be booted without any Syslinux prompt showing up. The default Syslinux boot behaviour will be restored on the next reboot.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Failed to load ldlinux ===<br />
<br />
An error message such as "Failed to load ldlinux.c32" during the initial boot can be triggered by many diverse reasons.<br />
One potential reason could be a change in file system tools or in a file system structure, depending on its own version.<br />
<br />
{{Warning|1=As of Syslinux 6.03, some of the features of the supported file systems are not supported by the bootloader. See [https://wiki.syslinux.org/wiki/index.php/Filesystem] for more information.}}<br />
<br />
{{注意|1=There is no direct and unique correspondence between a message such as {{ic|Failed to load ldlinux.c32}} and a problem related to the file system:<br />
* Other alternative symptoms, instead of this message, could also indicate a problem related to the file system.<br />
* The message does not necessarily mean that the problem is related to the file system; there are other possible reasons for this type of messages.<br />
}}<br />
<br />
See also [https://wiki.syslinux.org/wiki/index.php/Common_Problems#Failed_to_load_ldlinux] (the whole page might be relevant for troubleshooting too).<br />
<br />
=== Using the Syslinux prompt===<br />
<br />
You can type in the {{ic|LABEL}} name of the entry that you want to boot (as per your {{ic|syslinux.cfg}}). If you used the example configurations, just type:<br />
<br />
boot: arch<br />
<br />
If you get an error that the configuration file could not be loaded, you can pass your needed boot parameters, e.g.:<br />
<br />
boot: ../vmlinuz-linux root=/dev/sda2 rw initrd=../initramfs-linux.img<br />
<br />
If you do not have access to {{ic|boot:}} in [[Ramdisk|ramfs]], and therefore temporarily unable to boot the kernel again,<br />
:1. Create a temporary directory, in order to mount your root partition (if it does not exist already):<br />
# mkdir -p /new_root<br />
:2. Mount {{ic|/}} under {{ic|/new_root}} (in case {{ic|/boot/}} is on the same partition, otherwise you will need to mount them both):<br />
{{注意|Busybox cannot mount {{ic|/boot}} if it is on its own ext2 partition.}}<br />
# mount /dev/sd[a-z][1-9] /new_root<br />
<br />
:3. Use {{ic|vim}} and edit {{ic|syslinux.cfg}} again to suit your needs and save file.<br />
:4. Reboot.<br />
<br />
=== Fsck fails on root partition ===<br />
<br />
In the case of a badly corrupted root partition (in which the journal is damaged), in the ramfs emergency shell, mount the root file system:<br />
<br />
# mount /dev/''root partition'' /new_root<br />
<br />
And grab the tune2fs binary from the root partition (it is not included in Syslinux):<br />
<br />
# cp /new_root/sbin/tune2fs /sbin/<br />
<br />
Follow the instructions at [[Fsck#ext2fs_:_no_external_journal|ext2fs: no external journal]] to create a new journal for the root partition.<br />
<br />
=== No Default or UI found on some computers ===<br />
<br />
Certain motherboard manufacturers have less compatibility for booting from USB devices than others. While an ext4 formatted USB drive may boot on a more recent computer, some computers may hang if the boot partition containing the ''kernel'' and ''initrd'' are not on a FAT16 partition. To prevent an older machine from loading {{ic|ldlinux}} and failing to read {{ic|syslinux.cfg}}, create a partition (≤ 2 GB) and format to [[FAT16]] using {{Pkg|dosfstools}}:<br />
<br />
# mkfs.fat -F 16 /dev/sda1<br />
<br />
then install and configure Syslinux.<br />
<br />
=== Missing operating system ===<br />
<br />
* Check that you have installed {{ic|gptmbr.bin}} for GPT and {{ic|mbr.bin}} for MBR partition table. A "Missing operating system" message comes from {{ic|mbr.bin}} while {{ic|gptmbr.bin}} would show a "Missing OS" message.<br />
* Check whether the partition that contains {{ic|/boot}} has the "boot" flag enabled.<br />
* Check whether the first partition at the boot device starts at sector 1 rather than sector 63 or 2048. Check this with {{ic|fdisk -l}}. If it starts at sector 1, you can move the partition(s) with {{ic|gparted}} from a rescue disk. Or, if you have a separate boot partition, you can back up {{ic|/boot}} with <br />
<br />
# cp -a /boot /boot.bak<br />
<br />
and then boot up with the Arch install disk. Next, use {{ic|cfdisk}} to delete the {{ic|/boot}} partition, and recreate it. This time it should begin at the proper sector, '''63'''. Now mount your partitions and {{ic|chroot}} into your mounted system, as described in the [[installation guide]]. Restore {{ic|/boot}} with the command<br />
<br />
# cp -a /boot.bak/ /boot/<br />
<br />
Check if {{ic|/etc/fstab}} is correct, run:<br />
<br />
# syslinux-install_update -iam<br />
<br />
and reboot.<br />
<br />
You will also get this error if you are trying to boot from a md [[RAID]] 1 array and created the array with a too new version of the metadata that Syslinux does not understand. As of August 2013 by default mdadm will create an array with version 1.2 metadata, but Syslinux does not understand metadata newer than 1.0. If this is the case you will need to recreate your [[RAID]] array using the {{ic|1=--metadata=1.0}} flag to mdadm.<br />
<br />
=== Windows boots up, ignoring Syslinux ===<br />
<br />
'''Solution:''' Make sure the partition that contains {{ic|/boot}} has the boot flag enabled. Also, make sure the boot flag is not enabled on the Windows partition. See the [[#Chainloading a partition's VBR|installation section]] above.<br />
<br />
The MBR that comes with Syslinux looks for the first active partition that has the boot flag set. The Windows partition was likely found first and had the boot flag set. If you wanted, you could use the MBR that Windows or MS-DOS {{ic|fdisk}} provides.<br />
<br />
=== Menu entries do nothing ===<br />
<br />
You select a menu entry and it does nothing, it just ''"refreshes"'' the menu. This usually means that you have an error in your {{ic|syslinux.cfg}} file. Hit {{ic|Tab}} to edit your boot parameters. Alternatively, press {{ic|Esc}} and type in the {{ic|LABEL}} of your boot entry (e.g. ''arch''). Another cause could be that you do not have a kernel installed. Find a way to access your file system (through live CD, etc) and make sure that {{ic|/mount/vmlinuz-linux}} exists and does not have a size of 0. If this is the case, reinstall your kernel.<br />
<br />
=== Cannot remove ldlinux.sys ===<br />
<br />
The {{ic|ldlinux.sys}} file has the [[File_permissions_and_attributes#File_attributes|immutable attribute]] set, which prevents it from being deleted or overwritten. This is because the sector location of the file must not change or else Syslinux has to be reinstalled. To remove it, run:<br />
<br />
# chattr -i /boot/syslinux/ldlinux.sys<br />
# rm /boot/syslinux/ldlinux.sys<br />
<br />
=== White block in upper left corner when using vesamenu ===<br />
<br />
Problem:<br />
''As of linux-3.0, the modesetting driver tries to keep the current contents of the screen after changing the resolution (at least it does so with my Intel, when having Syslinux in text mode). It seems that this goes wrong when combined with the vesamenu module in Syslinux (the white block is actually an attempt to keep the Syslinux menu, but the driver fails to capture the picture from vesa graphics mode).''<br />
<br />
If you have a custom resolution and a {{ic|vesamenu}} with early modesetting, try to append the following in {{ic|syslinux.cfg}} to remove the white block and continue in graphics mode:<br />
<br />
APPEND root=/dev/sda6 rw 5 '''vga=current''' quiet splash<br />
<br />
=== Chainloading Windows does not work, when it is installed on another drive ===<br />
<br />
If Windows is installed on a different drive than Arch and you have trouble chainloading it, try the following configuration:<br />
<br />
{{bc|<br />
LABEL Windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xdfc1ba9e swap<br />
}}<br />
<br />
Replace the mbr code with the one your Windows drive has (details [[#Chainloading|above]]), and append {{ic|swap}} to the options.<br />
<br />
=== Read bootloader log ===<br />
<br />
In some cases (e.g. bootloader unable to boot kernel) it is highly desirable to get more information from the boot process. ''Syslinux'' prints error messages to screen but the boot menu quickly overwrites the text. To avoid losing the log information, disable {{ic|UI menu}} in {{ic|syslinux.cfg}} and use the default "command-line" prompt. It means:<br />
<br />
* avoid the {{ic|UI}} directive<br />
* avoid {{ic|ONTIMEOUT}}<br />
* avoid {{ic|ONERROR}}<br />
* avoid {{ic|MENU CLEAR}}<br />
* use a higher {{ic|TIMEOUT}}<br />
* use {{ic|PROMPT 1}}<br />
* use {{ic|DEFAULT ''problematic_label''}}<br />
<br />
To get more detailed debug log, [[ABS|recompile]] the {{Pkg|syslinux}} package with additional CFLAGS:<br />
<br />
-DDEBUG_STDIO=1 -DCORE_DEBUG=1<br />
<br />
=== Btrfs compression ===<br />
<br />
Booting from btrfs with compression is not supported.[https://wiki.syslinux.org/wiki/index.php/Syslinux_4_Changelog#Changes_in_4.02]<br />
This error will show:<br />
<br />
btrfs: found compressed data, cannot continue!<br />
invalid or corrupt kernel image.<br />
<br />
=== Btrfs multi-device ===<br />
<br />
Booting from multiple-device btrfs is not supported.[http://repo.or.cz/syslinux.git/blob/HEAD:/extlinux/main.c] (As of 21-Jul-2016 line 1246 in validate_device_btrfs() in main.c)<br />
This head-scratching error will show (assuming you're installing on sda1):<br />
<br />
/boot/syslinux is device /dev/sda1<br />
extlinux: path /boot/syslinux doesn't match device /dev/sda1<br />
<br />
== See also ==<br />
<br />
* [https://www.syslinux.org Official website]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Syslinux_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626245
Syslinux (简体中文)
2020-07-21T16:23:26Z
<p>VictriD: Continue to translate.</p>
<hr />
<div>[[Category:Boot loaders (简体中文)]]<br />
[[en:Syslinux]]<br />
[[es:Syslinux]]<br />
[[fr:Syslinux]]<br />
[[it:Syslinux]]<br />
[[ja:Syslinux]]<br />
[[ru:Syslinux]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Arch Boot Process (简体中文)}}<br />
{{Related articles end}}<br />
{{translateme (简体中文)|这个版本正在由[[User:VictriD|VictriD]]进行维护。过去不完善的内容还在翻译中。}}<br />
{{TranslationStatus (简体中文)|Syslinux|2020-07-21|609036}}<br />
[[Wikipedia:SYSLINUX|Syslinux]]是一个启动加载器集合,可以从硬盘、光盘或通过 [[Preboot Execution Environment (简体中文)|PXE]] 的网络引导启动系统。支持的[[File systems (简体中文)|文件系统]]包括 [[Wikipedia:File Allocation Table|FAT]],[[Wikipedia:ext2|ext2]],[[ext3|ext3]],[[ext4 (简体中文)|ext4]] 和非压缩单设备 [[Btrfs]] 文件系统。<br />
<br />
{{警告|1=在 Syslinux 6.03 版本中,启动加载器可能不支持某些文件系统的部分功能。详情请参考 [https://wiki.syslinux.org/wiki/index.php/Filesystem]。}}<br />
<br />
<br />
{{注意|Syslinux 本身只能访问其所在分区上的数据,参阅 [[#链式加载]] 来了解如何绕过这个限制。}}<br />
<br />
== BIOS 系统 ==<br />
<br />
=== 启动流程 ===<br />
<br />
# '''第一阶段 - 第一部分''' - '''加载MBR''' 电脑启动时,BIOS 会先加载磁盘开始的 440 字节 [[Partitioning (简体中文)#Master Boot Record|MBR]] 启动代码 ({{ic|/usr/lib/syslinux/bios/mbr.bin}} 或 {{ic|/usr/lib/syslinux/bios/gptmbr.bin}})。<br />
# '''第一阶段 - 第二部分''' - '''寻找活动分区''' 第一阶段的MBR启动代码会寻找活动分区(设置了可启动标记的 MBR 分区),此处我们假设是 {{ic|/boot}} 分区。<br />
# '''第二阶段 - 第一部分''' - '''执行卷启动记录程序''' MBR 启动代码会执行上面找到的 {{ic|/boot}} 分区的卷启动记录程序(VBR,volume boot record)。对于 Syslinux 来说,VBR 就是由 {{ic|extlinux --install}} 命令创建的 {{ic|/boot/syslinux/ldlinux.sys}} 位于开始扇区的部分。请注意 {{ic|ldlinux.sys}} 和 {{ic|ldlinux.c32}} 是不同的。<br />
# '''第二阶段 - 第二部分''' - '''执行 {{ic|/boot/syslinux/ldlinux.sys}}''' VBR 会加载 {{ic|ldlinux.sys}} 剩余的部分。{{ic|ldlinux.sys}} 所处在的扇区位置不可更改,否则 syslinux 无法启动。{{注意|对于 Btrfs 来说,因为文件不断移动导致{{ic|ldlinux.sys}}扇区的位置不断变化,上述的方法将不会工作。因此在 Btrfs 中整个 {{ic|ldlinux.sys}} 文件会直接紧接着嵌入卷启动记录程序,而不是像其他文件系统那样保存在 {{ic|/boot/syslinux/ldlinux.sys}} 处。}}<br />
# '''第三阶段''' - '''加载 {{ic|/boot/syslinux/ldlinux.c32}}''' {{ic|ldlinux.sys}} 加载剩下的 syslinux 的核心部分 {{ic|/boot/syslinux/ldlinux.c32}}(这部分是因为文件大小限制无法放入 {{ic|ldlinux.sys}} 中的核心模块)。{{ic|ldlinux.c32}} 文件应该在每一个装有 syslinux 的实例中出现,并且与分区中的 {{ic|ldlinux.sys}} 版本相匹配,否则 Syslinux 将无法启动。更多资料请参阅 [https://bugzilla.syslinux.org/show_bug.cgi?id=7]。<br />
# '''第四阶段''' - '''查找并加载配置文件''' 当 syslinux 完全加载完毕,它将自动查找配置文件 {{ic|/boot/syslinux/syslinux.cfg}} (或某些情况下的 {{ic|/boot/syslinux/extlinux.conf}}),如果找到即加载。否则会进入 Syslinux {{ic|boot:}} 的命令提示符。这一步和剩下的'''非核心''' Syslinux 部分(除 {{ic|lib*.c32}} 和 {{ic|ldlinux.c32}}的{{ic|/boot/syslinux/*.c32}} 模块) 需要提供 {{ic|/boot/syslinux/lib*.c32}} (库)模块[https://wiki.syslinux.org/wiki/index.php/Common_Problems#ELF]。同样,{ic|lib*.c32}} 库模块和非核心的 {{ic|*.c32}} 模块需要与分区中的 {{ic|ldlinux.sys}} 版本相匹配。<br />
<br />
=== 在 BIOS 上安装===<br />
<br />
[[install (简体中文)|安装]]软件包 {{Pkg|syslinux}}。<br />
<br />
{{注意|<br />
* [[Partitioning_(简体中文)#GUID_分区表|GPT]] 支持需要安装软件包 {{Pkg|gptfdisk}}。请参考[[#自动安装]]部分。<br />
* [[FAT]] 支持需要安装软件包 {{Pkg|mtools}}。<br />
}}<br />
<br />
安装软件包并不是安装启动加载器。在安装完相关的包后,还需要安装启动加载器代码(到适合的位置,一般是 VBR)才能启动系统;接下来的部分对您的特定系统的特性提供了替代的指令。<br />
<br />
====自动安装====<br />
<br />
{{注意|脚本 {{ic|syslinux-install_update}} 是 Arch Linux 特有的,并不被 Syslinux 的上游提供/支持。请不要向上游,而是直接向 [https://bugs.archlinux.org/ Arch Bug Tracker] 提交关于这个特定脚本的 bug 报告。}}<br />
<br />
<br />
* 执行完 {{ic|syslinux-install_update}} 脚本后,请不要忘记按照[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}。<br />
<br />
{{警告|{{ic|syslinux-install_update}} 脚本很有可能会设置一个与您的特定系统不同的默认根分区。将 {{ic|/boot/syslinux/syslinux.cfg}} 文件中的根分区修改正确对于成功启动是至关重要的。参见[[#内核参数]]。}}<br />
<br />
syslinux-install_update脚本将自动安装启动加载器代码(一般到 VBR)、复制 {{ic|*.c32}} 模块到{{ic|/boot/syslinux}}、设置分区启动标记并将启动代码安装到 MBR。它可以处理软 RAID、[Partitioning (简体中文)#Master Boot Record|MBR]] 和 [Partitioning_(简体中文)#GUID_分区表|GPT]] 磁盘。<br />
<br />
如果您使用分开的启动分区,请用 {{ic|lsblk}} 命令确保它们都已被挂载。如果您没有看到 {{ic|/boot}} 挂载点,请在继续之前将其挂载。<br />
<br />
* {{ic|syslinux-install_update}} 的参数:{{ic|-i}} (安装文件),{{ic|-a}} (将活动分区标上启动标记),{{ic|-m}} (安装 MBR 启动代码): 如果 {{bc|# syslinux-install_update -i -a -m}} 命令失败并报错''Syslinux BIOS install failed'',问题可能出在 {{ic|extlinux}} 可执行文件不能找到包含 {{ic|/boot}} 的分区:<br />
<br />
{{hc|# extlinux --install /boot/syslinux/|<br />
extlinux: cannot find device for path /boot/syslinux<br />
extlinux: cannot open device (null)<br />
}}<br />
<br />
例如,这可能发生在从 [[LILO]] 升级时,后者在引导当前的自定义内核时,将诸如 {{ic|1=root=/dev/sda1}} 的内核命令行参数转写成了等效的数字参数 {{ic|1=root=801}}。这可以从 {{ic|/proc/cmdline}} 和 {{ic|mount}} 等命令的输出确认。 可以通过向 {{ic|extlinux}} 手动指定 {{ic|1=--device=/dev/sda1}} 来解决下文手动安装时的问题,或者先重启到现有的Arch Linux内核,这样会使用 initramfs 来避免此问题。<br />
<br />
{{注意|<br />
* 如果您现在重新启动系统,则会出现 Syslinux 的提示符。如果想要实现系统自动引导或显示引导菜单,您需要创建(或编辑)配置文件。<br />
* 如果您位于另一个根目录(例如,从安装磁盘上),则可以通过 chroot,重定向后安装:<br />
# syslinux-install_update -i -a -m -c /mnt<br />
}}<br />
<br />
*现在您需要按照接下来的[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}文件。<br />
<br />
==== 手动安装 ====<br />
<br />
{{注意|如果您尝试使用Live CD拯救已安装的系统,请确保在执行这些命令之前已经 [[chroot]] 到目标系统。否则您必须在所有文件(除了{{ic|/dev/}})路径之前添加挂载点。}}<br />
<br />
您计划安装Syslinux的启动分区必须包含 FAT,ext2,ext3,ext4 或 Btrfs 文件系统。您不必把它安装在文件系统的根目录上,比如把磁盘 {{ic|/dev/sda1}} 挂在到 {{ic|/boot}}。 例如,可以在{{ic|syslinux}}子目录里安装 Syslinux:<br />
<br />
# mkdir /boot/syslinux<br />
<br />
如果您希望使用除基本引导提示之外的任何菜单或配置,请把 {{ic|/usr/lib/syslinux/bios/}} 里的所有的 {{ic|.c32}} 文件复制到 {{ic|/boot/syslinux/}} 中。请不要使用符号链接。<br />
<br />
# cp /usr/lib/syslinux/bios/*.c32 /boot/syslinux/ <br />
<br />
现在安装启动加载器。对 挂载后的 FAT,ext2/3/4,或 btrfs 启动分区使用 ''extlinux'' 安装:<br />
<br />
# extlinux --install /boot/syslinux<br />
<br />
替代的,对一个'''没有被挂载'''的 FAT 启动分区使用''syslinux'' 安装:<br />
<br />
# syslinux --directory syslinux --install /dev/sda1<br />
<br />
在此之后,继续安装适用于对应分区表的 Syslinux 引导代码:<br />
* [[#MBR 分区表]]上会安装 {{ic|mbr.bin}}<br />
* [[#GPT 分区表]]上会安装 {{ic|gptmbr.bin}}<br />
这些会在下面的内容中详细描述。<br />
<br />
更多信息,请参考 [[Partitioning (简体中文)#Master Boot Record|MBR 分区表]]。<br />
{{提示|如果您不确定您的分区表类型,可以通过 {{ic|blkid -s PTTYPE -o value /dev/sda}} 来检查。}}<br />
{{Note|对于一个无盘安装实例,不需要向MBR中安装Syslinux 引导代码。您可以跳过这一段,直接跳到[[#配置]]部分。更多信息请参考[https://unix.stackexchange.com/questions/103501/boot-partiotionless-disk-with-syslinux]。}}<br />
<br />
===== MBR 分区表 =====<br />
<br />
对于一个安装在 [[Partitioning (简体中文)#Master Boot Record|MBR 分区表]]上的实例,请确保您的启动分区已经被标记为活动分区(有启动标志)。您可以用 [[fdisk (简体中文)|fdisk]]、[[parted (简体中文)|parted]] 等工具确认。它应该看起来像这个样子:<br />
<br />
{{hc|# fdisk -l /dev/sda|<br />
[...]<br />
Device Boot Start End Blocks Id System<br />
/dev/sda1 * 2048 104447 51200 83 Linux<br />
/dev/sda2 104448 625142447 312519000 83 Linux<br />
}}<br />
<br />
安装 MBR 启动代码:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sda<br />
<br />
Syslinux 提供一个替代的分区表 {{ic|altmbr.bin}}。这个分区表''不会''扫描可启动分区,而是从 MBR 的最后一个字节中的值读取用于启动的分区。下面的操作会将这个分区表写入。<br />
<br />
# printf '\x5' | cat /usr/lib/syslinux/bios/altmbr.bin - | dd bs=440 count=1 iflag=fullblock of=/dev/sda<br />
<br />
在这个例子中,一个数值为5(十六进制的)的单个字节会被添加到 {{ic|altmbr.bin}} 的内容后,并向 {{ic|sda}} 的 MBR 分区表中写入440字节的内容。Syslinux 会被安装到磁盘的第一个逻辑分区({{ic|/dev/sda5}})。<br />
<br />
===== GPT 分区表 =====<br />
<br />
对于一个安装在 [[Partitioning (简体中文)#GUID 分区表|GPT 分区表]]上的实例, 请确保您的启动分区 {{ic|/boot}} 被设置上了 2 号属性"传统BIOS可启动"(legacy BIOS bootable)。[[Parted (简体中文)|Parted]] 可以使用"legacy_boot"参数实现,而 [[GPT fdisk (简体中文)|sgdisk]]则需要输入下面的命令:<br />
<br />
# sgdisk /dev/sda --attributes=1:set:2<br />
<br />
这会在 {{ic|/dev/sda}} 的第一个分区设置"传统BIOS可启动"属性。检查命令:<br />
<br />
{{hc|1=# sgdisk /dev/sda --attributes=1:show|2=<br />
1:2:1 (legacy BIOS bootable)<br />
}}<br />
<br />
安装 MBR 启动代码:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sda<br />
<br />
== UEFI 系统 ==<br />
<br />
{{注意|<br />
* {{ic|efi64}} denotes x86_64 UEFI systems, for IA32 (32-bit) EFI replace {{ic|efi64}} with {{ic|efi32}} in the below commands.<br />
* For Syslinux, the kernel and initramfs files need to be in the [[EFI system partition]] (aka ESP), as Syslinux does not (currently) have the ability to access files outside its own partition (i.e. outside ESP in this case). For this reason, it is recommended to mount ESP at {{ic|/boot}}.<br />
* The automatic install script {{ic|/usr/bin/syslinux-install_update}} does not support UEFI install.<br />
* The configuration syntax of {{ic|syslinux.cfg}} for UEFI is same as that of BIOS.<br />
}}<br />
<br />
=== Limitations of UEFI Syslinux ===<br />
<br />
* UEFI Syslinux application {{ic|syslinux.efi}} cannot be signed by {{ic|sbsign}} (from {{Pkg|sbsigntools}}) for UEFI Secure Boot. Bug report: [https://bugzilla.syslinux.org/show_bug.cgi?id=8]<br />
* Using TAB to edit kernel parameters in UEFI Syslinux menu might lead to garbaged display (text on top of one another). Bug report: [https://bugzilla.syslinux.org/show_bug.cgi?id=9]<br />
* UEFI Syslinux does not support chainloading other EFI applications like {{ic|UEFI Shell}} or {{ic|Windows Boot Manager}}. Enhancement request: [https://bugzilla.syslinux.org/show_bug.cgi?id=17]<br />
* In some cases, UEFI Syslinux might not boot in some Virtual Machines like [[QEMU]]/OVMF or [[VirtualBox]] or some [[VMware]] products/versions and in some UEFI emulation environments like DUET. A Syslinux contributor has confirmed no such issues present on VMware Workstation 10.0.2 and Syslinux-6.02 or later. Bug reports: [https://bugzilla.syslinux.org/show_bug.cgi?id=21], [https://bugzilla.syslinux.org/show_bug.cgi?id=23] and [https://bugzilla.syslinux.org/show_bug.cgi?id=72]<br />
* Memdisk is not available for UEFI. Enhancement request: [https://bugzilla.syslinux.org/show_bug.cgi?id=30]<br />
<br />
=== Installation on UEFI ===<br />
<br />
{{Note|In the commands related to UEFI, {{ic|''esp''}} denotes the mountpoint of the [[EFI system partition]] aka ESP.}}<br />
<br />
* Install the {{Pkg|syslinux}} and {{Pkg|efibootmgr}} packages from the [[official repositories]]. Then setup Syslinux in the ESP as follows:<br />
* Copy Syslinux files to ESP:<br />
<br />
# mkdir -p ''esp''/EFI/syslinux<br />
# cp -r /usr/lib/syslinux/efi64/* ''esp''/EFI/syslinux<br />
<br />
* Setup boot entry for Syslinux using [[efibootmgr]]:<br />
<br />
# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/syslinux/syslinux.efi --label "Syslinux" --verbose<br />
<br />
where {{ic|/dev/sdXY}} is the partition containing the bootloader.<br />
<br />
* Create or edit {{ic|''esp''/EFI/syslinux/syslinux.cfg}} by following [[#Configuration]].<br />
<br />
{{Note|<br />
* The config file for UEFI is {{ic|''esp''/EFI/syslinux/syslinux.cfg}}, not {{ic|/boot/syslinux/syslinux.cfg}}. Files in {{ic|/boot/syslinux/}} are BIOS specific and not related to UEFI Syslinux.<br />
* When booted in BIOS mode, {{Pkg|efibootmgr}} will not be able to set EFI nvram entry for {{ic|/EFI/syslinux/syslinux.efi}}. To work around, place resources at the default EFI location: {{ic|''esp''/EFI/syslinux/* -> ''esp''/EFI/BOOT/*}} and {{ic|''esp''/EFI/syslinux/syslinux.efi -> ''esp''/EFI/BOOT/bootx64.efi}}<br />
}}<br />
<br />
== Configuration ==<br />
<br />
The Syslinux configuration file, {{ic|syslinux.cfg}}, should be created in the same directory where you installed Syslinux. In our case, {{ic|/boot/syslinux/}} for BIOS systems and {{ic|''esp''/EFI/syslinux/}} for UEFI systems.<br />
<br />
The bootloader will look for either {{ic|syslinux.cfg}} (preferred) or {{ic|extlinux.conf}}<br />
<br />
{{Tip|<br />
* Instead of {{ic|LINUX}}, the keyword {{ic|KERNEL}} can also be used. {{ic|KERNEL}} tries to detect the type of the file, while {{ic|LINUX}} always expects a Linux kernel. <br />
* {{ic|TIMEOUT}} value is in units of '''0.1 seconds'''.<br />
}}<br />
<br />
=== Examples ===<br />
<br />
{{Note|<br />
* Any configuration file found in the examples needs to be edited to set the proper kernel parameters. See section [[#Kernel parameters]].<br />
* Please, pay close attention to the paths. The examples may not be suitable for your installation, especially when using UEFI.<br />
* The following examples assume that the kernel and initrd files are located one directory level up in relation to the location of {{ic|syslinux.cfg}} (or, more precisely, one level up from the working directory).<br />
}}<br />
<br />
==== Boot prompt ====<br />
<br />
This is a simple configuration file that will show a {{ic|boot:}} prompt and will automatically boot after 5 seconds. If you want to boot directly without seeing a prompt, set {{ic|PROMPT}} to {{ic|0}}.<br />
<br />
Configuration:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
PROMPT 1<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
==== Text boot menu ====<br />
<br />
Syslinux also allows you to use a boot menu. To use it, copy the {{ic|menu}} and {{ic|libutil}} modules to your Syslinux directory:<br />
<br />
# cp /usr/lib/syslinux/bios/{menu,libutil}.c32 /boot/syslinux/<br />
<br />
Since version 5.00, additional {{ic|lib*.c32}} library modules are frequently needed too. See [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies the Syslinux wiki] for the module dependency tree.<br />
<br />
Configuration:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI menu.c32<br />
PROMPT 0<br />
<br />
MENU TITLE Boot Menu<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
For more details about the menu system, see [https://wiki.syslinux.org/wiki/index.php/Menu the Syslinux wiki].<br />
<br />
==== Graphical boot menu ====<br />
<br />
Syslinux also allows you to use a graphical boot menu. To use it, copy the {{ic|vesamenu}} COM32 module to your Syslinux folder:<br />
<br />
# cp /usr/lib/syslinux/bios/vesamenu.c32 /boot/syslinux/<br />
<br />
Since version 5.00, additional {{ic|lib*.c32}} library modules are frequently needed too. See [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies the Syslinux wiki] for the module dependency tree.<br />
<br />
{{Note| If you are using [[UEFI]], make sure to copy from {{ic|/usr/lib/syslinux/efi64/}} (or {{ic|efi32}} for IA32 (32-bit) EFI systems), otherwise you will be presented with a black screen. In that case, boot from a live medium and use [[chroot]] to make the appropriate changes.}}<br />
<br />
This configuration uses the same menu design as the Arch Install CD, its config can be found at [https://projects.archlinux.org/archiso.git/tree/configs/releng/syslinux projects.archlinux.org]. The [https://projects.archlinux.org/archiso.git/plain/configs/releng/syslinux/splash.png Arch Linux background image] can be downloaded from there, too. Copy the image to {{ic|/boot/syslinux/splash.png}}.<br />
<br />
Configuration:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI vesamenu.c32<br />
DEFAULT arch<br />
PROMPT 0<br />
MENU TITLE Boot Menu<br />
MENU BACKGROUND splash.png<br />
TIMEOUT 50<br />
<br />
MENU WIDTH 78<br />
MENU MARGIN 4<br />
MENU ROWS 5<br />
MENU VSHIFT 10<br />
MENU TIMEOUTROW 13<br />
MENU TABMSGROW 11<br />
MENU CMDLINEROW 11<br />
MENU HELPMSGROW 16<br />
MENU HELPMSGENDROW 29<br />
<br />
# Refer to https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32<br />
<br />
MENU COLOR border 30;44 #40ffffff #a0000000 std<br />
MENU COLOR title 1;36;44 #9033ccff #a0000000 std<br />
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all<br />
MENU COLOR unsel 37;44 #50ffffff #a0000000 std<br />
MENU COLOR help 37;40 #c0ffffff #a0000000 std<br />
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std<br />
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std<br />
MENU COLOR msg07 37;40 #90ffffff #a0000000 std<br />
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std<br />
<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
Since Syslinux 3.84, {{ic|vesamenu.c32}} supports the {{ic|MENU RESOLUTION $WIDTH $HEIGHT}} directive.<br />
To use it, insert {{ic|MENU RESOLUTION 1440 900}} into your config for a 1440x900 resolution.<br />
However, the background picture has to have exactly the right resolution, as Syslinux will otherwise refuse to load the menu.<br />
<br />
To center the menu and adjust resolution, use {{ic|MENU RESOLUTION}}, {{ic|MENU HSHIFT $N}} and {{ic|MENU VSHIFT $N}} where {{ic|$N}} is a positive number. The default values are both {{ic|0}} which is the upper-left hand corner of your monitor. Conversely, a negative number starts from the opposite end of the screen (e.g. {{ic|VHSHIFT -4}} would be 4 rows from the bottom of the screen).<br />
<br />
To move the menu to the center, add or edit these values:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
MENU RESOLUTION 800 600 # or whatever your screen resolution is<br />
MENU WIDTH 78 # width of the menu also required to bring the menu box to size<br />
MENU VSHIFT 10 # moves menu down<br />
MENU HSHIFT 10 # moves menu right<br />
</nowiki>}}<br />
<br />
VESA standards are commonly a maximum of 25 rows and 80 columns, so going higher than those values might move the menu off the screen, potentially requiring editing from a rescue CD.<br />
<br />
=== Kernel parameters ===<br />
<br />
The [[kernel parameters]] are set by using the {{ic|APPEND}} directive in {{ic|syslinux.cfg}}: <br />
for each {{ic|LABEL}} entry, a maximum of one [https://wiki.syslinux.org/wiki/index.php/Config#APPEND APPEND] line is accepted (i.e. spanning multiple lines is not valid).<br />
<br />
It is recommended to make the following changes for the "fallback" entry as well.<br />
<br />
'''In the simplest case''', the partition name in the {{ic|root}} parameter needs to be replaced. Change {{ic|/dev/sda2}} to point to the correct root partition.<br />
<br />
APPEND root=/dev/sda2<br />
<br />
'''If you want to use [[UUID]]''' for [[persistent block device naming]] change the {{ic|APPEND}} line as follows, substituting {{ic|1234}} with the {{ic|UUID}} of your root partition:<br />
<br />
APPEND root=UUID=''1234'' rw<br />
<br />
'''If you use [[dm-crypt]] encryption''' change the {{ic|APPEND}} line to use your encrypted volume:<br />
<br />
APPEND root=/dev/mapper/''name'' cryptdevice=/dev/sda2:''name'' rw<br />
<br />
'''If you are using software''' [[Wikipedia:RAID|RAID]] using [http://neil.brown.name/blog/mdadm mdadm], change the {{ic|APPEND}} line to accommodate your RAID arrays. As an example the following accommodates three RAID 1 arrays and sets the appropriate one as root:<br />
<br />
APPEND root=/dev/md1 rw md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4<br />
<br />
If booting from a software raid partition fails using the kernel device node method above an alternative, a more reliable, way is to use partition labels:<br />
<br />
APPEND root=LABEL=''THEROOTPARTITIONLABEL'' rw<br />
<br />
'''If booting a [[btrfs]] subvolume''', amend the {{ic|APPEND}} line with {{ic|rootflags<nowiki>=</nowiki>subvol<nowiki>=</nowiki><root subvolume>}}. For example, where {{ic|/dev/sda2}} has been mounted as a btrfs subvolume called 'ROOT' (e.g. {{ic|mount -o noatime,subvol<nowiki>=</nowiki>ROOT /dev/sda2 /mnt}}), then the {{ic|APPEND}} line would need to be modified as follows:<br />
<br />
APPEND root=/dev/sda2 rw rootflags=subvol=ROOT<br />
<br />
A failure to do so will otherwise result in the following error message: {{ic|ERROR: Root device mounted successfully, but /sbin/init does not exist.}}<br />
<br />
=== Auto boot ===<br />
<br />
If you do not want to see the Syslinux menu at all, use the [[#Boot prompt]], and set {{ic|PROMPT}} to {{ic|0}} and comment out any {{ic|UI}} menu entries. Setting the {{ic|TIMEOUT}} variable to {{ic|0}} might also be a good idea. Make sure there is a {{ic|DEFAULT}} set in your {{ic|syslinux.cfg}}. Holding either {{ic|Shift}} or {{ic|Alt}}, or setting either {{ic|Caps Lock}} or {{ic|Scroll Lock}}, during boot will allow for options other than default to be used.<br />
See the [https://wiki.syslinux.org/wiki/index.php/Directives/special_keys upstream wiki] for additional alternatives.<br />
<br />
=== Security ===<br />
<br />
Syslinux has two levels of bootloader security: a menu master password, and a per-menu-item password. In {{ic|syslinux.cfg}}, use<br />
<br />
MENU MASTER PASSWD passwd <br />
<br />
to set a master bootloader password, and<br />
<br />
MENU PASSWD passwd <br />
<br />
within a {{ic|LABEL}} block to password-protect individual boot items.<br />
<br />
The passwd can be either a cleartext password or hashed: [https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32 see official documentation].<br />
<br />
=== Chainloading ===<br />
<br />
Syslinux BIOS cannot directly chainload files located on other partitions; however, {{ic|chain.c32}} can boot a partition boot sector (VBR) or another disk's MBR.<br />
<br />
==== Chainloading a partition's VBR ====<br />
<br />
If you want to chainload other operating systems (such as Windows) or boot loaders, copy the {{ic|chain.c32}} module to the Syslinux directory (additional {{ic|lib*.c32}} library modules might be needed too; for details, see the instructions in the previous section). Then create a section in the configuration file:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND hd0 3<br />
...<br />
}}<br />
<br />
{{ic|hd0 3}} is the third partition on the first BIOS drive - drives are counted from zero, but partitions are counted from one. <br />
<br />
{{Note|For Windows, this skips the system's own boot manager ({{ic|bootmgr}}), which is required for a few important updates ([https://support.microsoft.com/kb/2883200 eg.]) to complete. In such cases it may be advisable to temporarily set the MBR boot flag to the Windows partition (eg. with [[GParted]]), let the update finish installing, and then reset the flag to the Syslinux partition (eg. with Windows's own [https://www.online-tech-tips.com/computer-tips/set-active-partition-vista-xp DiskPart]).}}<br />
<br />
==== Chainloading a disk's MBR ====<br />
<br />
If you are unsure about which drive your BIOS thinks is "first", you can instead use the MBR identifier, or if you are using GPT, the filesystem labels. To use the MBR identifier, run the command<br />
<br />
{{hc|# fdisk -l /dev/sdb|<nowiki><br />
Disk /dev/sdb: 128.0 GB, 128035676160 bytes <br />
255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors<br />
Units = sectors of 1 * 512 = 512 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0xf00f1fd3<br />
<br />
Device Boot Start End Blocks Id System<br />
/dev/sdb1 2048 4196351 2097152 7 HPFS/NTFS/exFAT<br />
/dev/sdb2 4196352 250066943 122935296 7 HPFS/NTFS/exFAT<br />
</nowiki>}}<br />
<br />
replacing {{ic|/dev/sdb}} with the drive you wish to chainload. Using the hexadecimal number under Disk identifier: {{ic|0xf00f1fd3}} in this case, the syntax in {{ic|syslinux.cfg}} is<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xf00f1fd3<br />
...<br />
}}<br />
<br />
For more details about chainloading, see [https://wiki.syslinux.org/wiki/index.php/Comboot/chain.c32 the Syslinux wiki].<br />
<br />
==== Chainloading other boot loaders ====<br />
<br />
If you have [[GRUB]] installed on the same partition, you can chainload it by using: <br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2<br />
MENU LABEL Grub2<br />
COM32 chain.c32<br />
APPEND file=../grub/boot.img<br />
...<br />
</nowiki>}}<br />
<br />
Alternatively, it is also possible to load [[GRUB]] as a linux kernel by prepending {{ic|lnxboot.img}} to {{ic|core.img}}. The file {{ic|lnxboot.img}} is part of {{ic|core/grub}} and can be found in {{ic|/usr/lib/grub/i386-pc}}.<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2lnx<br />
MENU LABEL Grub2 (lnxboot)<br />
LINUX ../grub/i386-pc/lnxboot.img<br />
INITRD ../grub/i386-pc/core.img<br />
...<br />
</nowiki>}}<br />
<br />
This may be required for booting from ISO images.<br />
<br />
==== Chainloading other Linux systems ====<br />
<br />
{{Accuracy|Among other inaccuracies... 1_ There is no obligation to install yet another boot loader if you already have one related to the other partition/OS (e.g. GRUB2 installed in the MBR or in the VBR of the partition being chainloaded to). 2_ Syslinux (in any of its derivatives) is never "installed to the MBR", so mentioning the MBR in this section without any explanation of what it is being meant or how to do it in practical terms is just adding confusion. 3_ Typos and misspelling. 4_No need to explain (yet again) how to install some (other) bootloader to some (other) partition / OS; just how to chainload from Syslinux to that other partition / bootloader / OS.}}<br />
<br />
Chainloading another bootloader such as Windows' is pretty obvious, as there is a definite bootloader to chain to. But with Syslinux, it is only able to load files residing on the same partition as the configuration file. Thus, if you have another version of Linux on a separate partition, without a shared {{ic|/boot}}, it becomes ''necessary'' to employ EXTLINUX rather than the other OS's default bootloader (eg. GRUB2). Essentially, EXTLINUX can be installed on the partition superblock/[[wikipedia:Volume_boot_record|VBR]] and be called as a ''separate bootloader'' right from the MBR installed by Syslinux. EXTLINUX is part of The Syslinux Project and is included with the {{Pkg|syslinux}} package.<br />
<br />
The following instructions assume you have Syslinux installed already. These instructions will also assume that the typical Arch Linux configuration path of {{ic|/boot/syslinux}} is being used and the chainloaded system's {{ic|/}} is on {{ic|/dev/sda3}}. <br />
<br />
From a booted Linux (likely the partition that Syslinux is set up to boot), mount the other system's root partition to your desired mount point. In this example this will be {{ic|/mnt}}. Also, if a separate {{ic|/boot}} partition is used on the second operating system, that will also need to be mounted. The example assumes this is {{ic|/dev/sda2}}.<br />
<br />
# mount /dev/sda3 /mnt<br />
# mount /dev/sda2 /mnt/boot (only necessary for separate /boot)<br />
<br />
Install EXTLINUX to the partition VBR, and copy necessary {{ic|*.c32}} files<br />
<br />
# extlinux -i /mnt/boot/syslinux/ (first create the directory if necessary)<br />
# cp /usr/lib/syslinux/bios/*.c32 /mnt/boot/syslinux<br />
<br />
Create {{ic|/mnt/boot/syslinux/syslinux.cfg}}. You can use the other Linux's bootloader menu file for reference. Below is an example:<br />
<br />
{{hc|/mnt/boot/syslinux/syslinux.cfg '''on /dev/sda3'''|<nowiki><br />
TIMEOUT 10<br />
<br />
UI menu.c32<br />
<br />
LABEL OtherLinux<br />
LINUX /boot/vmlinuz-linux<br />
INITRD /boot/initramfs-linux.img<br />
APPEND root=/dev/sda3 rw quiet<br />
<br />
LABEL MAIN<br />
COM32 chain.c32<br />
APPEND hd0 0<br />
</nowiki>}}<br />
<br />
And then add an entry to your main syslinux.cfg <br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
LABEL OtherLinux<br />
COM32 chain.c32<br />
APPEND hd0 3<br />
</nowiki>}}<br />
<br />
Note that the other Linux entry in {{ic|<other-OS>/boot/syslinux/syslinux.cfg}} will need to be edited each time you update this OS's kernel unless it has symlinks to its latest kernel and initrd in {{ic|/}}. Since we are booting the kernel directly and not chainloading the other-OS's default bootloader.<br />
<br />
=== Using memtest ===<br />
<br />
Install {{Pkg|memtest86+}} from the [[official repositories]].<br />
<br />
Use this {{ic|LABEL}} section to launch [[Wikipedia:Memtest86|memtest]]:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL memtest<br />
MENU LABEL Memtest86+<br />
LINUX ../memtest86+/memtest.bin<br />
...<br />
}}<br />
<br />
{{Note|If you are using PXELINUX, change the name from {{ic|memtest.bin}} to {{ic|memtest}} since PXELINUX treats the file with ''.bin'' extension as a boot sector and loads only 2KB of it.}}<br />
<br />
=== HDT ===<br />
<br />
[https://wiki.syslinux.org/wiki/index.php/Hdt_(Hardware_Detection_Tool) HDT (Hardware Detection Tool)] displays hardware information. Like before, the {{ic|.c32}} file has to be copied from {{ic|/boot/syslinux/}}. Additional {{ic|lib*.c32}} library modules might be needed too.<br />
For PCI info, copy {{ic|/usr/share/hwdata/pci.ids}} to {{ic|/boot/syslinux/pci.ids}} and add the following to your configuration file:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL hdt<br />
MENU LABEL Hardware Info<br />
COM32 hdt.c32<br />
}}<br />
<br />
=== Reboot and power off ===<br />
<br />
{{Note|As of Syslinux 6.03, {{ic|poweroff.c32}} only works with [[Wikipedia:Advanced Power Management|APM]] and not with [[Wikipedia:Advanced Configuration and Power Interface|ACPI]]. For a possible solution, see [https://www.syslinux.org/archives/2012-March/017661.html acpioff: COM32 module to shut off machine using ACPI].}}<br />
<br />
Use the following sections to reboot or power off your machine:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL reboot<br />
MENU LABEL Reboot<br />
COM32 reboot.c32<br />
<br />
LABEL poweroff<br />
MENU LABEL Power Off<br />
COM32 poweroff.c32<br />
}}<br />
<br />
=== Clear menu ===<br />
<br />
To clear the screen when exiting the menu, add the following line:<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU CLEAR<br />
}}<br />
<br />
=== Keyboard layout ===<br />
<br />
If you often have to edit your boot command with diverse parameters in the Syslinux boot prompt, then you might want to remap your keyboard layout. This allows you to enter "=", "/" and other characters easily on a non-US keyboard.<br />
<br />
{{Note|{{ic|keytab-lilo}}, which is included in the {{Pkg|syslinux}} package, is a perl script invoking the ''loadkeys'' program.}}<br />
<br />
To create a compatible keymap (e.g. a german one) run:<br />
<br />
# keytab-lilo /usr/share/kbd/keymaps/i386/qwerty/us.map.gz /usr/share/kbd/keymaps/i386/qwertz/de.map.gz > /boot/syslinux/de.ktl<br />
<br />
Now edit {{ic|syslinux.cfg}} and add:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
KBDMAP de.ktl<br />
}}<br />
<br />
See the [https://wiki.syslinux.org/wiki/index.php/Directives/kbdmap Syslinux wiki] for more details.<br />
<br />
=== Hiding the menu ===<br />
<br />
Use the option:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU HIDDEN<br />
}}<br />
to hide the menu while displaying only the timeout. Press any key to bring up the menu.<br />
<br />
=== PXELINUX ===<br />
<br />
{{Note|For UEFI, Syslinux uses the same binary for disk booting and network booting. Loading files from TFTP or other network protocols will require network booting Syslinux. }}<br />
<br />
PXELINUX is provided by the {{Pkg|syslinux}} package.<br />
<br />
For BIOS clients, copy the {{ic|<nowiki>{l,}pxelinux.0</nowiki>}} bootloader to the boot directory of the client. For version 5.00 and newer, also copy {{ic|ldlinux.c32}} from the same package:<br />
<br />
# cp /usr/lib/syslinux/bios/pxelinux.0 "''TFTP_root''/boot/"<br />
# cp /usr/lib/syslinux/bios/ldlinux.c32 "''TFTP_root''/boot/"<br />
# mkdir "''TFTP_root''/boot/pxelinux.cfg"<br />
<br />
We also created the {{ic|pxelinux.cfg}} directory, which is where PXELINUX searches for configuration files by default. Because we do not want to discriminate between different host MACs, we then create the {{ic|default}} configuration.<br />
<br />
{{hc|''TFTP_root''/boot/pxelinux.cfg/default|<nowiki><br />
DEFAULT linux<br />
<br />
LABEL linux<br />
KERNEL vmlinuz-linux<br />
APPEND initrd=initramfs-linux.img quiet ip=:::::eth0:dhcp nfsroot=10.0.0.1:/arch<br />
</nowiki>}}<br />
<br />
Or if you are using NBD, use the following append line:<br />
<br />
{{bc|<nowiki>append ro initrd=initramfs-linux.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_port=10809 nbd_name=arch root=/dev/nbd0</nowiki>}}<br />
<br />
{{Note|You will need to change {{ic|nbd_host}} and/or {{ic|nfsroot}}, respectively, to match your network configuration (the address of the NFS/NBD server)}}<br />
<br />
PXELINUX uses the same configuration syntax as SYSLINUX; refer to the upstream documentation for more information.<br />
<br />
The kernel and initramfs will be transferred via TFTP, so the paths to those are going to be relative to the TFTP root. Otherwise, the root filesystem is going to be the NFS mount itself, so those are relative to the root of the NFS server.<br />
<br />
To actually load PXELINUX, replace {{ic|filename "/grub/i386-pc/core.0";}} in {{ic|/etc/dhcpd.conf}} with {{ic|filename "/pxelinux.0"}} (or with {{ic|filename "/lpxelinux.0"}}).<br />
<br />
=== Booting ISO9660 image files with memdisk ===<br />
<br />
Syslinux supports booting from ISO images directly using the [https://wiki.syslinux.org/wiki/index.php/MEMDISK memdisk] module, see [[Multiboot USB drive#Using Syslinux and memdisk]] for examples.<br />
<br />
=== Serial console ===<br />
<br />
See [[Working with the serial console#Syslinux]].<br />
<br />
=== Boot another OS once ===<br />
<br />
It is possible to temporarily change the default Syslinux action and boot another label only during the next boot. The following command shows how to boot the {{ic|archfallback}} label once:<br />
<br />
# extlinux -o archfallback /boot/syslinux<br />
<br />
During the next boot, the specified label will be booted without any Syslinux prompt showing up. The default Syslinux boot behaviour will be restored on the next reboot.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Failed to load ldlinux ===<br />
<br />
An error message such as "Failed to load ldlinux.c32" during the initial boot can be triggered by many diverse reasons.<br />
One potential reason could be a change in file system tools or in a file system structure, depending on its own version.<br />
<br />
{{Warning|1=As of Syslinux 6.03, some of the features of the supported file systems are not supported by the bootloader. See [https://wiki.syslinux.org/wiki/index.php/Filesystem] for more information.}}<br />
<br />
{{Note|1=There is no direct and unique correspondence between a message such as {{ic|Failed to load ldlinux.c32}} and a problem related to the file system:<br />
* Other alternative symptoms, instead of this message, could also indicate a problem related to the file system.<br />
* The message does not necessarily mean that the problem is related to the file system; there are other possible reasons for this type of messages.<br />
}}<br />
<br />
See also [https://wiki.syslinux.org/wiki/index.php/Common_Problems#Failed_to_load_ldlinux] (the whole page might be relevant for troubleshooting too).<br />
<br />
=== Using the Syslinux prompt===<br />
<br />
You can type in the {{ic|LABEL}} name of the entry that you want to boot (as per your {{ic|syslinux.cfg}}). If you used the example configurations, just type:<br />
<br />
boot: arch<br />
<br />
If you get an error that the configuration file could not be loaded, you can pass your needed boot parameters, e.g.:<br />
<br />
boot: ../vmlinuz-linux root=/dev/sda2 rw initrd=../initramfs-linux.img<br />
<br />
If you do not have access to {{ic|boot:}} in [[Ramdisk|ramfs]], and therefore temporarily unable to boot the kernel again,<br />
:1. Create a temporary directory, in order to mount your root partition (if it does not exist already):<br />
# mkdir -p /new_root<br />
:2. Mount {{ic|/}} under {{ic|/new_root}} (in case {{ic|/boot/}} is on the same partition, otherwise you will need to mount them both):<br />
{{Note|Busybox cannot mount {{ic|/boot}} if it is on its own ext2 partition.}}<br />
# mount /dev/sd[a-z][1-9] /new_root<br />
<br />
:3. Use {{ic|vim}} and edit {{ic|syslinux.cfg}} again to suit your needs and save file.<br />
:4. Reboot.<br />
<br />
=== Fsck fails on root partition ===<br />
<br />
In the case of a badly corrupted root partition (in which the journal is damaged), in the ramfs emergency shell, mount the root file system:<br />
<br />
# mount /dev/''root partition'' /new_root<br />
<br />
And grab the tune2fs binary from the root partition (it is not included in Syslinux):<br />
<br />
# cp /new_root/sbin/tune2fs /sbin/<br />
<br />
Follow the instructions at [[Fsck#ext2fs_:_no_external_journal|ext2fs: no external journal]] to create a new journal for the root partition.<br />
<br />
=== No Default or UI found on some computers ===<br />
<br />
Certain motherboard manufacturers have less compatibility for booting from USB devices than others. While an ext4 formatted USB drive may boot on a more recent computer, some computers may hang if the boot partition containing the ''kernel'' and ''initrd'' are not on a FAT16 partition. To prevent an older machine from loading {{ic|ldlinux}} and failing to read {{ic|syslinux.cfg}}, create a partition (≤ 2 GB) and format to [[FAT16]] using {{Pkg|dosfstools}}:<br />
<br />
# mkfs.fat -F 16 /dev/sda1<br />
<br />
then install and configure Syslinux.<br />
<br />
=== Missing operating system ===<br />
<br />
* Check that you have installed {{ic|gptmbr.bin}} for GPT and {{ic|mbr.bin}} for MBR partition table. A "Missing operating system" message comes from {{ic|mbr.bin}} while {{ic|gptmbr.bin}} would show a "Missing OS" message.<br />
* Check whether the partition that contains {{ic|/boot}} has the "boot" flag enabled.<br />
* Check whether the first partition at the boot device starts at sector 1 rather than sector 63 or 2048. Check this with {{ic|fdisk -l}}. If it starts at sector 1, you can move the partition(s) with {{ic|gparted}} from a rescue disk. Or, if you have a separate boot partition, you can back up {{ic|/boot}} with <br />
<br />
# cp -a /boot /boot.bak<br />
<br />
and then boot up with the Arch install disk. Next, use {{ic|cfdisk}} to delete the {{ic|/boot}} partition, and recreate it. This time it should begin at the proper sector, '''63'''. Now mount your partitions and {{ic|chroot}} into your mounted system, as described in the [[installation guide]]. Restore {{ic|/boot}} with the command<br />
<br />
# cp -a /boot.bak/ /boot/<br />
<br />
Check if {{ic|/etc/fstab}} is correct, run:<br />
<br />
# syslinux-install_update -iam<br />
<br />
and reboot.<br />
<br />
You will also get this error if you are trying to boot from a md [[RAID]] 1 array and created the array with a too new version of the metadata that Syslinux does not understand. As of August 2013 by default mdadm will create an array with version 1.2 metadata, but Syslinux does not understand metadata newer than 1.0. If this is the case you will need to recreate your [[RAID]] array using the {{ic|1=--metadata=1.0}} flag to mdadm.<br />
<br />
=== Windows boots up, ignoring Syslinux ===<br />
<br />
'''Solution:''' Make sure the partition that contains {{ic|/boot}} has the boot flag enabled. Also, make sure the boot flag is not enabled on the Windows partition. See the [[#Chainloading a partition's VBR|installation section]] above.<br />
<br />
The MBR that comes with Syslinux looks for the first active partition that has the boot flag set. The Windows partition was likely found first and had the boot flag set. If you wanted, you could use the MBR that Windows or MS-DOS {{ic|fdisk}} provides.<br />
<br />
=== Menu entries do nothing ===<br />
<br />
You select a menu entry and it does nothing, it just ''"refreshes"'' the menu. This usually means that you have an error in your {{ic|syslinux.cfg}} file. Hit {{ic|Tab}} to edit your boot parameters. Alternatively, press {{ic|Esc}} and type in the {{ic|LABEL}} of your boot entry (e.g. ''arch''). Another cause could be that you do not have a kernel installed. Find a way to access your file system (through live CD, etc) and make sure that {{ic|/mount/vmlinuz-linux}} exists and does not have a size of 0. If this is the case, reinstall your kernel.<br />
<br />
=== Cannot remove ldlinux.sys ===<br />
<br />
The {{ic|ldlinux.sys}} file has the [[File_permissions_and_attributes#File_attributes|immutable attribute]] set, which prevents it from being deleted or overwritten. This is because the sector location of the file must not change or else Syslinux has to be reinstalled. To remove it, run:<br />
<br />
# chattr -i /boot/syslinux/ldlinux.sys<br />
# rm /boot/syslinux/ldlinux.sys<br />
<br />
=== White block in upper left corner when using vesamenu ===<br />
<br />
Problem:<br />
''As of linux-3.0, the modesetting driver tries to keep the current contents of the screen after changing the resolution (at least it does so with my Intel, when having Syslinux in text mode). It seems that this goes wrong when combined with the vesamenu module in Syslinux (the white block is actually an attempt to keep the Syslinux menu, but the driver fails to capture the picture from vesa graphics mode).''<br />
<br />
If you have a custom resolution and a {{ic|vesamenu}} with early modesetting, try to append the following in {{ic|syslinux.cfg}} to remove the white block and continue in graphics mode:<br />
<br />
APPEND root=/dev/sda6 rw 5 '''vga=current''' quiet splash<br />
<br />
=== Chainloading Windows does not work, when it is installed on another drive ===<br />
<br />
If Windows is installed on a different drive than Arch and you have trouble chainloading it, try the following configuration:<br />
<br />
{{bc|<br />
LABEL Windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xdfc1ba9e swap<br />
}}<br />
<br />
Replace the mbr code with the one your Windows drive has (details [[#Chainloading|above]]), and append {{ic|swap}} to the options.<br />
<br />
=== Read bootloader log ===<br />
<br />
In some cases (e.g. bootloader unable to boot kernel) it is highly desirable to get more information from the boot process. ''Syslinux'' prints error messages to screen but the boot menu quickly overwrites the text. To avoid losing the log information, disable {{ic|UI menu}} in {{ic|syslinux.cfg}} and use the default "command-line" prompt. It means:<br />
<br />
* avoid the {{ic|UI}} directive<br />
* avoid {{ic|ONTIMEOUT}}<br />
* avoid {{ic|ONERROR}}<br />
* avoid {{ic|MENU CLEAR}}<br />
* use a higher {{ic|TIMEOUT}}<br />
* use {{ic|PROMPT 1}}<br />
* use {{ic|DEFAULT ''problematic_label''}}<br />
<br />
To get more detailed debug log, [[ABS|recompile]] the {{Pkg|syslinux}} package with additional CFLAGS:<br />
<br />
-DDEBUG_STDIO=1 -DCORE_DEBUG=1<br />
<br />
=== Btrfs compression ===<br />
<br />
Booting from btrfs with compression is not supported.[https://wiki.syslinux.org/wiki/index.php/Syslinux_4_Changelog#Changes_in_4.02]<br />
This error will show:<br />
<br />
btrfs: found compressed data, cannot continue!<br />
invalid or corrupt kernel image.<br />
<br />
=== Btrfs multi-device ===<br />
<br />
Booting from multiple-device btrfs is not supported.[http://repo.or.cz/syslinux.git/blob/HEAD:/extlinux/main.c] (As of 21-Jul-2016 line 1246 in validate_device_btrfs() in main.c)<br />
This head-scratching error will show (assuming you're installing on sda1):<br />
<br />
/boot/syslinux is device /dev/sda1<br />
extlinux: path /boot/syslinux doesn't match device /dev/sda1<br />
<br />
== See also ==<br />
<br />
* [https://www.syslinux.org Official website]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Bash_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626078
Bash (简体中文)
2020-07-20T16:15:28Z
<p>VictriD: Sync with English content: Configuration files: add /etc/bash.bash_logout</p>
<hr />
<div>[[Category:Command shells (简体中文)]]<br />
[[Category:GNU (简体中文)]]<br />
[[en:Bash]]<br />
[[de:Bash]]<br />
[[es:Bash]]<br />
[[it:Bash]]<br />
[[ja:Bash]]<br />
[[ru:Bash]]<br />
{{Related articles start}}<br />
{{Related|Bash (简体中文)/Functions (简体中文)}}<br />
{{Related|Bash (简体中文)/Prompt customization (简体中文)}}<br />
{{Related|Environment variables (简体中文)}}<br />
{{Related|Readline (简体中文)}}<br />
{{Related|Fortune}}<br />
{{Related|Pkgfile (简体中文)}}<br />
{{Related|Command-line shell}}<br />
{{Related articles end}}<br />
<br />
{{TranslationStatus (简体中文)|Bash|2020-07-21|626072}}<br />
<br />
[https://www.gnu.org/software/bash/ Bash] (Bourne-again Shell) 是一个来自 [[GNU (简体中文)|GNU]]的[[Command-line shell|命令行解释器]]/编程语言。它的名字是向它的前身——很早以前的 Bourne shell 致敬。Bash可以运行在大部分类 UNIX 操作系统中,包括 GNU/Linux。<br />
<br />
Bash是Arch Linux的默认命令行解释器。<br />
<br />
==调用==<br />
Bash 的运行方式会取决于 Bash 被调用的方式。下面是一些不同模式的描述。<br />
<br />
如果 Bash 以TTY中的{{ic|login}}、[[SSH (简体中文)|SSH]] 守护进程、或者其它类似的方式派生出来,我们称之为登录 (login) shell。你可以使用命令行选项 {{ic|-l}} 或 {{ic|--login}} 来使用这种模式。<br />
<br />
如果 Bash 的标准输入和标准错误输出都连接到终端(比如说,一个终端模拟器),并且在启动的时候既没有使用 {{Ic|-c}} 选项和[http://unix.stackexchange.com/a/96805 非选项参数](比如说,{{ic|bash '''script'''}}),我们称之为交互 (interactive) shell。所有的交互式 shell 都会执行{{ic|/etc/bash.bashrc}} 和 {{ic|~/.bashrc}} 文件中的配置,而登录shell还会执行{{ic|/etc/profile}} 和 {{ic|~/.bash_profile}} 中的配置。<br />
<br />
{{注意|在 Arch Linux 中 {{ic|/bin/sh}} (过去是 Bourne shell 的执行文件名) 是 {{ic|/bin/bash}} 的符号链接。如果 Bash 通过 {{ic|sh}} 方式调用,它会尽量模拟历史上 {{ic|sh}} 的启动行为,包括 POSIX 兼容能力。}}<br />
<br />
通过在Bash启动时使用 {{Ic|--posix}} 命令行参数或者在启动后执行 ‘{{Ic|set -o posix}}’ 来使Bash在增强的POSIX标准下运行。<br />
<br />
===配置文件===<br />
<br />
关于更详尽的描述,您可以参考{{ic|/usr/share/doc/bash/bashref.html}} ([https://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files 在线链接]) 文件的第 6.2 节 "Bash Startup Files" 和[[GregsWiki:DotFiles]]。<br />
<br />
{| class="wikitable"<br />
! 文件<br />
! 描述<br />
! 登录 shell <br />
<sup>(见下)</sup><br />
! 交互 shell<br />
<sup>非登录</sup><br />
|-<br />
| {{ic|/etc/profile}}<br />
| [[Help:Reading (简体中文)#Source|加载]]全部储存在 {{ic|/etc/profile.d/*.sh}} 和 {{ic|/etc/bash.bashrc}} 中的配置。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|~/.bash_profile}}<br />
| 针对每个用户,紧接 {{ic|/etc/profile}} 执行。如果这个文件不存在,会顺序检查 {{ic|~/.bash_login}} 和 {{ic|~/.profile}} 文件。框架文件 {{ic|/etc/skel/.bash_profile}} 同时会引用 {{ic|~/.bashrc}}。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|~/.bash_logout}}<br />
| 针对每个用户,退出登录 shell 后。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|/etc/bash.bash_logout}}<br />
| 取决于 {{ic|1=-DSYS_BASH_LOGOUT="/etc/bash.bash_logout"}} 编译标记。退出登录 shell 后。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|/etc/bash.bashrc}}<br />
| 取决于编译标志 {{ic|1=-DSYS_BASHRC="/etc/bash.bashrc"}}。加载 {{ic|/usr/share/bash-completion/bash_completion}} 配置。<br />
| {{否}}<br />
| {{是}}<br />
|-<br />
| {{ic|~/.bashrc}}<br />
| 针对每个用户,在 {{ic|/etc/bash.bashrc}} 后加载。<br />
| {{否}}<br />
| {{是}}<br />
|}<br />
<br />
{{注意|<br />
* 如果以 {{ic|--login}} 调用,登录 shell 可能不是交互式的。<br />
* 如果可以交互,''非登录'' shell '''不会''' 加载 {{ic|~/.bash_profile}}。它会继承调用他们的父进程(可能是一个登录 shell)的环境参数。更多信息,请参考[[GregsWiki:ProcessManagement#On processes, environments and inheritance]]。<br />
}}<br />
<br />
=== Shell 与环境变量 ===<br />
<br />
Bash的行为和通过它启动的程序会被许多环境变量影响。[[Environment variables (简体中文)|环境变量]]用于储存有用的值,比如命令搜索路径,或者默认浏览器。当一个新的 shell 或者脚本被启动时,这个 shell 会继承它的父进程的环境变量,从而这个 shell 会带有内部 shell 变量[http://www.kingcomputerservices.com/unix_101/understanding_unix_shells_and_environment_variables.htm ]。<br />
<br />
这些内部 shell 变量可以以此导出以变成环境变量:<br />
<br />
VARIABLE=content<br />
export VARIABLE<br />
<br />
或者<br />
<br />
export VARIABLE=content<br />
<br />
环境变量依照惯例放置在{{ic|~/.profile}}或者{{ic|/etc/profile}}中,这样其他兼容 Bourne shell 的 shell 也可以使用。<br />
<br />
关于更详尽的内容,您可以参考[[Environment variables (简体中文)]]。<br />
<br />
==命令行==<br />
<br />
Bash 的命令行由一个叫做 [[Readline (简体中文)|Readline]] 的分离库来管理。Readline 提供了[[emacs (简体中文)|emacs]] 和 [[vi (简体中文)|vi]] 风格的快捷键用于操作命令行,比如说,以单词为基准前后移动、删除等。管理输入[[Readline (简体中文)#历史|历史]]也是 Readline 的职责。它还允许你创造[[Readline (简体中文)#Macros|宏]]。<br />
<br />
=== Tab 键补全 ===<br />
<br />
[[Wikipedia:Command-line_completion|Tab 键补全]],提供在按下 {{ic|tab}} 键后自动补全命令的功能(这个功能默认启用)。<br />
<br />
==== Tab 按下的次数 ====<br />
<br />
可能最多需要按三次 tab 才能显示所有的补全选项。如果希望减少这个数值,请参考 [[Readline#Faster completion|更快的补全操作]]。<br />
<br />
==== 常用命令的选项补全 ====<br />
<br />
通常来讲,Bash 中按下 tab 只会补全命令、文件名和变量。安装 {{Pkg|bash-completion}} 包,并加载 {{ic|/usr/share/bash-completion/bash_completion}} 文件中的配置,可以提供更多针对常见命令的选项的 tab 补全。安装这个包后,常规的补全(比如说 {{ic|$ ls file.*<tab><tab>}})可能会表现得不同。但是,您可以通过{ic|$ compopt -o bashdefault ''program''}}命令来重新启用。(更多细节,请参考 [https://bbs.archlinux.org/viewtopic.php?id=128471] and [https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html]。)<br />
<br />
==== 自定义命令补全 ====<br />
<br />
{{注意|使用 {{ic|complete}} 功能可能与 {{Pkg|bash-completion}} 冲突。}}<br />
<br />
通常来讲,Bash 中按下 tab 只会补全命令后的文件名。通过{{ic|complete -c}}命令,Bash 可以规定某些命令后的补全形式为命令,比如:<br />
{{hc|~/.bashrc|<br />
complete -c man which<br />
}}<br />
或通过{{ic|-cf}}命令,规定补全形式为命令和文件,比如:<br />
{{bc|complete -cf sudo}}<br />
更多补全形式,请参考Bash的手册页。<br />
<br />
=== 历史 ===<br />
<br />
==== 历史补全 ====<br />
<br />
您可以绑定上下键来在 Bash 的历史中查找(请参考 [[Readline (简体中文)#历史]] and [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline 启动文件语法]):<br />
<br />
{{hc|~/.bashrc|<br />
bind '"\e[A": history-search-backward'<br />
bind '"\e[B": history-search-forward'<br />
}}<br />
<br />
或者所有 Readline 程序:<br />
<br />
{{hc|~/.inputrc|<br />
"\e[A": history-search-backward<br />
"\e[B": history-search-forward<br />
}}<br />
<br />
==== 更近的历史记录 ====<br />
<br />
{{ic|HISTCONTROL}}变量可以避免历史记录记录特定的命令,比如不记录重复的命令<br />
{{hc|~/.bashrc|2=export HISTCONTROL=ignoredups}}<br />
将其设置为 {{ic|erasedups}} 可以让 Bash 的历史记录对一条命令只保留一个历史记录(与顺序无关)。更多选项,请参考Bash的手册页。<br />
<br />
==== 禁用历史记录 ====<br />
<br />
临时禁用历史记录:<br />
<br />
set +o history<br />
<br />
现在输入的命令将不会存入{{ic|$HISTFILE}}。<br />
<br />
比如说,你现在可以执行 {{ic|<nowiki>printf secret | sha256sum</nowiki>}} 来生成密码文件的散列值,或是隐藏您使用GPG的历史,如执行{{ic|gpg -eaF secret-pubkey.asc}}命令。这些秘密不会被写入磁盘。<br />
<br />
开启历史记录:<br />
<br />
set -o history<br />
<br />
{{提示|如果 {{ic|HISTCONTROL}} 变量包含了 {{ic|ignorespace}},以空格开头的命令将不会记入历史。这样可以更加方便地控制历史记录。更多细节,请参考{{man|1|bash|Shell Variables}}。}}<br />
<br />
禁用所有的 Bash 历史:<br />
<br />
{{hc|~/.bashrc or /etc/profile|<br />
<nowiki>export HISTSIZE=0</nowiki><br />
}}<br />
<br />
为了保险(这会永远清除所有的历史记录):<br />
<br />
# warning. this will destroy your old histfile forever<br />
wipe -i -l2 -x4 -p4 "$HISTFILE"<br />
ln -sv /dev/null "$HISTFILE"<br />
<br />
=== 模仿 Zsh 的帮助功能 ===<br />
<br />
[[Zsh (简体中文)|Zsh]] 可以在光标指向命令的时候按 {{ic|Alt+h}} 来调用这个命令的手册。<br />
相同的行为可以通过这个 [[Readline (简体中文)]] 绑定在 Bash 中开启:<br />
<br />
{{hc|~/.bashrc|<nowiki><br />
run-help() { help "$READLINE_LINE" 2>/dev/null || man "$READLINE_LINE"; }<br />
bind -m vi-insert -x '"\eh": run-help'<br />
bind -m emacs -x '"\eh": run-help'<br />
</nowiki>}}<br />
<br />
这个操作假设你使用(默认的)Emacs [[Readline#Editing mode|编辑模式]]。<br />
<br />
==别名==<br />
<br />
[[Wikipedia:alias|别名]](alias)是可以让您用另一个字符串来替换一个字符串的命令。这个命令常常被用来缩短系统命令,或者用来将默认参数加入到常用命令中。<br />
<br />
推荐将针对用户的别名保存在{{ic|~/.bashrc}}, 而将系统级的别名(这些会影响所有用户)存放在{{ic|/etc/bash.bashrc}}。别名的示例,请参考 [https://gist.github.com/anonymous/a9055e30f97bd19645c2]。<br />
<br />
关于函数,请参考 [[Bash (简体中文)/Functions (简体中文)|函数]]。<br />
<br />
== 提示与技巧 ==<br />
<br />
=== 自定义提示符 ===<br />
<br />
参见 [[Bash (简体中文)/Prompt customization (简体中文)|自定义提示符]]。<br />
<br />
=== 找不到命令 ===<br />
<br />
[[pkgfile (简体中文)|pkgfile]] 提供了一个"找不到命令"的钩子,可以在输入未知命令后自动查找官方的软件包。<br />
<br />
你需要[[Help:Reading (简体中文)#Source|加载]]这个钩子来启用它,如下:<br />
<br />
{{hc|~/.bashrc|<br />
source /usr/share/doc/pkgfile/command-not-found.bash}}<br />
<br />
现在,运行一个不可用的命令将会显示如下信息:<br />
<br />
{{hc|$ abiword|<br />
abiword may be found in the following packages:<br />
extra/abiword 3.0.1-2 /usr/bin/abiword<br />
}}<br />
<br />
{{注意|需要先更新 pkgfile 的数据库才能运作。更多细节,请参考[[pkgfile (简体中文)#安装]]。}}<br />
<br />
另一个"找不到命令"的钩子由 {{AUR|command-not-found}} 包提供,它看起来像这个样子:<br />
<br />
{{hc|$ abiword|<br />
The command 'abiword' is provided by the following packages:<br />
'''abiword''' (2.8.6-7) from extra<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from staging<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from testing<br />
[ abiword ]<br />
}}<br />
<br />
=== 在终端内禁用Ctrl+Z ===<br />
<br />
你可以相这样包装你的命令,来关闭 {{ic|Ctrl+Z}} 功能(暂停/关闭程序)。通过在这个脚本中包装命令<br />
<br />
#!/bin/bash<br />
trap "" 20<br />
''adom''<br />
<br />
这时如果你在玩 {{AUR|adom}} 要按 {{ic|Shift+Z}} 组合键时不小心按下了 {{ic|Ctrl+Z}} 组合键,你的游戏就不会停止运行了,因为我们已经禁用了{{ic|Ctrl+Z}}。<br />
<br />
=== 登出后清空屏幕 ===<br />
<br />
当登出虚拟终端时,清空屏幕:<br />
{{hc|~/.bash_logout|<br />
clear<br />
reset<br />
}}<br />
<br />
=== 输入路径自动添加"cd" ===<br />
<br />
Bash 可以自动在输入的一个路径前添加 {{ic|cd }}。比如说:<br />
{{hc|$ /etc|<br />
bash: /etc: Is a directory<br />
}}<br />
<br />
但是如果在 {{ic|.bashrc}} 文件里添加一行:<br />
{{hc|~/.bashrc|<br />
...<br />
shopt -s autocd<br />
...<br />
}}<br />
<br />
你会得到:<br />
[user@host ~]$ /etc<br />
cd /etc<br />
[user@host etc]$<br />
<br />
=== 自动跳转 ===<br />
<br />
{{AUR|autojump-git}} 允许在用户访问最多的路径中搜索文件系统。<br />
<br />
安装完后,[[Help:Reading (简体中文)#Source|加载]] {{ic|/etc/profile.d/autojump.bash}} 来启动这项功能。<br />
<br />
=== 防止覆盖文件 ===<br />
<br />
在当前的会话中,防止 shell 输出重定向覆盖一个已有的文件:<br />
<br />
$ set -o noclobber<br />
<br />
这和{{ic|set -C}}命令是一样的。<br />
<br />
如果想让该用户一直生效:<br />
<br />
{{hc|~/.bashrc|output=...<br />
set -o noclobber}}<br />
<br />
在设定 {{ic|noclobber}} 的情况下强制覆盖文件:<br />
<br />
$ echo "output" >| file.txt<br />
<br />
== 错误排除 ==<br />
<br />
===修正窗口大小调整时的换行===<br />
<br />
如果您调整了[[List of applications (简体中文)/Utilities (简体中文)#终端模拟器|终端模拟器]]的大小,Bash 可能并没有得到大小重调的信号,你键入的文本就不会正确的换行,并且与已输入内容重叠。启用 {{ic|checkwinsize}} 选项可以在每一个命令后检查窗口的大小,并按需更新 {{ic|LINES}} 和 {{ic|COLUMNS}} 的值来调整。<br />
<br />
{{hc|~/.bashrc|<br />
shopt -s checkwinsize<br />
}}<br />
<br />
=== 设置 ignoreeof 后 shell 仍然退出 ===<br />
<br />
如果您设置了 {{ic|ignoreeof}} 选项,但是如果重复按下 {{ic|ctrl-D}} shell 仍然会退出。因为这个选项只允许忽略 10 次连续的EOF记号(即 {{ic|Ctrl+D}})。<br />
<br />
如果需要将这个次数调的更高,需要使用 IGNOREEOF 变量。<br />
<br />
比如:<br />
export IGNOREEOF=100<br />
<br />
== 更多信息 (英语) ==<br />
<br />
* [[Wikipedia:Bash (Unix shell)]]<br />
* [https://www.gnu.org/software/bash/manual/bashref.html Bash 参考手册],或是 {{ic|/usr/share/doc/bash/bashref.html}}<br />
* [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline 启动文件语法]<br />
* [http://www.aosabook.org/en/bash.html The Bourne-Again Shell] - ''开源软件架构'' 第三章<br />
* [http://shellcheck.net Shellcheck] - Bash 脚本常见错误检查指南 (基于 [https://github.com/koalaman/shellcheck shellcheck])<br />
* [http://bashrcgenerator.com/ PS1 生成器] - 生成你的 .bashrc/PS1 脚本,这样就可以在命令行中使用鼠标拖拽了。<br />
* [https://serverfault.com/questions/3743/what-useful-things-can-one-add-to-ones-bashrc 有用的 .bashrc 命令] <br />
<br />
=== 教程 ===<br />
<br />
* [[GregsWiki:|Greg's Wiki]]<br />
* [[GregsWiki:BashGuide]]<br />
* [[GregsWiki:BashFAQ]]<br />
* [http://wiki.bash-hackers.org/doku.php Bash Hackers Wiki]<br />
* [http://wiki.bash-hackers.org/scripting/tutoriallist Bash Hackers Wiki: List of Bash online tutorials]<br />
* [http://www.grymoire.com/Unix/Quote.html Quote Tutorial]<br />
<br />
=== 社区 ===<br />
<br />
* [ircs://chat.freenode.net#bash 一个 Bash 的活跃友好的IRC频道]<br />
<br />
=== 例子 ===<br />
<br />
* [http://tldp.org/HOWTO/Xterm-Title-4.html 怎样修改 xterm 的标题]</div>
VictriD
https://wiki.archlinux.org/index.php?title=ArchWiki:Translation_Team_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626076
ArchWiki:Translation Team (简体中文)
2020-07-20T16:10:52Z
<p>VictriD: /* 页面维护列表 */ Adding syslinux translation (part)</p>
<hr />
<div>[[Category:ArchWiki (简体中文)]]<br />
[[Category:Teams (简体中文)]]<br />
[[ar:ArchWiki:Translation Team]]<br />
[[cs:ArchWiki:Translation Team]]<br />
[[el:ArchWiki:Translation Team]]<br />
[[en:ArchWiki:Translation Team]]<br />
[[es:ArchWiki:Translation Team]]<br />
[[fr:ArchWiki Translation Team]]<br />
[[hr:ArchWiki:Translation Team]]<br />
[[it:ArchWiki:Translation Team]]<br />
[[ja:ArchWiki:翻訳チーム]]<br />
[[ko:ArchWiki:Translation Team]]<br />
[[nl:ArchWiki:Translation Team]]<br />
[[pl:ArchWiki:Translation Team]]<br />
[[pt:ArchWiki:Translation Team]]<br />
[[ru:ArchWiki:Translation Team]]<br />
[[sk:ArchWiki:Translation Team]]<br />
[[uk:ArchWiki:Translation Team]]<br />
[[zh-hant:ArchWiki:Translation Team]]<br />
ArchWiki 上有许多中文页面,这其中大部分是从外文翻译过来的,这些页面是无数中文志愿者劳动的结晶。随着时间推移,有些页面因为没有及时维护,内容严重过时。而目前的翻译工作缺少组织,效率偏低。所以参照西班牙和意大利翻译组的做法,添加这个页面。<br />
<br />
如果你希望对 ArchWiki 做贡献,参与 Wiki 建设,比如翻译英文页面和对已翻译过的中文页面进行维护,只需要编辑下面的[[#页面维护列表]],添加相应的条目,并将自己加为相关页面的维护者。如果你在列表中还没有找到想要翻译的页面,可以自行添加。另外,如果因为时间原因无法再维护页面,请及时将自己从维护者列表中删除。<br />
<br />
== 创建翻译 ==<br />
<br />
{{警告|如果不准备翻译页面的大部分内容,请尽量不要新建简体中文页面。检查英文页面的更新需要花费不少精力,没有翻译的页面会增加维护负担。}}<br />
# 如果还不知道如何编辑 wiki,请阅读[[Help:Editing (简体中文)|编辑帮助]]。<br />
# 阅读 [[Help:i18n (简体中文)|i18n 帮助]],文章给出了 ArchWiki 国际化和本地化的指南。<br />
# [[Special:UserLogin|登录]]以进行编辑。<br />
# 选择要翻译的页面,例如从[[Special:Random|随机页面]]或[[#页面维护列表|页面维护列表]]中选择一个未翻译完成的页面。假设要翻译 [[ArchWiki:Translation Team]]。<br />
# 进入选择的英文页面,点击页面顶部的'''编辑'''。<br />
# 添加要翻译文件的语言间链接, 简体中文的话加入 <nowiki>[[zh-hans:Some Page]]</nowiki>,其它语言参见 [[Help:i18n#Interlanguage links]])。<br />
# 复制所有页面代码。<br />
# 预览页面 (新加了语言链接)<br />
# 访问页面左边新添加的语言链接,应该会进到 [[ArchWiki Translation Team (Language)]](打开新标签页,不要关闭预览的页面)<br />
# 因为页面不存在,点击'''创建'''。<br />
# 将显示一个编辑器 - 粘贴复制的英文页面。<br />
# 将文章分类修改为本地化版本,例如将 {{ic|<nowiki>[[Category:ArchWiki]]</nowiki>}} 修改为 {{ic|<nowiki>[[Category:ArchWiki (简体中文)]]</nowiki>}},参阅 [[Help:Category (简体中文)]].<br />
# 修改语言间链接,指向英文页面(将 {{ic|zh-hans}} 修改为 {{ic|en}},并将英文页面的语言间链接移到文章顶部)。<br />
# 翻译页面,进行保存,还需要使用合适的[[Help:Style (简体中文)#编辑摘要|编辑摘要]],例如 {{ic|translate <nowiki>[[ArchWiki Translation Team]]</nowiki>}}。碰到不好翻译的段落,可以保留英文。尽量不要让原文和不太确认的翻译同时存在,会让页面看上去比较杂乱。<br />
# 在翻译页面的底部,列出了该页面所包含的类别。检查所有这些类别是否存在,即,链接不应为红色。否则,请点击红色链接,然后创建所有缺少的类别 - 类别的创建方式与常规页面相同。<br />
# 返回预览的页面并保存页面。<br />
# (可选)将 [[Template:TranslationStatus (简体中文)]] 添加到已翻译的页面。有关使用方法,请参见 [[Template:TranslationStatus (简体中文)#用法]]。<br />
# (可选)创建另一个页面,例如 [[ArchWiki Translation Team 的翻译的标题]],其标题将是 [[ArchWiki Translation Team (Language)]] 的标题的翻译,输入 {{ic|<nowiki>#redirect [[ArchWiki Translation Team (Language)</nowiki>]]}} 作为其唯一内容并保存。<br />
<br />
== 模版 ==<br />
<br />
下表列出了应翻译的英文[[Help:Template (简体中文)|模版]]及其等效的简体中文模板。<br />
<br />
{| class=wikitable<br />
! 英文模版 || 简体中文模版<br />
|-<br />
! colspan=2| 文章模版<br />
|-<br />
| [[Template:Related articles start]] || [[Template:Related articles start (简体中文)]]<br />
|-<br />
| [[Template:Unsupported]] || [[Template:Unsupported (简体中文)]]<br />
|-<br />
| [[Template:Yes]] || [[Template:是]]<br />
|-<br />
| [[Template:No]] || [[Template:否]]<br />
|-<br />
| [[Template:Tip]] || [[Template:提示]]<br />
|-<br />
| [[Template:Note]] || [[Template:注意]]<br />
|-<br />
| [[Template:Warning]] || [[Template:警告]]<br />
|-<br />
| [[Template:Dead link]] || [[Template:失效链接]]<br />
|-<br />
| [[Template:Broken package link]] || [[Template:Broken package link (简体中文)]]<br />
|-<br />
| [[Template:Broken section link]] || [[Template:Broken section link (简体中文)]]<br />
|-<br />
! colspan=2| 翻译状态模板<br />
|-<br />
| [[Template:Bad translation]] || [[Template:Bad translation (简体中文)]]<br />
|-<br />
| [[Template:Translateme]] || [[Template:Translateme (简体中文)]]<br />
|-<br />
| [[Template:TranslationStatus]] || [[Template:TranslationStatus (简体中文)]]<br />
|-<br />
! colspan=2| 导航模版<br />
|-<br />
| [[Template:HCL/Laptops table header]] || [[Template:HCL/Laptops table header (简体中文)]]<br />
|-<br />
| [[Template:Laptops navigation]] || [[Template:Laptops navigation (简体中文)]]<br />
|-<br />
| [[Template:List of applications navigation]] || [[Template:List of applications navigation (简体中文)]]<br />
|-<br />
| [[Template:Package guidelines]] || [[Template:Package guidelines (简体中文)]]<br />
|-<br />
! colspan=2| 特殊模版<br />
|-<br />
| [[Template:Cat main]] || [[Template:Cat main (简体中文)]]<br />
|-<br />
| [[Template:Template]] || [[Template:Template (简体中文)]]<br />
|-<br />
| [[Template:META Error]] || [[Template:META Error (简体中文)]]<br />
|-<br />
| [[Template:META Unexplained Status Template]] || [[Template:META Unexplained Status Template (简体中文)]]<br />
|-<br />
| [[Template:Comment]] || [[Template:Comment (简体中文)]]<br />
|-<br />
| [[Template:Committed identity]] || [[Template:Committed identity (简体中文)]]<br />
|-<br />
| [[Template:Unsigned]] || [[Template:Unsigned (简体中文)]]<br />
|}<br />
<br />
== 翻译中应省略的模板 ==<br />
<br />
当页面或部分标记有 [[Template:Accuracy]],[[Template:Style]],[[Template:Archive]],[[Template:Remove]] 或 [[Template:Out of date]] 时 — 在解决问题并且删除模板之前,不要翻译有问题的页面/部分。<br />
<br />
如果看到 [[Template:Expansion]],[[Template:Merge]],[[Template:Move]] 或 [[Template:Redirect]],则可以安全地翻译页面,但不要将这些模板复制到翻译的文章中。<br />
<br />
如果看到 [[Template:Broken package link]],[[Template:Broken section link]] 或 [[Template:Dead link]],请不要将这些模板复制到翻译的文章中。要么在原始文本中将其修复,然后复制并在要翻译时翻译修复的链接,要么在翻译时忽略与它们有关的整个句子或部分。<br />
<br />
== 完善翻译 ==<br />
<br />
[https://wiki.archlinux.org/index.php?title=Special:WhatLinksHere/Template:Translateme_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&limit=100 这个特殊页面]包含了需要完善翻译的简体中文页面。完善翻译的基本步骤:<br />
# 选择自己比较熟悉的文章进行翻译<br />
# 先检查英文页面的对应段落,更新成最新的英文后再翻译,避免翻译过时的内容,减少信息遗漏。<br />
# 翻译完成后删除页面中的 <nowiki>{{translateme (简体中文)}}</nowiki> 标记<br />
# (可选)给翻译完成的页面加上[[Template:TranslationStatus (简体中文)|翻译状态]],请参见 [[#创建翻译]]。<br />
<br />
== 更新过期页面 ==<br />
<br />
如果发现有 Wiki 页面过期或错误:<br />
* 小的改动,有时间可以立即进行修改同步,维护者并不控制页面的编辑权限,越多的人参与维护越好。如果改动较大,请先联系维护者,避免重复劳动。<br />
* 没有时间查看更改,请给页面加上 {{ic|<nowiki>{{out of date}}</nowiki>}} 模版,这样其他贡献者更容易发现需要更新的页面,而读者看到过期标记就可以直接查看英文页面,以免被错误内容误导,白白耽误时间。<br />
* 没有时间翻译,请将过期的中文部分删去,从英文页面中复制更改的部分到中文页面的相应部分,去掉{{ic|<nowiki>{{out of date}}</nowiki>}}模板(如果页面上有的话)并加上{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他贡献者就更容易发现需要翻译的页面,而读者也不会被过期的内容误导。<br />
如果发现有页面未翻译:<br />
* 有时间的话,请将页面中的英文部分翻译为中文,并去掉{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板。<br />
* 没有时间翻译,请为页面添加{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他的贡献者就能更容易发现需要翻译的页面。<br />
{{注意|在修改页面上的模板时,请同时更新页面维护列表的翻译状态。}}<br />
<br />
== 维护翻译 ==<br />
<br />
完成页面的翻译只是初步完成任务,及时同步英文页面改动、更新翻译是一个持续性的工作,可能会耗费更多的时间。<br />
<br />
=== 页面认领 ===<br />
<br />
所有人都可以认领页面。认领后的责任包括进行翻译,关注英文页面的改动,及时同步翻译。<br />
<br />
为了更好的跟踪英文页面的修改,请务必在设置中启用监视列表邮件通知,并监视对应的英文页面(从设置中找到监视列表,加入英文页面。或者直接到英文页面点击页面顶端的监视标签。这样只要有改动,就会收到邮件通知)。<br />
<br />
{{小贴士|如果收到邮件通知后没有访问页面或者访问了页面却没有登录用户,下次页面改动时就不会再发邮件通知。可以点击监视列表中的'''标记所有页面为已读'''再次获取更新。}}<br />
<br />
如果页面有维护者但长期得不到更新,将会在维护列表中删除维护者。<br />
<br />
=== 翻译状态模板 ===<br />
<br />
Arch 作为滚动发行版,软件变化比较快,对应的文档变化也比较快。许多翻译的文章由于缺乏更新,会产生命令运行出错或不起作用等问题。而由于这些过期页面没有及时标记出来,所以用户无法及时获得更新。[[Template:TranslationStatus (简体中文)|翻译状态模板]]就是为了解决这个问题而创建。<br />
<br />
此模板可以起到如下作用:<br />
* 为用户提供翻译状况,包括翻译时间、英文页面的最后版本等<br />
* 用户可以点击查看翻译后,英文页面的改动,这样英文不是很好的用户可以只查看很小一部分英文内容,并判断出是否影响操作。<br />
* 翻译人员可以跟踪页面状况,通过[[Special:WhatLinksHere/Template:TranslationStatus_(简体中文)|模板的反向链接]]可以查找到所有标记页面,查看需要更新翻译的部分。<br />
<br />
[[Template:TranslationStatus (简体中文)|模板页面]]有详细的使用方法。<br />
<br />
=== 页面维护列表 ===<br />
<br />
{{注意|请按照拉丁字母顺序添加页面。}}<br />
<br />
翻译状态说明:<br />
;过期:页面内容未与英文页面同步,对应 {{ic|<nowiki>{{out of date}}</nowiki>}} 模版<br />
;未翻译:页面中含有英文内容,对应 {{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}} 模板<br />
;完成:页面已与英文页面同步<br />
<br />
{| class="wikitable sortable collapsible" border="1"<br />
|-<br />
! 页面<br />
! 翻译状态<br />
! 维护者<br />
! class="unsortable" width="30%" | 备注<br />
|-<br />
| [[Amateur radio (简体中文)]]<br />
| 翻译中<br />
| liu-shuyuan<br />
| <br />
|-<br />
| [[Arch-based distributions (简体中文)]]<br />
| 完成<br />
| Joshua<br />
| 勘误中<br />
|-<br />
| [[Arch boot process (简体中文)]]<br />
| 翻译中<br />
| Bangbo Zheng<br />
| <br />
|-<br />
| [[Arch Security Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Arch Testing Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ArchWiki:Maintenance Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ArchWiki:News (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ASCII art (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[AUR helpers (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 部分用词可能需要修改<br />
|-<br />
| [[Bash (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[Common Desktop Environment (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Conky (简体中文)]]<br />
| 完成<br />
| upi<br />
| 无<br />
|-<br />
| [[Core utilities (简体中文)]]<br />
| 完成<br />
| rentaro, Arisaka<br />
| 无<br />
|-<br />
| [[Dark mode switching (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Discord (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Django (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Dynamic Kernel Module Support (简体中文)]]<br />
| 完成<br />
| Mithrandir<br />
| 完善中<br />
|-<br />
| [[Emacs (简体中文)]]<br />
| 翻译中<br />
| Jaurung yuanhang<br />
| 未完成<br />
|-<br />
| [[Equinox Desktop Environment (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[FHEM (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Fish (简体中文)]]<br />
| 完成<br />
| liu-shuyuan<br />
| <br />
|-<br />
| [[Flatpak (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Fwupd (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Gcin (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[GIMP (简体中文)]]<br />
| 完成<br />
| [[User:驿窗|驿窗]]<br />
| 长期维护中<br />
|-<br />
| [[GNOME (简体中文)]]<br />
| 完成<br />
| skywet<br />
| <br />
|-<br />
| [[Google Authenticator (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[GRUB (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[GRUB/Tips and tricks (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[Inkscape (简体中文)]]<br />
| 完成<br />
| [[User:驿窗|驿窗]]<br />
| 长期维护中<br />
|-<br />
| [[International communities (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Java (简体中文)]]<br />
| 翻译中<br />
| CaCaCarrot<br />
| 无<br />
|-<br />
| [[Kernel live patching (简体中文)]]<br />
| 完成<br />
| [[User:VictriD|VictriD]]<br />
| 无<br />
|-<br />
| [[Libvirt (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 需要格式改进<br />
|-<br />
| [[Liri (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[List of applications (简体中文)]]<br />
| 部分翻译<br />
| DavidChen<br />
| 翻译中<br />
|-<br />
| [[Lua (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Lumina (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Minecraft (简体中文)]]<br />
| 完成<br />
| Xavier Lau<br />
| 页面已经与英文版同步,长期维护中<br />
|-<br />
| [[Moksha (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[MySQL (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Notion (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[OpenSSH (简体中文)]]<br />
| 完成<br />
| Arisaka<br />
| 无<br />
|-<br />
| [[pkgstats (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[ranger (简体中文)]]<br />
| 完成<br />
| Jason Zhang<br />
| 完善中<br />
|-<br />
| [[Rockbox (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Roles (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Rxvt-unicode (简体中文)]]<br />
| 完成<br />
| KyanCh<br />
| 无<br />
|-<br />
| [[Scheme (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[SDDM (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Steam (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Syslinux (简体中文)]]<br />
| 翻译中<br />
| [[User:VictriD|VictriD]]<br />
| 预计在 3d 内完成更新与翻译<br />
|-<br />
| [[TLP (简体中文)]]<br />
| 完成<br />
| Skywet<br />
| 持续更新中<br />
|-<br />
| [[Trac (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Trusted Users (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Twm (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Unofficial mirrors (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Unofficial user repositories (简体中文)]]<br />
| 翻译中<br />
| TransistorLogic<br />
| 无<br />
|-<br />
| [[UP Squared (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Vivaldi (简体中文)]]<br />
| 完成<br />
| [[User:Aaron Chen|Aaron Chen]]<br />
| 长期维护<br />
|- <br />
| [[X2Go (简体中文)]]<br />
| 过期<br />
| [[User:Aaron Chen|Aaron Chen]]<br />
|</div>
VictriD
https://wiki.archlinux.org/index.php?title=Syslinux_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=626075
Syslinux (简体中文)
2020-07-20T16:07:44Z
<p>VictriD: Renew the very first part translation. still translating...</p>
<hr />
<div>[[Category:Boot loaders (简体中文)]]<br />
[[en:Syslinux]]<br />
[[es:Syslinux]]<br />
[[fr:Syslinux]]<br />
[[it:Syslinux]]<br />
[[ja:Syslinux]]<br />
[[ru:Syslinux]]<br />
{{Related articles start (简体中文)}}<br />
{{Related|Arch Boot Process (简体中文)}}<br />
{{Related articles end}}<br />
{{translateme (简体中文)|这个版本正在由[[User:VictriD|VictriD]]进行维护。过去不完善的内容还在翻译中。}}<br />
{{TranslationStatus (简体中文)|Syslinux|2020-07-21|609036}}<br />
[[Wikipedia:SYSLINUX|Syslinux]]是一个启动加载器集合,可以从硬盘、光盘或通过 [[Preboot Execution Environment (简体中文)|PXE]] 的网络引导启动系统。支持的[[File systems (简体中文)|文件系统]]包括 [[Wikipedia:File Allocation Table|FAT]],[[Wikipedia:ext2|ext2]],[[ext3|ext3]],[[ext4 (简体中文)|ext4]] 和非压缩单设备 [[Btrfs]] 文件系统。<br />
<br />
{{警告|1=在 Syslinux 6.03 版本中,启动加载器可能不支持某些文件系统的部分功能。详情请参考 [https://wiki.syslinux.org/wiki/index.php/Filesystem]。}}<br />
<br />
<br />
{{注意|Syslinux 本身只能访问其所在分区上的数据,参阅 [[#链式加载]] 来了解如何绕过这个限制。}}<br />
<br />
== BIOS 系统 ==<br />
<br />
=== 启动流程 ===<br />
<br />
# '''第一阶段 - 第一部分''' - '''加载MBR''' 电脑启动时,BIOS 会先加载磁盘开始的 440 字节 [[Partitioning (简体中文)#Master Boot Record|MBR]] 启动代码 ({{ic|/usr/lib/syslinux/bios/mbr.bin}} 或 {{ic|/usr/lib/syslinux/bios/gptmbr.bin}})。<br />
# '''第一阶段 - 第二部分''' - '''寻找活动分区''' 第一阶段的MBR启动代码会寻找活动分区(设置了可启动标记的 MBR 分区),此处我们假设是 {{ic|/boot}} 分区。<br />
# '''第二阶段 - 第一部分''' - '''执行卷启动记录程序''' MBR 启动代码会执行上面找到的 {{ic|/boot}} 分区的卷启动记录程序(VBR,volume boot record)。对于 Syslinux 来说,VBR 就是由 {{ic|extlinux --install}} 命令创建的 {{ic|/boot/syslinux/ldlinux.sys}} 位于开始扇区的部分。请注意 {{ic|ldlinux.sys}} 和 {{ic|ldlinux.c32}} 是不同的。<br />
# '''第二阶段 - 第二部分''' - '''执行 {{ic|/boot/syslinux/ldlinux.sys}}''' VBR 会加载 {{ic|ldlinux.sys}} 剩余的部分。{{ic|ldlinux.sys}} 所处在的扇区位置不可更改,否则 syslinux 无法启动。{{注意|对于 Btrfs 来说,因为文件不断移动导致{{ic|ldlinux.sys}}扇区的位置不断变化,上述的方法将不会工作。因此在 Btrfs 中整个 {ic|ldlinux.sys}} 文件会直接紧接着嵌入卷启动记录程序,而不是像其他文件系统那样保存在 {{ic|/boot/syslinux/ldlinux.sys}} 处。}}<br />
# '''第三阶段''' - '''加载 {{ic|/boot/syslinux/ldlinux.c32}}''' {{ic|ldlinux.sys}} 加载剩下的 syslinux 的核心部分 {{ic|/boot/syslinux/ldlinux.c32}}(这部分是因为文件大小限制无法放入 {{ic|ldlinux.sys}} 中的核心模块)。{{ic|ldlinux.c32}} 文件应该在每一个装有 syslinux 的实例中出现,并且与分区中的 {{ic|ldlinux.sys}} 版本相匹配,否则 Syslinux 将无法启动。更多资料请参阅 [https://bugzilla.syslinux.org/show_bug.cgi?id=7]。<br />
# '''第四阶段''' - '''查找并加载配置文件''' 当 syslinux 完全加载完毕,它将自动查找配置文件 {{ic|/boot/syslinux/syslinux.cfg}} (或某些情况下的 {{ic|/boot/syslinux/extlinux.conf}}),如果找到即加载。否则会进入 Syslinux {{ic|boot:}} 的命令提示符。这一步和剩下的'''非核心''' Syslinux 部分(除 {{ic|lib*.c32}} 和 {{ic|ldlinux.c32}}的{{ic|/boot/syslinux/*.c32}} 模块) 需要提供 {{ic|/boot/syslinux/lib*.c32}} (库)模块[https://wiki.syslinux.org/wiki/index.php/Common_Problems#ELF]。同样,{ic|lib*.c32}} 库模块和非核心的 {{ic|*.c32}} 模块需要与分区中的 {{ic|ldlinux.sys}} 版本相匹配。<br />
<br />
=== 在 BIOS 上安装===<br />
<br />
[[install (简体中文)|安装]]软件包 {{Pkg|syslinux}}。<br />
<br />
{{注意|<br />
* [[Partitioning_(简体中文)#GUID_分区表|GPT]] 支持需要安装软件包 {{Pkg|gptfdisk}}。请参考[[#自动安装]]部分。<br />
* [[FAT]] 支持需要安装软件包 {{Pkg|mtools}}。<br />
}}<br />
<br />
安装软件包并不是安装启动加载器。在安装完相关的包后,还需要安装启动加载器代码(到适合的位置,一般是 VBR)才能启动系统;接下来的部分对您的特定系统的特性提供了替代的指令。<br />
<br />
====自动安装====<br />
<br />
{{注意|脚本 {{ic|syslinux-install_update}} 是 Arch Linux 特有的,并不被 Syslinux 的上游提供/支持。请不要向上游,而是直接向 [https://bugs.archlinux.org/ Arch Bug Tracker] 提交关于这个特定脚本的 bug 报告。}}<br />
<br />
<br />
* 执行完 {{ic|syslinux-install_update}} 脚本后,请不要忘记按照[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}。<br />
<br />
{{警告|{{ic|syslinux-install_update}} 脚本很有可能会设置一个与您的特定系统不同的默认根分区。将 {{ic|/boot/syslinux/syslinux.cfg}} 文件中的根分区修改正确对于成功启动是至关重要的。参见[[#内核参数]]。}}<br />
<br />
syslinux-install_update脚本将自动安装启动加载器代码(一般到 VBR)、复制 {{ic|*.c32}} 模块到{{ic|/boot/syslinux}}、设置分区启动标记并将启动代码安装到 MBR。它可以处理软 RAID、[Partitioning (简体中文)#Master Boot Record|MBR]] 和 [Partitioning_(简体中文)#GUID_分区表|GPT]] 磁盘。<br />
<br />
如果您使用分开的启动分区,请用 {{ic|lsblk}} 命令确保它们都已被挂载。如果您没有看到 {{ic|/boot}} 挂载点,请在继续之前将其挂载。<br />
<br />
* {{ic|syslinux-install_update}} 的参数:{{ic|-i}} (安装文件),{{ic|-a}} (将活动分区标上启动标记),{{ic|-m}} (安装 MBR 启动代码): 如果 {{bc|# syslinux-install_update -i -a -m}} 命令失败并报错''Syslinux BIOS install failed'',问题可能出在 {{ic|extlinux}} 可执行文件不能找到包含 {{ic|/boot}} 的分区:<br />
<br />
{{hc|# extlinux --install /boot/syslinux/|<br />
extlinux: cannot find device for path /boot/syslinux<br />
extlinux: cannot open device (null)<br />
}}<br />
<br />
例如,这可能发生在从 [[LILO]] 升级时,后者在引导当前的自定义内核时,将诸如 {{ic|1=root=/dev/sda1}} 的内核命令行参数转写成了等效的数字参数 {{ic|1=root=801}}。这可以从 {{ic|/proc/cmdline}} 和 {{ic|mount}} 等命令的输出确认。 可以通过向 {{ic|extlinux}} 手动指定 {{ic|1=--device=/dev/sda1}} 来解决下文手动安装时的问题,或者先重启到现有的Arch Linux内核,这样会使用 initramfs 来避免此问题。<br />
<br />
{{注意|<br />
* 如果您现在重新启动系统,则会出现 Syslinux 的提示符。如果想要实现系统自动引导或显示引导菜单,您需要创建(或编辑)配置文件。<br />
* 如果您位于另一个根目录(例如,从安装磁盘上),则可以通过 chroot,重定向后安装:<br />
# syslinux-install_update -i -a -m -c /mnt<br />
}}<br />
<br />
*现在您需要按照接下来的[[#配置]]和[[#内核参数]]两节编辑 {{ic|/boot/syslinux/syslinux.cfg}}文件。<br />
<br />
==== 手动安装 ====<br />
<br />
{{注意|如果您尝试使用Live CD拯救已安装的系统,请确保在执行这些命令之前已经 [[chroot]] 到目标系统。否则您必须在所有文件(除了{{ic|/dev/}})路径之前添加挂载点。}}<br />
<br />
您计划安装Syslinux的启动分区必须包含 FAT,ext2,ext3,ext4 或 Btrfs 文件系统。您不必把它安装在文件系统的根目录上,比如把磁盘 {{ic|/dev/sda1}} 挂在到 {{ic|/boot}}。 例如,可以在{{ic|syslinux}}子目录里安装 Syslinux:<br />
<br />
# mkdir /boot/syslinux<br />
<br />
如果您希望使用除基本引导提示之外的任何菜单或配置,请把 {{ic|/usr/lib/syslinux/bios/}} 里的所有的 {{ic|.c32}} 文件复制到 {{ic|/boot/syslinux/}} 中。请不要使用符号链接。<br />
<br />
# cp /usr/lib/syslinux/bios/*.c32 /boot/syslinux/ <br />
<br />
现在安装启动加载器。对 挂载后的 FAT,ext2/3/4,或 btrfs 启动分区使用 ''extlinux'' 安装:<br />
<br />
# extlinux --install /boot/syslinux<br />
<br />
替代的,对一个'''没有被挂载'''的 FAT 启动分区使用''syslinux'' 安装:<br />
<br />
# syslinux --directory syslinux --install /dev/sda1<br />
<br />
在此之后,继续安装适用于对应分区表的 Syslinux 引导代码:<br />
* {{ic|mbr.bin}} will be installed for an [[#MBR partition table]], or <br />
* {{ic|gptmbr.bin}} will be installed for a [[#GUID partition table]]<br />
as described in the next sections.<br />
<br />
See [[Master Boot Record]] for further general information.<br />
{{Tip|If you are unsure of which partition table you are using (MBR or GPT), you can check using {{ic|blkid -s PTTYPE -o value /dev/sda}}.}}<br />
{{Note|For a partitionless install, there is no need to install the Syslinux boot code to the MBR. You could skip below and jump to [[#Configuration]]. See [https://unix.stackexchange.com/questions/103501/boot-partiotionless-disk-with-syslinux].}}<br />
<br />
===== MBR partition table =====<br />
<br />
For an [[Partitioning#Master_Boot_Record_(partition_table)|MBR partition table]], ensure your boot partition is marked as "active" in your partition table (the "boot" flag is set). Applications capable of doing this include [[fdisk]] and [[parted]]. It should look like this:<br />
<br />
{{hc|# fdisk -l /dev/sda|<br />
[...]<br />
Device Boot Start End Blocks Id System<br />
/dev/sda1 * 2048 104447 51200 83 Linux<br />
/dev/sda2 104448 625142447 312519000 83 Linux<br />
}}<br />
<br />
Install the MBR:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sda<br />
<br />
An alternative MBR which Syslinux provides is: {{ic|altmbr.bin}}. This MBR does ''not'' scan for bootable partitions; instead, the last byte of the MBR is set to a value indicating which partition to boot from. Here is an example of how {{ic|altmbr.bin}} can be copied into position:<br />
<br />
# printf '\x5' | cat /usr/lib/syslinux/bios/altmbr.bin - | dd bs=440 count=1 iflag=fullblock of=/dev/sda<br />
<br />
In this case, a single byte of value 5 (hexadecimal) is appended to the contents of {{ic|altmbr.bin}} and the resulting 440 bytes are written to the MBR on device {{ic|sda}}. Syslinux was installed on the first logical partition ({{ic|/dev/sda5}}) of the disk.<br />
<br />
===== GUID partition table =====<br />
<br />
For a [[GPT]], ensure that attribute bit 2 "Legacy BIOS bootable" is set for the {{ic|/boot}} partition. For [[Parted]] it can be set using the "legacy_boot" flag. Using [[sgdisk]] the command to set the attribute is:<br />
<br />
# sgdisk /dev/sda --attributes=1:set:2<br />
<br />
This will set the attribute "legacy BIOS bootable" on partition 1 of {{ic|/dev/sda}}. To check:<br />
<br />
{{hc|1=# sgdisk /dev/sda --attributes=1:show|2=<br />
1:2:1 (legacy BIOS bootable)<br />
}}<br />
<br />
Install the MBR:<br />
<br />
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sda<br />
<br />
== UEFI Systems ==<br />
<br />
{{Note|<br />
* {{ic|efi64}} denotes x86_64 UEFI systems, for IA32 (32-bit) EFI replace {{ic|efi64}} with {{ic|efi32}} in the below commands.<br />
* For Syslinux, the kernel and initramfs files need to be in the [[EFI system partition]] (aka ESP), as Syslinux does not (currently) have the ability to access files outside its own partition (i.e. outside ESP in this case). For this reason, it is recommended to mount ESP at {{ic|/boot}}.<br />
* The automatic install script {{ic|/usr/bin/syslinux-install_update}} does not support UEFI install.<br />
* The configuration syntax of {{ic|syslinux.cfg}} for UEFI is same as that of BIOS.<br />
}}<br />
<br />
=== Limitations of UEFI Syslinux ===<br />
<br />
* UEFI Syslinux application {{ic|syslinux.efi}} cannot be signed by {{ic|sbsign}} (from {{Pkg|sbsigntools}}) for UEFI Secure Boot. Bug report: [https://bugzilla.syslinux.org/show_bug.cgi?id=8]<br />
* Using TAB to edit kernel parameters in UEFI Syslinux menu might lead to garbaged display (text on top of one another). Bug report: [https://bugzilla.syslinux.org/show_bug.cgi?id=9]<br />
* UEFI Syslinux does not support chainloading other EFI applications like {{ic|UEFI Shell}} or {{ic|Windows Boot Manager}}. Enhancement request: [https://bugzilla.syslinux.org/show_bug.cgi?id=17]<br />
* In some cases, UEFI Syslinux might not boot in some Virtual Machines like [[QEMU]]/OVMF or [[VirtualBox]] or some [[VMware]] products/versions and in some UEFI emulation environments like DUET. A Syslinux contributor has confirmed no such issues present on VMware Workstation 10.0.2 and Syslinux-6.02 or later. Bug reports: [https://bugzilla.syslinux.org/show_bug.cgi?id=21], [https://bugzilla.syslinux.org/show_bug.cgi?id=23] and [https://bugzilla.syslinux.org/show_bug.cgi?id=72]<br />
* Memdisk is not available for UEFI. Enhancement request: [https://bugzilla.syslinux.org/show_bug.cgi?id=30]<br />
<br />
=== Installation on UEFI ===<br />
<br />
{{Note|In the commands related to UEFI, {{ic|''esp''}} denotes the mountpoint of the [[EFI system partition]] aka ESP.}}<br />
<br />
* Install the {{Pkg|syslinux}} and {{Pkg|efibootmgr}} packages from the [[official repositories]]. Then setup Syslinux in the ESP as follows:<br />
* Copy Syslinux files to ESP:<br />
<br />
# mkdir -p ''esp''/EFI/syslinux<br />
# cp -r /usr/lib/syslinux/efi64/* ''esp''/EFI/syslinux<br />
<br />
* Setup boot entry for Syslinux using [[efibootmgr]]:<br />
<br />
# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/syslinux/syslinux.efi --label "Syslinux" --verbose<br />
<br />
where {{ic|/dev/sdXY}} is the partition containing the bootloader.<br />
<br />
* Create or edit {{ic|''esp''/EFI/syslinux/syslinux.cfg}} by following [[#Configuration]].<br />
<br />
{{Note|<br />
* The config file for UEFI is {{ic|''esp''/EFI/syslinux/syslinux.cfg}}, not {{ic|/boot/syslinux/syslinux.cfg}}. Files in {{ic|/boot/syslinux/}} are BIOS specific and not related to UEFI Syslinux.<br />
* When booted in BIOS mode, {{Pkg|efibootmgr}} will not be able to set EFI nvram entry for {{ic|/EFI/syslinux/syslinux.efi}}. To work around, place resources at the default EFI location: {{ic|''esp''/EFI/syslinux/* -> ''esp''/EFI/BOOT/*}} and {{ic|''esp''/EFI/syslinux/syslinux.efi -> ''esp''/EFI/BOOT/bootx64.efi}}<br />
}}<br />
<br />
== Configuration ==<br />
<br />
The Syslinux configuration file, {{ic|syslinux.cfg}}, should be created in the same directory where you installed Syslinux. In our case, {{ic|/boot/syslinux/}} for BIOS systems and {{ic|''esp''/EFI/syslinux/}} for UEFI systems.<br />
<br />
The bootloader will look for either {{ic|syslinux.cfg}} (preferred) or {{ic|extlinux.conf}}<br />
<br />
{{Tip|<br />
* Instead of {{ic|LINUX}}, the keyword {{ic|KERNEL}} can also be used. {{ic|KERNEL}} tries to detect the type of the file, while {{ic|LINUX}} always expects a Linux kernel. <br />
* {{ic|TIMEOUT}} value is in units of '''0.1 seconds'''.<br />
}}<br />
<br />
=== Examples ===<br />
<br />
{{Note|<br />
* Any configuration file found in the examples needs to be edited to set the proper kernel parameters. See section [[#Kernel parameters]].<br />
* Please, pay close attention to the paths. The examples may not be suitable for your installation, especially when using UEFI.<br />
* The following examples assume that the kernel and initrd files are located one directory level up in relation to the location of {{ic|syslinux.cfg}} (or, more precisely, one level up from the working directory).<br />
}}<br />
<br />
==== Boot prompt ====<br />
<br />
This is a simple configuration file that will show a {{ic|boot:}} prompt and will automatically boot after 5 seconds. If you want to boot directly without seeing a prompt, set {{ic|PROMPT}} to {{ic|0}}.<br />
<br />
Configuration:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
PROMPT 1<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
==== Text boot menu ====<br />
<br />
Syslinux also allows you to use a boot menu. To use it, copy the {{ic|menu}} and {{ic|libutil}} modules to your Syslinux directory:<br />
<br />
# cp /usr/lib/syslinux/bios/{menu,libutil}.c32 /boot/syslinux/<br />
<br />
Since version 5.00, additional {{ic|lib*.c32}} library modules are frequently needed too. See [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies the Syslinux wiki] for the module dependency tree.<br />
<br />
Configuration:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI menu.c32<br />
PROMPT 0<br />
<br />
MENU TITLE Boot Menu<br />
TIMEOUT 50<br />
DEFAULT arch<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
For more details about the menu system, see [https://wiki.syslinux.org/wiki/index.php/Menu the Syslinux wiki].<br />
<br />
==== Graphical boot menu ====<br />
<br />
Syslinux also allows you to use a graphical boot menu. To use it, copy the {{ic|vesamenu}} COM32 module to your Syslinux folder:<br />
<br />
# cp /usr/lib/syslinux/bios/vesamenu.c32 /boot/syslinux/<br />
<br />
Since version 5.00, additional {{ic|lib*.c32}} library modules are frequently needed too. See [https://wiki.syslinux.org/wiki/index.php?title=Library_modules#Syslinux_modules_working_dependencies the Syslinux wiki] for the module dependency tree.<br />
<br />
{{Note| If you are using [[UEFI]], make sure to copy from {{ic|/usr/lib/syslinux/efi64/}} (or {{ic|efi32}} for IA32 (32-bit) EFI systems), otherwise you will be presented with a black screen. In that case, boot from a live medium and use [[chroot]] to make the appropriate changes.}}<br />
<br />
This configuration uses the same menu design as the Arch Install CD, its config can be found at [https://projects.archlinux.org/archiso.git/tree/configs/releng/syslinux projects.archlinux.org]. The [https://projects.archlinux.org/archiso.git/plain/configs/releng/syslinux/splash.png Arch Linux background image] can be downloaded from there, too. Copy the image to {{ic|/boot/syslinux/splash.png}}.<br />
<br />
Configuration:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
UI vesamenu.c32<br />
DEFAULT arch<br />
PROMPT 0<br />
MENU TITLE Boot Menu<br />
MENU BACKGROUND splash.png<br />
TIMEOUT 50<br />
<br />
MENU WIDTH 78<br />
MENU MARGIN 4<br />
MENU ROWS 5<br />
MENU VSHIFT 10<br />
MENU TIMEOUTROW 13<br />
MENU TABMSGROW 11<br />
MENU CMDLINEROW 11<br />
MENU HELPMSGROW 16<br />
MENU HELPMSGENDROW 29<br />
<br />
# Refer to https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32<br />
<br />
MENU COLOR border 30;44 #40ffffff #a0000000 std<br />
MENU COLOR title 1;36;44 #9033ccff #a0000000 std<br />
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all<br />
MENU COLOR unsel 37;44 #50ffffff #a0000000 std<br />
MENU COLOR help 37;40 #c0ffffff #a0000000 std<br />
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std<br />
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std<br />
MENU COLOR msg07 37;40 #90ffffff #a0000000 std<br />
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std<br />
<br />
<br />
LABEL arch<br />
MENU LABEL Arch Linux<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux.img<br />
<br />
<br />
LABEL archfallback<br />
MENU LABEL Arch Linux Fallback<br />
LINUX ../vmlinuz-linux<br />
APPEND root=/dev/sda2 rw<br />
INITRD ../initramfs-linux-fallback.img<br />
</nowiki>}}<br />
<br />
Since Syslinux 3.84, {{ic|vesamenu.c32}} supports the {{ic|MENU RESOLUTION $WIDTH $HEIGHT}} directive.<br />
To use it, insert {{ic|MENU RESOLUTION 1440 900}} into your config for a 1440x900 resolution.<br />
However, the background picture has to have exactly the right resolution, as Syslinux will otherwise refuse to load the menu.<br />
<br />
To center the menu and adjust resolution, use {{ic|MENU RESOLUTION}}, {{ic|MENU HSHIFT $N}} and {{ic|MENU VSHIFT $N}} where {{ic|$N}} is a positive number. The default values are both {{ic|0}} which is the upper-left hand corner of your monitor. Conversely, a negative number starts from the opposite end of the screen (e.g. {{ic|VHSHIFT -4}} would be 4 rows from the bottom of the screen).<br />
<br />
To move the menu to the center, add or edit these values:<br />
<br />
{{hc|<br />
* BIOS: /boot/syslinux/syslinux.cfg<br />
* UEFI: ''esp''/EFI/syslinux/syslinux.cfg|<nowiki><br />
MENU RESOLUTION 800 600 # or whatever your screen resolution is<br />
MENU WIDTH 78 # width of the menu also required to bring the menu box to size<br />
MENU VSHIFT 10 # moves menu down<br />
MENU HSHIFT 10 # moves menu right<br />
</nowiki>}}<br />
<br />
VESA standards are commonly a maximum of 25 rows and 80 columns, so going higher than those values might move the menu off the screen, potentially requiring editing from a rescue CD.<br />
<br />
=== Kernel parameters ===<br />
<br />
The [[kernel parameters]] are set by using the {{ic|APPEND}} directive in {{ic|syslinux.cfg}}: <br />
for each {{ic|LABEL}} entry, a maximum of one [https://wiki.syslinux.org/wiki/index.php/Config#APPEND APPEND] line is accepted (i.e. spanning multiple lines is not valid).<br />
<br />
It is recommended to make the following changes for the "fallback" entry as well.<br />
<br />
'''In the simplest case''', the partition name in the {{ic|root}} parameter needs to be replaced. Change {{ic|/dev/sda2}} to point to the correct root partition.<br />
<br />
APPEND root=/dev/sda2<br />
<br />
'''If you want to use [[UUID]]''' for [[persistent block device naming]] change the {{ic|APPEND}} line as follows, substituting {{ic|1234}} with the {{ic|UUID}} of your root partition:<br />
<br />
APPEND root=UUID=''1234'' rw<br />
<br />
'''If you use [[dm-crypt]] encryption''' change the {{ic|APPEND}} line to use your encrypted volume:<br />
<br />
APPEND root=/dev/mapper/''name'' cryptdevice=/dev/sda2:''name'' rw<br />
<br />
'''If you are using software''' [[Wikipedia:RAID|RAID]] using [http://neil.brown.name/blog/mdadm mdadm], change the {{ic|APPEND}} line to accommodate your RAID arrays. As an example the following accommodates three RAID 1 arrays and sets the appropriate one as root:<br />
<br />
APPEND root=/dev/md1 rw md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4<br />
<br />
If booting from a software raid partition fails using the kernel device node method above an alternative, a more reliable, way is to use partition labels:<br />
<br />
APPEND root=LABEL=''THEROOTPARTITIONLABEL'' rw<br />
<br />
'''If booting a [[btrfs]] subvolume''', amend the {{ic|APPEND}} line with {{ic|rootflags<nowiki>=</nowiki>subvol<nowiki>=</nowiki><root subvolume>}}. For example, where {{ic|/dev/sda2}} has been mounted as a btrfs subvolume called 'ROOT' (e.g. {{ic|mount -o noatime,subvol<nowiki>=</nowiki>ROOT /dev/sda2 /mnt}}), then the {{ic|APPEND}} line would need to be modified as follows:<br />
<br />
APPEND root=/dev/sda2 rw rootflags=subvol=ROOT<br />
<br />
A failure to do so will otherwise result in the following error message: {{ic|ERROR: Root device mounted successfully, but /sbin/init does not exist.}}<br />
<br />
=== Auto boot ===<br />
<br />
If you do not want to see the Syslinux menu at all, use the [[#Boot prompt]], and set {{ic|PROMPT}} to {{ic|0}} and comment out any {{ic|UI}} menu entries. Setting the {{ic|TIMEOUT}} variable to {{ic|0}} might also be a good idea. Make sure there is a {{ic|DEFAULT}} set in your {{ic|syslinux.cfg}}. Holding either {{ic|Shift}} or {{ic|Alt}}, or setting either {{ic|Caps Lock}} or {{ic|Scroll Lock}}, during boot will allow for options other than default to be used.<br />
See the [https://wiki.syslinux.org/wiki/index.php/Directives/special_keys upstream wiki] for additional alternatives.<br />
<br />
=== Security ===<br />
<br />
Syslinux has two levels of bootloader security: a menu master password, and a per-menu-item password. In {{ic|syslinux.cfg}}, use<br />
<br />
MENU MASTER PASSWD passwd <br />
<br />
to set a master bootloader password, and<br />
<br />
MENU PASSWD passwd <br />
<br />
within a {{ic|LABEL}} block to password-protect individual boot items.<br />
<br />
The passwd can be either a cleartext password or hashed: [https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32 see official documentation].<br />
<br />
=== Chainloading ===<br />
<br />
Syslinux BIOS cannot directly chainload files located on other partitions; however, {{ic|chain.c32}} can boot a partition boot sector (VBR) or another disk's MBR.<br />
<br />
==== Chainloading a partition's VBR ====<br />
<br />
If you want to chainload other operating systems (such as Windows) or boot loaders, copy the {{ic|chain.c32}} module to the Syslinux directory (additional {{ic|lib*.c32}} library modules might be needed too; for details, see the instructions in the previous section). Then create a section in the configuration file:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND hd0 3<br />
...<br />
}}<br />
<br />
{{ic|hd0 3}} is the third partition on the first BIOS drive - drives are counted from zero, but partitions are counted from one. <br />
<br />
{{Note|For Windows, this skips the system's own boot manager ({{ic|bootmgr}}), which is required for a few important updates ([https://support.microsoft.com/kb/2883200 eg.]) to complete. In such cases it may be advisable to temporarily set the MBR boot flag to the Windows partition (eg. with [[GParted]]), let the update finish installing, and then reset the flag to the Syslinux partition (eg. with Windows's own [https://www.online-tech-tips.com/computer-tips/set-active-partition-vista-xp DiskPart]).}}<br />
<br />
==== Chainloading a disk's MBR ====<br />
<br />
If you are unsure about which drive your BIOS thinks is "first", you can instead use the MBR identifier, or if you are using GPT, the filesystem labels. To use the MBR identifier, run the command<br />
<br />
{{hc|# fdisk -l /dev/sdb|<nowiki><br />
Disk /dev/sdb: 128.0 GB, 128035676160 bytes <br />
255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors<br />
Units = sectors of 1 * 512 = 512 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0xf00f1fd3<br />
<br />
Device Boot Start End Blocks Id System<br />
/dev/sdb1 2048 4196351 2097152 7 HPFS/NTFS/exFAT<br />
/dev/sdb2 4196352 250066943 122935296 7 HPFS/NTFS/exFAT<br />
</nowiki>}}<br />
<br />
replacing {{ic|/dev/sdb}} with the drive you wish to chainload. Using the hexadecimal number under Disk identifier: {{ic|0xf00f1fd3}} in this case, the syntax in {{ic|syslinux.cfg}} is<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xf00f1fd3<br />
...<br />
}}<br />
<br />
For more details about chainloading, see [https://wiki.syslinux.org/wiki/index.php/Comboot/chain.c32 the Syslinux wiki].<br />
<br />
==== Chainloading other boot loaders ====<br />
<br />
If you have [[GRUB]] installed on the same partition, you can chainload it by using: <br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2<br />
MENU LABEL Grub2<br />
COM32 chain.c32<br />
APPEND file=../grub/boot.img<br />
...<br />
</nowiki>}}<br />
<br />
Alternatively, it is also possible to load [[GRUB]] as a linux kernel by prepending {{ic|lnxboot.img}} to {{ic|core.img}}. The file {{ic|lnxboot.img}} is part of {{ic|core/grub}} and can be found in {{ic|/usr/lib/grub/i386-pc}}.<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
...<br />
LABEL grub2lnx<br />
MENU LABEL Grub2 (lnxboot)<br />
LINUX ../grub/i386-pc/lnxboot.img<br />
INITRD ../grub/i386-pc/core.img<br />
...<br />
</nowiki>}}<br />
<br />
This may be required for booting from ISO images.<br />
<br />
==== Chainloading other Linux systems ====<br />
<br />
{{Accuracy|Among other inaccuracies... 1_ There is no obligation to install yet another boot loader if you already have one related to the other partition/OS (e.g. GRUB2 installed in the MBR or in the VBR of the partition being chainloaded to). 2_ Syslinux (in any of its derivatives) is never "installed to the MBR", so mentioning the MBR in this section without any explanation of what it is being meant or how to do it in practical terms is just adding confusion. 3_ Typos and misspelling. 4_No need to explain (yet again) how to install some (other) bootloader to some (other) partition / OS; just how to chainload from Syslinux to that other partition / bootloader / OS.}}<br />
<br />
Chainloading another bootloader such as Windows' is pretty obvious, as there is a definite bootloader to chain to. But with Syslinux, it is only able to load files residing on the same partition as the configuration file. Thus, if you have another version of Linux on a separate partition, without a shared {{ic|/boot}}, it becomes ''necessary'' to employ EXTLINUX rather than the other OS's default bootloader (eg. GRUB2). Essentially, EXTLINUX can be installed on the partition superblock/[[wikipedia:Volume_boot_record|VBR]] and be called as a ''separate bootloader'' right from the MBR installed by Syslinux. EXTLINUX is part of The Syslinux Project and is included with the {{Pkg|syslinux}} package.<br />
<br />
The following instructions assume you have Syslinux installed already. These instructions will also assume that the typical Arch Linux configuration path of {{ic|/boot/syslinux}} is being used and the chainloaded system's {{ic|/}} is on {{ic|/dev/sda3}}. <br />
<br />
From a booted Linux (likely the partition that Syslinux is set up to boot), mount the other system's root partition to your desired mount point. In this example this will be {{ic|/mnt}}. Also, if a separate {{ic|/boot}} partition is used on the second operating system, that will also need to be mounted. The example assumes this is {{ic|/dev/sda2}}.<br />
<br />
# mount /dev/sda3 /mnt<br />
# mount /dev/sda2 /mnt/boot (only necessary for separate /boot)<br />
<br />
Install EXTLINUX to the partition VBR, and copy necessary {{ic|*.c32}} files<br />
<br />
# extlinux -i /mnt/boot/syslinux/ (first create the directory if necessary)<br />
# cp /usr/lib/syslinux/bios/*.c32 /mnt/boot/syslinux<br />
<br />
Create {{ic|/mnt/boot/syslinux/syslinux.cfg}}. You can use the other Linux's bootloader menu file for reference. Below is an example:<br />
<br />
{{hc|/mnt/boot/syslinux/syslinux.cfg '''on /dev/sda3'''|<nowiki><br />
TIMEOUT 10<br />
<br />
UI menu.c32<br />
<br />
LABEL OtherLinux<br />
LINUX /boot/vmlinuz-linux<br />
INITRD /boot/initramfs-linux.img<br />
APPEND root=/dev/sda3 rw quiet<br />
<br />
LABEL MAIN<br />
COM32 chain.c32<br />
APPEND hd0 0<br />
</nowiki>}}<br />
<br />
And then add an entry to your main syslinux.cfg <br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<nowiki><br />
LABEL OtherLinux<br />
COM32 chain.c32<br />
APPEND hd0 3<br />
</nowiki>}}<br />
<br />
Note that the other Linux entry in {{ic|<other-OS>/boot/syslinux/syslinux.cfg}} will need to be edited each time you update this OS's kernel unless it has symlinks to its latest kernel and initrd in {{ic|/}}. Since we are booting the kernel directly and not chainloading the other-OS's default bootloader.<br />
<br />
=== Using memtest ===<br />
<br />
Install {{Pkg|memtest86+}} from the [[official repositories]].<br />
<br />
Use this {{ic|LABEL}} section to launch [[Wikipedia:Memtest86|memtest]]:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
...<br />
LABEL memtest<br />
MENU LABEL Memtest86+<br />
LINUX ../memtest86+/memtest.bin<br />
...<br />
}}<br />
<br />
{{Note|If you are using PXELINUX, change the name from {{ic|memtest.bin}} to {{ic|memtest}} since PXELINUX treats the file with ''.bin'' extension as a boot sector and loads only 2KB of it.}}<br />
<br />
=== HDT ===<br />
<br />
[https://wiki.syslinux.org/wiki/index.php/Hdt_(Hardware_Detection_Tool) HDT (Hardware Detection Tool)] displays hardware information. Like before, the {{ic|.c32}} file has to be copied from {{ic|/boot/syslinux/}}. Additional {{ic|lib*.c32}} library modules might be needed too.<br />
For PCI info, copy {{ic|/usr/share/hwdata/pci.ids}} to {{ic|/boot/syslinux/pci.ids}} and add the following to your configuration file:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL hdt<br />
MENU LABEL Hardware Info<br />
COM32 hdt.c32<br />
}}<br />
<br />
=== Reboot and power off ===<br />
<br />
{{Note|As of Syslinux 6.03, {{ic|poweroff.c32}} only works with [[Wikipedia:Advanced Power Management|APM]] and not with [[Wikipedia:Advanced Configuration and Power Interface|ACPI]]. For a possible solution, see [https://www.syslinux.org/archives/2012-March/017661.html acpioff: COM32 module to shut off machine using ACPI].}}<br />
<br />
Use the following sections to reboot or power off your machine:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
LABEL reboot<br />
MENU LABEL Reboot<br />
COM32 reboot.c32<br />
<br />
LABEL poweroff<br />
MENU LABEL Power Off<br />
COM32 poweroff.c32<br />
}}<br />
<br />
=== Clear menu ===<br />
<br />
To clear the screen when exiting the menu, add the following line:<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU CLEAR<br />
}}<br />
<br />
=== Keyboard layout ===<br />
<br />
If you often have to edit your boot command with diverse parameters in the Syslinux boot prompt, then you might want to remap your keyboard layout. This allows you to enter "=", "/" and other characters easily on a non-US keyboard.<br />
<br />
{{Note|{{ic|keytab-lilo}}, which is included in the {{Pkg|syslinux}} package, is a perl script invoking the ''loadkeys'' program.}}<br />
<br />
To create a compatible keymap (e.g. a german one) run:<br />
<br />
# keytab-lilo /usr/share/kbd/keymaps/i386/qwerty/us.map.gz /usr/share/kbd/keymaps/i386/qwertz/de.map.gz > /boot/syslinux/de.ktl<br />
<br />
Now edit {{ic|syslinux.cfg}} and add:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
KBDMAP de.ktl<br />
}}<br />
<br />
See the [https://wiki.syslinux.org/wiki/index.php/Directives/kbdmap Syslinux wiki] for more details.<br />
<br />
=== Hiding the menu ===<br />
<br />
Use the option:<br />
<br />
{{hc|/boot/syslinux/syslinux.cfg|<br />
MENU HIDDEN<br />
}}<br />
to hide the menu while displaying only the timeout. Press any key to bring up the menu.<br />
<br />
=== PXELINUX ===<br />
<br />
{{Note|For UEFI, Syslinux uses the same binary for disk booting and network booting. Loading files from TFTP or other network protocols will require network booting Syslinux. }}<br />
<br />
PXELINUX is provided by the {{Pkg|syslinux}} package.<br />
<br />
For BIOS clients, copy the {{ic|<nowiki>{l,}pxelinux.0</nowiki>}} bootloader to the boot directory of the client. For version 5.00 and newer, also copy {{ic|ldlinux.c32}} from the same package:<br />
<br />
# cp /usr/lib/syslinux/bios/pxelinux.0 "''TFTP_root''/boot/"<br />
# cp /usr/lib/syslinux/bios/ldlinux.c32 "''TFTP_root''/boot/"<br />
# mkdir "''TFTP_root''/boot/pxelinux.cfg"<br />
<br />
We also created the {{ic|pxelinux.cfg}} directory, which is where PXELINUX searches for configuration files by default. Because we do not want to discriminate between different host MACs, we then create the {{ic|default}} configuration.<br />
<br />
{{hc|''TFTP_root''/boot/pxelinux.cfg/default|<nowiki><br />
DEFAULT linux<br />
<br />
LABEL linux<br />
KERNEL vmlinuz-linux<br />
APPEND initrd=initramfs-linux.img quiet ip=:::::eth0:dhcp nfsroot=10.0.0.1:/arch<br />
</nowiki>}}<br />
<br />
Or if you are using NBD, use the following append line:<br />
<br />
{{bc|<nowiki>append ro initrd=initramfs-linux.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_port=10809 nbd_name=arch root=/dev/nbd0</nowiki>}}<br />
<br />
{{Note|You will need to change {{ic|nbd_host}} and/or {{ic|nfsroot}}, respectively, to match your network configuration (the address of the NFS/NBD server)}}<br />
<br />
PXELINUX uses the same configuration syntax as SYSLINUX; refer to the upstream documentation for more information.<br />
<br />
The kernel and initramfs will be transferred via TFTP, so the paths to those are going to be relative to the TFTP root. Otherwise, the root filesystem is going to be the NFS mount itself, so those are relative to the root of the NFS server.<br />
<br />
To actually load PXELINUX, replace {{ic|filename "/grub/i386-pc/core.0";}} in {{ic|/etc/dhcpd.conf}} with {{ic|filename "/pxelinux.0"}} (or with {{ic|filename "/lpxelinux.0"}}).<br />
<br />
=== Booting ISO9660 image files with memdisk ===<br />
<br />
Syslinux supports booting from ISO images directly using the [https://wiki.syslinux.org/wiki/index.php/MEMDISK memdisk] module, see [[Multiboot USB drive#Using Syslinux and memdisk]] for examples.<br />
<br />
=== Serial console ===<br />
<br />
See [[Working with the serial console#Syslinux]].<br />
<br />
=== Boot another OS once ===<br />
<br />
It is possible to temporarily change the default Syslinux action and boot another label only during the next boot. The following command shows how to boot the {{ic|archfallback}} label once:<br />
<br />
# extlinux -o archfallback /boot/syslinux<br />
<br />
During the next boot, the specified label will be booted without any Syslinux prompt showing up. The default Syslinux boot behaviour will be restored on the next reboot.<br />
<br />
== Troubleshooting ==<br />
<br />
=== Failed to load ldlinux ===<br />
<br />
An error message such as "Failed to load ldlinux.c32" during the initial boot can be triggered by many diverse reasons.<br />
One potential reason could be a change in file system tools or in a file system structure, depending on its own version.<br />
<br />
{{Warning|1=As of Syslinux 6.03, some of the features of the supported file systems are not supported by the bootloader. See [https://wiki.syslinux.org/wiki/index.php/Filesystem] for more information.}}<br />
<br />
{{Note|1=There is no direct and unique correspondence between a message such as {{ic|Failed to load ldlinux.c32}} and a problem related to the file system:<br />
* Other alternative symptoms, instead of this message, could also indicate a problem related to the file system.<br />
* The message does not necessarily mean that the problem is related to the file system; there are other possible reasons for this type of messages.<br />
}}<br />
<br />
See also [https://wiki.syslinux.org/wiki/index.php/Common_Problems#Failed_to_load_ldlinux] (the whole page might be relevant for troubleshooting too).<br />
<br />
=== Using the Syslinux prompt===<br />
<br />
You can type in the {{ic|LABEL}} name of the entry that you want to boot (as per your {{ic|syslinux.cfg}}). If you used the example configurations, just type:<br />
<br />
boot: arch<br />
<br />
If you get an error that the configuration file could not be loaded, you can pass your needed boot parameters, e.g.:<br />
<br />
boot: ../vmlinuz-linux root=/dev/sda2 rw initrd=../initramfs-linux.img<br />
<br />
If you do not have access to {{ic|boot:}} in [[Ramdisk|ramfs]], and therefore temporarily unable to boot the kernel again,<br />
:1. Create a temporary directory, in order to mount your root partition (if it does not exist already):<br />
# mkdir -p /new_root<br />
:2. Mount {{ic|/}} under {{ic|/new_root}} (in case {{ic|/boot/}} is on the same partition, otherwise you will need to mount them both):<br />
{{Note|Busybox cannot mount {{ic|/boot}} if it is on its own ext2 partition.}}<br />
# mount /dev/sd[a-z][1-9] /new_root<br />
<br />
:3. Use {{ic|vim}} and edit {{ic|syslinux.cfg}} again to suit your needs and save file.<br />
:4. Reboot.<br />
<br />
=== Fsck fails on root partition ===<br />
<br />
In the case of a badly corrupted root partition (in which the journal is damaged), in the ramfs emergency shell, mount the root file system:<br />
<br />
# mount /dev/''root partition'' /new_root<br />
<br />
And grab the tune2fs binary from the root partition (it is not included in Syslinux):<br />
<br />
# cp /new_root/sbin/tune2fs /sbin/<br />
<br />
Follow the instructions at [[Fsck#ext2fs_:_no_external_journal|ext2fs: no external journal]] to create a new journal for the root partition.<br />
<br />
=== No Default or UI found on some computers ===<br />
<br />
Certain motherboard manufacturers have less compatibility for booting from USB devices than others. While an ext4 formatted USB drive may boot on a more recent computer, some computers may hang if the boot partition containing the ''kernel'' and ''initrd'' are not on a FAT16 partition. To prevent an older machine from loading {{ic|ldlinux}} and failing to read {{ic|syslinux.cfg}}, create a partition (≤ 2 GB) and format to [[FAT16]] using {{Pkg|dosfstools}}:<br />
<br />
# mkfs.fat -F 16 /dev/sda1<br />
<br />
then install and configure Syslinux.<br />
<br />
=== Missing operating system ===<br />
<br />
* Check that you have installed {{ic|gptmbr.bin}} for GPT and {{ic|mbr.bin}} for MBR partition table. A "Missing operating system" message comes from {{ic|mbr.bin}} while {{ic|gptmbr.bin}} would show a "Missing OS" message.<br />
* Check whether the partition that contains {{ic|/boot}} has the "boot" flag enabled.<br />
* Check whether the first partition at the boot device starts at sector 1 rather than sector 63 or 2048. Check this with {{ic|fdisk -l}}. If it starts at sector 1, you can move the partition(s) with {{ic|gparted}} from a rescue disk. Or, if you have a separate boot partition, you can back up {{ic|/boot}} with <br />
<br />
# cp -a /boot /boot.bak<br />
<br />
and then boot up with the Arch install disk. Next, use {{ic|cfdisk}} to delete the {{ic|/boot}} partition, and recreate it. This time it should begin at the proper sector, '''63'''. Now mount your partitions and {{ic|chroot}} into your mounted system, as described in the [[installation guide]]. Restore {{ic|/boot}} with the command<br />
<br />
# cp -a /boot.bak/ /boot/<br />
<br />
Check if {{ic|/etc/fstab}} is correct, run:<br />
<br />
# syslinux-install_update -iam<br />
<br />
and reboot.<br />
<br />
You will also get this error if you are trying to boot from a md [[RAID]] 1 array and created the array with a too new version of the metadata that Syslinux does not understand. As of August 2013 by default mdadm will create an array with version 1.2 metadata, but Syslinux does not understand metadata newer than 1.0. If this is the case you will need to recreate your [[RAID]] array using the {{ic|1=--metadata=1.0}} flag to mdadm.<br />
<br />
=== Windows boots up, ignoring Syslinux ===<br />
<br />
'''Solution:''' Make sure the partition that contains {{ic|/boot}} has the boot flag enabled. Also, make sure the boot flag is not enabled on the Windows partition. See the [[#Chainloading a partition's VBR|installation section]] above.<br />
<br />
The MBR that comes with Syslinux looks for the first active partition that has the boot flag set. The Windows partition was likely found first and had the boot flag set. If you wanted, you could use the MBR that Windows or MS-DOS {{ic|fdisk}} provides.<br />
<br />
=== Menu entries do nothing ===<br />
<br />
You select a menu entry and it does nothing, it just ''"refreshes"'' the menu. This usually means that you have an error in your {{ic|syslinux.cfg}} file. Hit {{ic|Tab}} to edit your boot parameters. Alternatively, press {{ic|Esc}} and type in the {{ic|LABEL}} of your boot entry (e.g. ''arch''). Another cause could be that you do not have a kernel installed. Find a way to access your file system (through live CD, etc) and make sure that {{ic|/mount/vmlinuz-linux}} exists and does not have a size of 0. If this is the case, reinstall your kernel.<br />
<br />
=== Cannot remove ldlinux.sys ===<br />
<br />
The {{ic|ldlinux.sys}} file has the [[File_permissions_and_attributes#File_attributes|immutable attribute]] set, which prevents it from being deleted or overwritten. This is because the sector location of the file must not change or else Syslinux has to be reinstalled. To remove it, run:<br />
<br />
# chattr -i /boot/syslinux/ldlinux.sys<br />
# rm /boot/syslinux/ldlinux.sys<br />
<br />
=== White block in upper left corner when using vesamenu ===<br />
<br />
Problem:<br />
''As of linux-3.0, the modesetting driver tries to keep the current contents of the screen after changing the resolution (at least it does so with my Intel, when having Syslinux in text mode). It seems that this goes wrong when combined with the vesamenu module in Syslinux (the white block is actually an attempt to keep the Syslinux menu, but the driver fails to capture the picture from vesa graphics mode).''<br />
<br />
If you have a custom resolution and a {{ic|vesamenu}} with early modesetting, try to append the following in {{ic|syslinux.cfg}} to remove the white block and continue in graphics mode:<br />
<br />
APPEND root=/dev/sda6 rw 5 '''vga=current''' quiet splash<br />
<br />
=== Chainloading Windows does not work, when it is installed on another drive ===<br />
<br />
If Windows is installed on a different drive than Arch and you have trouble chainloading it, try the following configuration:<br />
<br />
{{bc|<br />
LABEL Windows<br />
MENU LABEL Windows<br />
COM32 chain.c32<br />
APPEND mbr:0xdfc1ba9e swap<br />
}}<br />
<br />
Replace the mbr code with the one your Windows drive has (details [[#Chainloading|above]]), and append {{ic|swap}} to the options.<br />
<br />
=== Read bootloader log ===<br />
<br />
In some cases (e.g. bootloader unable to boot kernel) it is highly desirable to get more information from the boot process. ''Syslinux'' prints error messages to screen but the boot menu quickly overwrites the text. To avoid losing the log information, disable {{ic|UI menu}} in {{ic|syslinux.cfg}} and use the default "command-line" prompt. It means:<br />
<br />
* avoid the {{ic|UI}} directive<br />
* avoid {{ic|ONTIMEOUT}}<br />
* avoid {{ic|ONERROR}}<br />
* avoid {{ic|MENU CLEAR}}<br />
* use a higher {{ic|TIMEOUT}}<br />
* use {{ic|PROMPT 1}}<br />
* use {{ic|DEFAULT ''problematic_label''}}<br />
<br />
To get more detailed debug log, [[ABS|recompile]] the {{Pkg|syslinux}} package with additional CFLAGS:<br />
<br />
-DDEBUG_STDIO=1 -DCORE_DEBUG=1<br />
<br />
=== Btrfs compression ===<br />
<br />
Booting from btrfs with compression is not supported.[https://wiki.syslinux.org/wiki/index.php/Syslinux_4_Changelog#Changes_in_4.02]<br />
This error will show:<br />
<br />
btrfs: found compressed data, cannot continue!<br />
invalid or corrupt kernel image.<br />
<br />
=== Btrfs multi-device ===<br />
<br />
Booting from multiple-device btrfs is not supported.[http://repo.or.cz/syslinux.git/blob/HEAD:/extlinux/main.c] (As of 21-Jul-2016 line 1246 in validate_device_btrfs() in main.c)<br />
This head-scratching error will show (assuming you're installing on sda1):<br />
<br />
/boot/syslinux is device /dev/sda1<br />
extlinux: path /boot/syslinux doesn't match device /dev/sda1<br />
<br />
== See also ==<br />
<br />
* [https://www.syslinux.org Official website]</div>
VictriD
https://wiki.archlinux.org/index.php?title=User:VictriD&diff=625768
User:VictriD
2020-07-18T08:23:52Z
<p>VictriD: Set a user page.</p>
<hr />
<div>This is VictriD.<br />
<br />
Student majoring in Computer Science. Arch Linux user. Embracing OSS culture.<br />
<br />
Homepage: [https://victrid.dev victrid.dev] GitHub: [https://github.com/victrid victrid] <br />
<br />
Email: d2VpaGF1LmNoaWFuZ0BnbWFpbC5jb20=</div>
VictriD
https://wiki.archlinux.org/index.php?title=ArchWiki:Translation_Team_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=625762
ArchWiki:Translation Team (简体中文)
2020-07-18T08:08:39Z
<p>VictriD: /* 页面维护列表 */ Adding kernel live patching and bash pages translation.</p>
<hr />
<div>[[Category:ArchWiki (简体中文)]]<br />
[[Category:Teams (简体中文)]]<br />
[[ar:ArchWiki:Translation Team]]<br />
[[cs:ArchWiki:Translation Team]]<br />
[[el:ArchWiki:Translation Team]]<br />
[[en:ArchWiki:Translation Team]]<br />
[[es:ArchWiki:Translation Team]]<br />
[[fr:ArchWiki Translation Team]]<br />
[[hr:ArchWiki:Translation Team]]<br />
[[it:ArchWiki:Translation Team]]<br />
[[ja:ArchWiki:翻訳チーム]]<br />
[[ko:ArchWiki:Translation Team]]<br />
[[nl:ArchWiki:Translation Team]]<br />
[[pl:ArchWiki:Translation Team]]<br />
[[pt:ArchWiki:Translation Team]]<br />
[[ru:ArchWiki:Translation Team]]<br />
[[sk:ArchWiki:Translation Team]]<br />
[[uk:ArchWiki:Translation Team]]<br />
[[zh-hant:ArchWiki:Translation Team]]<br />
ArchWiki 上有许多中文页面,这其中大部分是从外文翻译过来的,这些页面是无数中文志愿者劳动的结晶。随着时间推移,有些页面因为没有及时维护,内容严重过时。而目前的翻译工作缺少组织,效率偏低。所以参照西班牙和意大利翻译组的做法,添加这个页面。<br />
<br />
如果你希望对 ArchWiki 做贡献,参与 Wiki 建设,比如翻译英文页面和对已翻译过的中文页面进行维护,只需要编辑下面的[[#页面维护列表]],添加相应的条目,并将自己加为相关页面的维护者。如果你在列表中还没有找到想要翻译的页面,可以自行添加。另外,如果因为时间原因无法再维护页面,请及时将自己从维护者列表中删除。<br />
<br />
== 创建翻译 ==<br />
<br />
{{警告|如果不准备翻译页面的大部分内容,请尽量不要新建简体中文页面。检查英文页面的更新需要花费不少精力,没有翻译的页面会增加维护负担。}}<br />
# 如果还不知道如何编辑 wiki,请阅读[[Help:Editing (简体中文)|编辑帮助]]。<br />
# 阅读 [[Help:i18n (简体中文)|i18n 帮助]],文章给出了 ArchWiki 国际化和本地化的指南。<br />
# [[Special:UserLogin|登录]]以进行编辑。<br />
# 选择要翻译的页面,例如从[[Special:Random|随机页面]]或[[#页面维护列表|页面维护列表]]中选择一个未翻译完成的页面。假设要翻译 [[ArchWiki:Translation Team]]。<br />
# 进入选择的英文页面,点击页面顶部的'''编辑'''。<br />
# 添加要翻译文件的语言间链接, 简体中文的话加入 <nowiki>[[zh-hans:Some Page]]</nowiki>,其它语言参见 [[Help:i18n#Interlanguage links]])。<br />
# 复制所有页面代码。<br />
# 预览页面 (新加了语言链接)<br />
# 访问页面左边新添加的语言链接,应该会进到 [[ArchWiki Translation Team (Language)]](打开新标签页,不要关闭预览的页面)<br />
# 因为页面不存在,点击'''创建'''。<br />
# 将显示一个编辑器 - 粘贴复制的英文页面。<br />
# 将文章分类修改为本地化版本,例如将 {{ic|<nowiki>[[Category:ArchWiki]]</nowiki>}} 修改为 {{ic|<nowiki>[[Category:ArchWiki (简体中文)]]</nowiki>}},参阅 [[Help:Category (简体中文)]].<br />
# 修改语言间链接,指向英文页面(将 {{ic|zh-hans}} 修改为 {{ic|en}},并将英文页面的语言间链接移到文章顶部)。<br />
# 翻译页面,进行保存,还需要使用合适的[[Help:Style (简体中文)#编辑摘要|编辑摘要]],例如 {{ic|translate <nowiki>[[ArchWiki Translation Team]]</nowiki>}}。碰到不好翻译的段落,可以保留英文。尽量不要让原文和不太确认的翻译同时存在,会让页面看上去比较杂乱。<br />
# 在翻译页面的底部,列出了该页面所包含的类别。检查所有这些类别是否存在,即,链接不应为红色。否则,请点击红色链接,然后创建所有缺少的类别 - 类别的创建方式与常规页面相同。<br />
# 返回预览的页面并保存页面。<br />
# (可选)将 [[Template:TranslationStatus (简体中文)]] 添加到已翻译的页面。有关使用方法,请参见 [[Template:TranslationStatus (简体中文)#用法]]。<br />
# (可选)创建另一个页面,例如 [[ArchWiki Translation Team 的翻译的标题]],其标题将是 [[ArchWiki Translation Team (Language)]] 的翻译,输入 {{ic|<nowiki>#redirect [[ArchWiki Translation Team (Language)</nowiki>]]}} 作为其唯一内容并保存。<br />
<br />
== 模版 ==<br />
<br />
下表列出了应翻译的英文[[Help:Template (简体中文)|模版]]及其等效的简体中文模板。<br />
<br />
{| class=wikitable<br />
! 英文模版 || 简体中文模版<br />
|-<br />
! colspan=2| 文章模版<br />
|-<br />
| [[Template:Related articles start]] || [[Template:Related articles start (简体中文)]]<br />
|-<br />
| [[Template:Unsupported]] || [[Template:Unsupported (简体中文)]]<br />
|-<br />
| [[Template:Yes]] || [[Template:是]]<br />
|-<br />
| [[Template:No]] || [[Template:否]]<br />
|-<br />
| [[Template:Tip]] || [[Template:提示]]<br />
|-<br />
| [[Template:Note]] || [[Template:注意]]<br />
|-<br />
| [[Template:Warning]] || [[Template:警告]]<br />
|-<br />
| [[Template:Dead link]] || [[Template:失效链接]]<br />
|-<br />
| [[Template:Broken package link]] || [[Template:Broken package link (简体中文)]]<br />
|-<br />
| [[Template:Broken section link]] || [[Template:Broken section link (简体中文)]]<br />
|-<br />
! colspan=2| 翻译状态模板<br />
|-<br />
| [[Template:Bad translation]] || [[Template:Bad translation (简体中文)]]<br />
|-<br />
| [[Template:Translateme]] || [[Template:Translateme (简体中文)]]<br />
|-<br />
| [[Template:TranslationStatus]] || [[Template:TranslationStatus (简体中文)]]<br />
|-<br />
! colspan=2| 导航模版<br />
|-<br />
| [[Template:HCL/Laptops table header]] || [[Template:HCL/Laptops table header (简体中文)]]<br />
|-<br />
| [[Template:Laptops navigation]] || [[Template:Laptops navigation (简体中文)]]<br />
|-<br />
| [[Template:List of applications navigation]] || [[Template:List of applications navigation (简体中文)]]<br />
|-<br />
| [[Template:Package guidelines]] || [[Template:Package guidelines (简体中文)]]<br />
|-<br />
! colspan=2| 特殊模版<br />
|-<br />
| [[Template:Cat main]] || [[Template:Cat main (简体中文)]]<br />
|-<br />
| [[Template:Template]] || [[Template:Template (简体中文)]]<br />
|-<br />
| [[Template:META Error]] || [[Template:META Error (简体中文)]]<br />
|-<br />
| [[Template:META Unexplained Status Template]] || [[Template:META Unexplained Status Template (简体中文)]]<br />
|-<br />
| [[Template:Comment]] || [[Template:Comment (简体中文)]]<br />
|-<br />
| [[Template:Committed identity]] || [[Template:Committed identity (简体中文)]]<br />
|-<br />
| [[Template:Unsigned]] || [[Template:Unsigned (简体中文)]]<br />
|}<br />
<br />
== 翻译中应省略的模板 ==<br />
<br />
当页面或部分标记有 [[Template:Accuracy]],[[Template:Style]],[[Template:Archive]],[[Template:Remove]] 或 [[Template:Out of date]] 时 — 在解决问题并且删除模板之前,不要翻译有问题的页面/部分。<br />
<br />
如果看到 [[Template:Expansion]],[[Template:Merge]],[[Template:Move]] 或 [[Template:Redirect]],则可以安全地翻译页面,但不要将这些模板复制到翻译的文章中。<br />
<br />
如果看到 [[Template:Broken package link]],[[Template:Broken section link]] 或 [[Template:Dead link]],请不要将这些模板复制到翻译的文章中。要么在原始文本中将其修复,然后复制并在要翻译时翻译修复的链接,要么在翻译时忽略与它们有关的整个句子或部分。<br />
<br />
== 完善翻译 ==<br />
<br />
[https://wiki.archlinux.org/index.php?title=Special:WhatLinksHere/Template:Translateme_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&limit=100 这个特殊页面]包含了需要完善翻译的简体中文页面。完善翻译的基本步骤:<br />
# 选择自己比较熟悉的文章进行翻译<br />
# 先检查英文页面的对应段落,更新成最新的英文后再翻译,避免翻译过时的内容,减少信息遗漏。<br />
# 翻译完成后删除页面中的 <nowiki>{{translateme (简体中文)}}</nowiki> 标记<br />
# (可选)给翻译完成的页面加上[[Template:TranslationStatus (简体中文)|翻译状态]],请参见 [[#创建翻译]]。<br />
<br />
== 更新过期页面 ==<br />
<br />
如果发现有 Wiki 页面过期或错误:<br />
* 小的改动,有时间可以立即进行修改同步,维护者并不控制页面的编辑权限,越多的人参与维护越好。如果改动较大,请先联系维护者,避免重复劳动。<br />
* 没有时间查看更改,请给页面加上 {{ic|<nowiki>{{out of date}}</nowiki>}} 模版,这样其他贡献者更容易发现需要更新的页面,而读者看到过期标记就可以直接查看英文页面,以免被错误内容误导,白白耽误时间。<br />
* 没有时间翻译,请将过期的中文部分删去,从英文页面中复制更改的部分到中文页面的相应部分,去掉{{ic|<nowiki>{{out of date}}</nowiki>}}模板(如果页面上有的话)并加上{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他贡献者就更容易发现需要翻译的页面,而读者也不会被过期的内容误导。<br />
如果发现有页面未翻译:<br />
* 有时间的话,请将页面中的英文部分翻译为中文,并去掉{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板。<br />
* 没有时间翻译,请为页面添加{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他的贡献者就能更容易发现需要翻译的页面。<br />
{{注意|在修改页面上的模板时,请同时更新页面维护列表的翻译状态。}}<br />
<br />
== 维护翻译 ==<br />
<br />
完成页面的翻译只是初步完成任务,及时同步英文页面改动、更新翻译是一个持续性的工作,可能会耗费更多的时间。<br />
<br />
=== 页面认领 ===<br />
<br />
所有人都可以认领页面。认领后的责任包括进行翻译,关注英文页面的改动,及时同步翻译。<br />
<br />
为了更好的跟踪英文页面的修改,请务必在设置中启用监视列表邮件通知,并监视对应的英文页面(从设置中找到监视列表,加入英文页面。或者直接到英文页面点击页面顶端的监视标签。这样只要有改动,就会收到邮件通知)。<br />
<br />
{{小贴士|如果收到邮件通知后没有访问页面或者访问了页面却没有登录用户,下次页面改动时就不会再发邮件通知。可以点击监视列表中的'''标记所有页面为已读'''再次获取更新。}}<br />
<br />
如果页面有维护者但长期得不到更新,将会在维护列表中删除维护者。<br />
<br />
=== 翻译状态模板 ===<br />
<br />
Arch 作为滚动发行版,软件变化比较快,对应的文档变化也比较快。许多翻译的文章由于缺乏更新,会产生命令运行出错或不起作用等问题。而由于这些过期页面没有及时标记出来,所以用户无法及时获得更新。[[Template:TranslationStatus (简体中文)|翻译状态模板]]就是为了解决这个问题而创建。<br />
<br />
此模板可以起到如下作用:<br />
* 为用户提供翻译状况,包括翻译时间、英文页面的最后版本等<br />
* 用户可以点击查看翻译后,英文页面的改动,这样英文不是很好的用户可以只查看很小一部分英文内容,并判断出是否影响操作。<br />
* 翻译人员可以跟踪页面状况,通过[[Special:WhatLinksHere/Template:TranslationStatus_(简体中文)|模板的反向链接]]可以查找到所有标记页面,查看需要更新翻译的部分。<br />
<br />
[[Template:TranslationStatus (简体中文)|模板页面]]有详细的使用方法。<br />
<br />
=== 页面维护列表 ===<br />
<br />
{{注意|请按照拉丁字母顺序添加页面。}}<br />
<br />
翻译状态说明:<br />
;过期:页面内容未与英文页面同步,对应 {{ic|<nowiki>{{out of date}}</nowiki>}} 模版<br />
;未翻译:页面中含有英文内容,对应 {{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}} 模板<br />
;完成:页面已与英文页面同步<br />
<br />
{| class="wikitable sortable collapsible" border="1"<br />
|-<br />
! 页面<br />
! 翻译状态<br />
! 维护者<br />
! class="unsortable" width="30%" | 备注<br />
|-<br />
| [[Amateur radio (简体中文)]]<br />
| 翻译中<br />
| liu-shuyuan<br />
| <br />
|-<br />
| [[Arch-based distributions (简体中文)]]<br />
| 完成<br />
| Joshua<br />
| 勘误中<br />
|-<br />
| [[Arch boot process (简体中文)]]<br />
| 翻译中<br />
| Bangbo Zheng<br />
| <br />
|-<br />
| [[Arch Security Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Arch Testing Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ArchWiki:Maintenance Team (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ArchWiki:News (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[ASCII art (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[AUR helpers (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 部分用词可能需要修改<br />
|-<br />
| [[Bash (简体中文)]]<br />
| 完成<br />
| VictriD<br />
| 无<br />
|-<br />
| [[Common Desktop Environment (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Conky (简体中文)]]<br />
| 完成<br />
| upi<br />
| 无<br />
|-<br />
| [[Core utilities (简体中文)]]<br />
| 完成<br />
| rentaro, Arisaka<br />
| 无<br />
|-<br />
| [[Dark mode switching (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Discord (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Django (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Dynamic Kernel Module Support (简体中文)]]<br />
| 完成<br />
| Mithrandir<br />
| 完善中<br />
|-<br />
| [[Emacs (简体中文)]]<br />
| 翻译中<br />
| Jaurung yuanhang<br />
| 未完成<br />
|-<br />
| [[Equinox Desktop Environment (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[FHEM (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Fish (简体中文)]]<br />
| 完成<br />
| liu-shuyuan<br />
| <br />
|-<br />
| [[Flatpak (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Fwupd (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Gcin (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[GIMP (简体中文)]]<br />
| 完成<br />
| [[User:驿窗|驿窗]]<br />
| 长期维护中<br />
|-<br />
| [[GNOME (简体中文)]]<br />
| 完成<br />
| skywet<br />
| <br />
|-<br />
| [[Google Authenticator (简体中文)]]<br />
| 完成<br />
| VictriD<br />
| 无<br />
|-<br />
| [[GRUB (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[GRUB/Tips and tricks (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[Inkscape (简体中文)]]<br />
| 完成<br />
| [[User:驿窗|驿窗]]<br />
| 长期维护中<br />
|-<br />
| [[International communities (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Java (简体中文)]]<br />
| 翻译中<br />
| CaCaCarrot<br />
| 无<br />
|-<br />
| [[Kernel live patching (简体中文)]]<br />
| 完成<br />
| VictriD<br />
| 无<br />
|-<br />
| [[Libvirt (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 需要格式改进<br />
|-<br />
| [[Liri (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[List of applications (简体中文)]]<br />
| 部分翻译<br />
| DavidChen<br />
| 翻译中<br />
|-<br />
| [[Lua (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Lumina (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Minecraft (简体中文)]]<br />
| 完成<br />
| Xavier Lau<br />
| 页面已经与英文版同步,长期维护中<br />
|-<br />
| [[Moksha (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[MySQL (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Notion (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[OpenSSH (简体中文)]]<br />
| 完成<br />
| Arisaka<br />
| 无<br />
|-<br />
| [[pkgstats (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|- <br />
| [[ranger (简体中文)]]<br />
| 完成<br />
| Jason Zhang<br />
| 完善中<br />
|-<br />
| [[Roles (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Rxvt-unicode (简体中文)]]<br />
| 完成<br />
| KyanCh<br />
| 无<br />
|-<br />
| [[Scheme (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[SDDM (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Steam (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[TLP (简体中文)]]<br />
| 完成<br />
| Skywet<br />
| 持续更新中<br />
|-<br />
| [[Trac (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Trusted Users (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Twm (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Unofficial mirrors (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Unofficial user repositories (简体中文)]]<br />
| 翻译中<br />
| TransistorLogic<br />
| 无<br />
|-<br />
| [[UP Squared (简体中文)]]<br />
| 完成<br />
| [[User:Blackteahamburger|Blackteahamburger]]<br />
| 长期维护中<br />
|-<br />
| [[Vivaldi (简体中文)]]<br />
| 完成<br />
| [[User:Aaron Chen|Aaron Chen]]<br />
| 长期维护<br />
|- <br />
| [[X2Go (简体中文)]]<br />
| 过期<br />
| [[User:Aaron Chen|Aaron Chen]]<br />
|</div>
VictriD
https://wiki.archlinux.org/index.php?title=Bash_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=625757
Bash (简体中文)
2020-07-18T07:49:53Z
<p>VictriD: Renew contents translation to sync with original English version.</p>
<hr />
<div>[[Category:Command shells (简体中文)]]<br />
[[Category:GNU (简体中文)]]<br />
[[en:Bash]]<br />
[[de:Bash]]<br />
[[es:Bash]]<br />
[[it:Bash]]<br />
[[ja:Bash]]<br />
[[ru:Bash]]<br />
{{Related articles start}}<br />
{{Related|Bash (简体中文)/Functions (简体中文)}}<br />
{{Related|Bash (简体中文)/Prompt customization (简体中文)}}<br />
{{Related|Environment variables (简体中文)}}<br />
{{Related|Readline (简体中文)}}<br />
{{Related|Fortune}}<br />
{{Related|Pkgfile (简体中文)}}<br />
{{Related|Command-line shell}}<br />
{{Related articles end}}<br />
<br />
{{TranslationStatus (简体中文)|Bash|2020-07-18|593594}}<br />
<br />
[https://www.gnu.org/software/bash/ Bash] (Bourne-again Shell) 是一个来自 [[GNU (简体中文)|GNU]]的[[Command-line shell|命令行解释器]]/编程语言。它的名字是向它的前身——很早以前的 Bourne shell 致敬。Bash可以运行在大部分类 UNIX 操作系统中,包括 GNU/Linux。<br />
<br />
Bash是Arch Linux的默认命令行解释器。<br />
<br />
==调用==<br />
Bash 的运行方式会取决于 Bash 被调用的方式。下面是一些不同模式的描述。<br />
<br />
如果 Bash 以TTY中的{{ic|login}}、[[SSH (简体中文)|SSH]] 守护进程、或者其它类似的方式派生出来,我们称之为登录 (login) shell。你可以使用命令行选项 {{ic|-l}} 或 {{ic|--login}} 来使用这种模式。<br />
<br />
如果 Bash 的标准输入和标准错误输出都连接到终端(比如说,一个终端模拟器),并且在启动的时候既没有使用 {{Ic|-c}} 选项和[http://unix.stackexchange.com/a/96805 非选项参数](比如说,{{ic|bash '''script'''}}),我们称之为交互 (interactive) shell。所有的交互式 shell 都会执行{{ic|/etc/bash.bashrc}} 和 {{ic|~/.bashrc}} 文件中的配置,而登录shell还会执行{{ic|/etc/profile}} 和 {{ic|~/.bash_profile}} 中的配置。<br />
<br />
{{注意|在 Arch Linux 中 {{ic|/bin/sh}} (过去是 Bourne shell 的执行文件名) 是 {{ic|/bin/bash}} 的符号链接。如果 Bash 通过 {{ic|sh}} 方式调用,它会尽量模拟历史上 {{ic|sh}} 的启动行为,包括 POSIX 兼容能力。}}<br />
<br />
通过在Bash启动时使用 {{Ic|--posix}} 命令行参数或者在启动后执行 ‘{{Ic|set -o posix}}’ 来使Bash在增强的POSIX标准下运行。<br />
<br />
===配置文件===<br />
<br />
关于更详尽的描述,您可以参考{{ic|/usr/share/doc/bash/bashref.html}} ([https://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files 在线链接]) 文件的第 6.2 节 "Bash Startup Files" 和[[GregsWiki:DotFiles]]。<br />
<br />
{| class="wikitable"<br />
! 文件<br />
! 描述<br />
! 登录 shell <br />
<sup>(见下)</sup><br />
! 交互 shell<br />
<sup>非登录</sup><br />
|-<br />
| {{ic|/etc/profile}}<br />
| [[Help:Reading (简体中文)#Source|加载]]全部储存在 {{ic|/etc/profile.d/*.sh}} 和 {{ic|/etc/bash.bashrc}} 中的配置。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|~/.bash_profile}}<br />
| 针对每个用户,紧接 {{ic|/etc/profile}} 执行。如果这个文件不存在,会顺序检查 {{ic|~/.bash_login}} 和 {{ic|~/.profile}} 文件。框架文件 {{ic|/etc/skel/.bash_profile}} 同时会引用 {{ic|~/.bashrc}}。<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|~/.bash_logout}}<br />
| 退出登录 shell 后<br />
| {{是}}<br />
| {{否}}<br />
|-<br />
| {{ic|/etc/bash.bashrc}}<br />
| 取决于编译标志 {{ic|1=-DSYS_BASHRC="/etc/bash.bashrc"}}。加载 {{ic|/usr/share/bash-completion/bash_completion}} 配置。<br />
| {{否}}<br />
| {{是}}<br />
|-<br />
| {{ic|~/.bashrc}}<br />
| 针对每个用户,在 {{ic|/etc/bash.bashrc}} 后加载。<br />
| {{否}}<br />
| {{是}}<br />
|}<br />
<br />
{{注意|<br />
* 如果以 {{ic|--login}} 调用,登录 shell 可能不是交互式的。<br />
* 如果可以交互,''非登录'' shell '''不会''' 加载 {{ic|~/.bash_profile}}。它会继承调用他们的父进程(可能是一个登录 shell)的环境参数。更多信息,请参考[[GregsWiki:ProcessManagement#On processes, environments and inheritance]]。<br />
}}<br />
<br />
=== Shell 与环境变量 ===<br />
<br />
Bash的行为和通过它启动的程序会被许多环境变量影响。[[Environment variables (简体中文)|环境变量]]用于储存有用的值,比如命令搜索路径,或者默认浏览器。当一个新的 shell 或者脚本被启动时,这个 shell 会继承它的父进程的环境变量,从而这个 shell 会带有内部 shell 变量[http://www.kingcomputerservices.com/unix_101/understanding_unix_shells_and_environment_variables.htm ]。<br />
<br />
这些内部 shell 变量可以以此导出以变成环境变量:<br />
<br />
VARIABLE=content<br />
export VARIABLE<br />
<br />
或者<br />
<br />
export VARIABLE=content<br />
<br />
环境变量依照惯例放置在{{ic|~/.profile}}或者{{ic|/etc/profile}}中,这样其他兼容 Bourne shell 的 shell 也可以使用。<br />
<br />
关于更详尽的内容,您可以参考[[Environment variables (简体中文)]]。<br />
<br />
==命令行==<br />
<br />
Bash 的命令行由一个叫做 [[Readline (简体中文)|Readline]] 的分离库来管理。Readline 提供了[[emacs (简体中文)|emacs]] 和 [[vi (简体中文)|vi]] 风格的快捷键用于操作命令行,比如说,以单词为基准前后移动、删除等。管理输入[[Readline (简体中文)#历史|历史]]也是 Readline 的职责。它还允许你创造[[Readline (简体中文)#Macros|宏]]。<br />
<br />
=== Tab 键补全 ===<br />
<br />
[[Wikipedia:Command-line_completion|Tab 键补全]],提供在按下 {{ic|tab}} 键后自动补全命令的功能(这个功能默认启用)。<br />
<br />
==== Tab 按下的次数 ====<br />
<br />
可能最多需要按三次 tab 才能显示所有的补全选项。如果希望减少这个数值,请参考 [[Readline#Faster completion|更快的补全操作]]。<br />
<br />
==== 常用命令的选项补全 ====<br />
<br />
通常来讲,Bash 中按下 tab 只会补全命令、文件名和变量。安装 {{Pkg|bash-completion}} 包,并加载 {{ic|/usr/share/bash-completion/bash_completion}} 文件中的配置,可以提供更多针对常见命令的选项的 tab 补全。安装这个包后,常规的补全(比如说 {{ic|$ ls file.*<tab><tab>}})可能会表现得不同。但是,您可以通过{ic|$ compopt -o bashdefault ''program''}}命令来重新启用。(更多细节,请参考 [https://bbs.archlinux.org/viewtopic.php?id=128471] and [https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html]。)<br />
<br />
==== 自定义命令补全 ====<br />
<br />
{{注意|使用 {{ic|complete}} 功能可能与 {{Pkg|bash-completion}} 冲突。}}<br />
<br />
通常来讲,Bash 中按下 tab 只会补全命令后的文件名。通过{{ic|complete -c}}命令,Bash 可以规定某些命令后的补全形式为命令,比如:<br />
{{hc|~/.bashrc|<br />
complete -c man which<br />
}}<br />
或通过{{ic|-cf}}命令,规定补全形式为命令和文件,比如:<br />
{{bc|complete -cf sudo}}<br />
更多补全形式,请参考Bash的手册页。<br />
<br />
=== 历史 ===<br />
<br />
==== 历史补全 ====<br />
<br />
您可以绑定上下键来在 Bash 的历史中查找(请参考 [[Readline (简体中文)#历史]] and [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline 启动文件语法]):<br />
<br />
{{hc|~/.bashrc|<br />
bind '"\e[A": history-search-backward'<br />
bind '"\e[B": history-search-forward'<br />
}}<br />
<br />
或者所有 Readline 程序:<br />
<br />
{{hc|~/.inputrc|<br />
"\e[A": history-search-backward<br />
"\e[B": history-search-forward<br />
}}<br />
<br />
==== 更近的历史记录 ====<br />
<br />
{{ic|HISTCONTROL}}变量可以避免历史记录记录特定的命令,比如不记录重复的命令<br />
{{hc|~/.bashrc|2=export HISTCONTROL=ignoredups}}<br />
将其设置为 {{ic|erasedups}} 可以让 Bash 的历史记录对一条命令只保留一个历史记录(与顺序无关)。更多选项,请参考Bash的手册页。<br />
<br />
==== 禁用历史记录 ====<br />
<br />
临时禁用历史记录:<br />
<br />
set +o history<br />
<br />
现在输入的命令将不会存入{{ic|$HISTFILE}}。<br />
<br />
比如说,你现在可以执行 {{ic|<nowiki>printf secret | sha256sum</nowiki>}} 来生成密码文件的散列值,或是隐藏您使用GPG的历史,如执行{{ic|gpg -eaF secret-pubkey.asc}}命令。这些秘密不会被写入磁盘。<br />
<br />
开启历史记录:<br />
<br />
set -o history<br />
<br />
{{提示|如果 {{ic|HISTCONTROL}} 变量包含了 {{ic|ignorespace}},以空格开头的命令将不会记入历史。这样可以更加方便地控制历史记录。更多细节,请参考{{man|1|bash|Shell Variables}}。}}<br />
<br />
禁用所有的 Bash 历史:<br />
<br />
{{hc|~/.bashrc or /etc/profile|<br />
<nowiki>export HISTSIZE=0</nowiki><br />
}}<br />
<br />
为了保险(这会永远清除所有的历史记录):<br />
<br />
# warning. this will destroy your old histfile forever<br />
wipe -i -l2 -x4 -p4 "$HISTFILE"<br />
ln -sv /dev/null "$HISTFILE"<br />
<br />
=== 模仿 Zsh 的帮助功能 ===<br />
<br />
[[Zsh (简体中文)|Zsh]] 可以在光标指向命令的时候按 {{ic|Alt+h}} 来调用这个命令的手册。<br />
相同的行为可以通过这个 [[Readline (简体中文)]] 绑定在 Bash 中开启:<br />
<br />
{{hc|~/.bashrc|<nowiki><br />
run-help() { help "$READLINE_LINE" 2>/dev/null || man "$READLINE_LINE"; }<br />
bind -m vi-insert -x '"\eh": run-help'<br />
bind -m emacs -x '"\eh": run-help'<br />
</nowiki>}}<br />
<br />
这个操作假设你使用(默认的)Emacs [[Readline#Editing mode|编辑模式]]。<br />
<br />
==别名==<br />
<br />
[[Wikipedia:alias|别名]](alias)是可以让您用另一个字符串来替换一个字符串的命令。这个命令常常被用来缩短系统命令,或者用来将默认参数加入到常用命令中。<br />
<br />
推荐将针对用户的别名保存在{{ic|~/.bashrc}}, 而将系统级的别名(这些会影响所有用户)存放在{{ic|/etc/bash.bashrc}}。别名的示例,请参考 [https://gist.github.com/anonymous/a9055e30f97bd19645c2]。<br />
<br />
关于函数,请参考 [[Bash (简体中文)/Functions (简体中文)|函数]]。<br />
<br />
== 提示与技巧 ==<br />
<br />
=== 自定义提示符 ===<br />
<br />
参见 [[Bash (简体中文)/Prompt customization (简体中文)|自定义提示符]]。<br />
<br />
=== 找不到命令 ===<br />
<br />
[[pkgfile (简体中文)|pkgfile]] 提供了一个"找不到命令"的钩子,可以在输入未知命令后自动查找官方的软件包。<br />
<br />
你需要[[Help:Reading (简体中文)#Source|加载]]这个钩子来启用它,如下:<br />
<br />
{{hc|~/.bashrc|<br />
source /usr/share/doc/pkgfile/command-not-found.bash}}<br />
<br />
现在,运行一个不可用的命令将会显示如下信息:<br />
<br />
{{hc|$ abiword|<br />
abiword may be found in the following packages:<br />
extra/abiword 3.0.1-2 /usr/bin/abiword<br />
}}<br />
<br />
{{注意|需要先更新 pkgfile 的数据库才能运作。更多细节,请参考[[pkgfile (简体中文)#安装]]。}}<br />
<br />
另一个"找不到命令"的钩子由 {{AUR|command-not-found}} 包提供,它看起来像这个样子:<br />
<br />
{{hc|$ abiword|<br />
The command 'abiword' is provided by the following packages:<br />
'''abiword''' (2.8.6-7) from extra<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from staging<br />
[ abiword ]<br />
'''abiword''' (2.8.6-7) from testing<br />
[ abiword ]<br />
}}<br />
<br />
=== 在终端内禁用Ctrl+Z ===<br />
<br />
你可以相这样包装你的命令,来关闭 {{ic|Ctrl+Z}} 功能(暂停/关闭程序)。通过在这个脚本中包装命令<br />
<br />
#!/bin/bash<br />
trap "" 20<br />
''adom''<br />
<br />
这时如果你在玩 {{AUR|adom}} 要按 {{ic|Shift+Z}} 组合键时不小心按下了 {{ic|Ctrl+Z}} 组合键,你的游戏就不会停止运行了,因为我们已经禁用了{{ic|Ctrl+Z}}。<br />
<br />
=== 登出后清空屏幕 ===<br />
<br />
当登出虚拟终端时,清空屏幕:<br />
{{hc|~/.bash_logout|<br />
clear<br />
reset<br />
}}<br />
<br />
=== 输入路径自动添加"cd" ===<br />
<br />
Bash 可以自动在输入的一个路径前添加 {{ic|cd }}。比如说:<br />
{{hc|$ /etc|<br />
bash: /etc: Is a directory<br />
}}<br />
<br />
但是如果在 {{ic|.bashrc}} 文件里添加一行:<br />
{{hc|~/.bashrc|<br />
...<br />
shopt -s autocd<br />
...<br />
}}<br />
<br />
你会得到:<br />
[user@host ~]$ /etc<br />
cd /etc<br />
[user@host etc]$<br />
<br />
=== 自动跳转 ===<br />
<br />
{{AUR|autojump-git}} 允许在用户访问最多的路径中搜索文件系统。<br />
<br />
安装完后,[[Help:Reading (简体中文)#Source|加载]] {{ic|/etc/profile.d/autojump.bash}} 来启动这项功能。<br />
<br />
=== 防止覆盖文件 ===<br />
<br />
在当前的会话中,防止 shell 输出重定向覆盖一个已有的文件:<br />
<br />
$ set -o noclobber<br />
<br />
这和{{ic|set -C}}命令是一样的。<br />
<br />
如果想让该用户一直生效:<br />
<br />
{{hc|~/.bashrc|output=...<br />
set -o noclobber}}<br />
<br />
在设定 {{ic|noclobber}} 的情况下强制覆盖文件:<br />
<br />
$ echo "output" >| file.txt<br />
<br />
== 错误排除 ==<br />
<br />
===修正窗口大小调整时的换行===<br />
<br />
如果您调整了[[List of applications (简体中文)/Utilities (简体中文)#终端模拟器|终端模拟器]]的大小,Bash 可能并没有得到大小重调的信号,你键入的文本就不会正确的换行,并且与已输入内容重叠。启用 {{ic|checkwinsize}} 选项可以在每一个命令后检查窗口的大小,并按需更新 {{ic|LINES}} 和 {{ic|COLUMNS}} 的值来调整。<br />
<br />
{{hc|~/.bashrc|<br />
shopt -s checkwinsize<br />
}}<br />
<br />
=== 设置 ignoreeof 后 shell 仍然退出 ===<br />
<br />
如果您设置了 {{ic|ignoreeof}} 选项,但是如果重复按下 {{ic|ctrl-D}} shell 仍然会退出。因为这个选项只允许忽略 10 次连续的EOF记号(即 {{ic|Ctrl+D}})。<br />
<br />
如果需要将这个次数调的更高,需要使用 IGNOREEOF 变量。<br />
<br />
比如:<br />
export IGNOREEOF=100<br />
<br />
== 更多信息 (英语) ==<br />
<br />
* [[Wikipedia:Bash (Unix shell)]]<br />
* [https://www.gnu.org/software/bash/manual/bashref.html Bash 参考手册],或是 {{ic|/usr/share/doc/bash/bashref.html}}<br />
* [https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html Readline 启动文件语法]<br />
* [http://www.aosabook.org/en/bash.html The Bourne-Again Shell] - ''开源软件架构'' 第三章<br />
* [http://shellcheck.net Shellcheck] - Bash 脚本常见错误检查指南 (基于 [https://github.com/koalaman/shellcheck shellcheck])<br />
* [http://bashrcgenerator.com/ PS1 生成器] - 生成你的 .bashrc/PS1 脚本,这样就可以在命令行中使用鼠标拖拽了。<br />
* [https://serverfault.com/questions/3743/what-useful-things-can-one-add-to-ones-bashrc 有用的 .bashrc 命令] <br />
<br />
=== 教程 ===<br />
<br />
* [[GregsWiki:|Greg's Wiki]]<br />
* [[GregsWiki:BashGuide]]<br />
* [[GregsWiki:BashFAQ]]<br />
* [http://wiki.bash-hackers.org/doku.php Bash Hackers Wiki]<br />
* [http://wiki.bash-hackers.org/scripting/tutoriallist Bash Hackers Wiki: List of Bash online tutorials]<br />
* [http://www.grymoire.com/Unix/Quote.html Quote Tutorial]<br />
<br />
=== 社区 ===<br />
<br />
* [ircs://chat.freenode.net#bash 一个 Bash 的活跃友好的IRC频道]<br />
<br />
=== 例子 ===<br />
<br />
* [http://tldp.org/HOWTO/Xterm-Title-4.html 怎样修改 xterm 的标题]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Kernel_live_patching_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=625607
Kernel live patching (简体中文)
2020-07-17T02:59:22Z
<p>VictriD: Add Chinese translation for the original English page.</p>
<hr />
<div>[[Category:Kernel (简体中文)]]<br />
[[en:Kernel live patching]]<br />
[[ja:カーネルライブパッチ]]<br />
[[pt:Kernel live patching]]<br />
{{Related articles start}}<br />
{{Related|Kernel module (简体中文)}}<br />
{{Related|Kernel (简体中文)#编译}}<br />
{{Related|Kexec}}<br />
{{Related articles end}}<br />
{{TranslationStatus (简体中文)|Kernel live patching|2020-07-17|625606}}<br />
<br />
内核热补丁 (Kernel Live Patching, KLP) 允许在不重启整个操作系统的前提下进行内科的快速修复。从 4.0 版本开始,这个功能被加入内核 [https://lwn.net/Articles/619390/][https://lwn.net/Articles/622936/][https://lwn.net/Articles/634649/],用户可以配置他们的的内核来启用这项功能。通常来讲,内核热补丁通过以下的步骤实现:<br />
# 获取正在运行的源代码树<br />
# 准备针对内核的补丁<br />
# 使用一些工具(随后)来修正并应用补丁<br />
<br />
在内核热补丁被官方支持前,一些项目提供了热补丁工具。如甲骨文的ksplice,SuSE的[[#kGraft]],和红帽的[[#kpatch]]。他们用不同的方法实现了内核热补丁。而内核加入的最基础的功能是从kGraft和kpatch派生出来的。<br />
<br />
== kpatch ==<br />
<br />
=== 安装 ===<br />
<br />
从 {{AUR|kpatch}} [[安装]] 一个适当的内核,和 {{AUR|kpatch-git}} 对应的用户界面工具。<br />
<br />
你也可以通过启用{{ic|CONFIG_LIVEPATCH}}, {{ic|CONFIG_DEBUG_INFO}}, 和 {{ic|CONFIG_KALLSYMS}},来手动编译支持kpatch的内核。<br />
<br />
{{Note|安装特定的内核后需要更新 [[Arch boot process (简体中文)#启动加载器 | 启动加载器]]。}}<br />
<br />
=== 使用方法 ===<br />
<br />
两个包都安装好、并重启后,你可以执行<br />
<br />
$ export ROOTDIR=some/dir/aur/linux-kpatch/src/linux-x-y<br />
$ cd $ROOTDIR<br />
<br />
假设你已经完成了一些修改,并在工作目录下生成了一个''some.patch''补丁 (是执行{{ic|makepkg -o}}后针对您自己的源代码树的补丁,而不是针对''x.y''版本的原始内核补丁)。启动kpatch实用工具:<br />
<br />
$ kpatch-build -s $(pwd) -v $(pwd)/vmlinux ''some.patch''<br />
<br />
这个命令涉及原始的和修改后的内核的编译,因此可能会多花一些时间。编译结束后,同目录下会出现一个''kpatch-some.ko''模块。现在,<br />
<br />
# insmod ''kpatch-some.ko''<br />
<br />
就可以为内核打上补丁了。<br />
<br />
更多信息,请查阅手册页或[https://github.com/dynup/kpatch GitHub存储库]。<br />
<br />
== kGraft ==<br />
<br />
KGraft没有在Arch linux环境下经过测试。<br />
<br />
== 参考 ==<br />
<br />
* [https://www.kernel.org/doc/html/latest/livepatch/livepatch.html 热补丁的内核文档]<br />
* [[wikipedia:Kpatch]]<br />
* [[wikipedia:KGraft]]<br />
* [[wikipedia:Ksplice]]</div>
VictriD
https://wiki.archlinux.org/index.php?title=Kernel_live_patching&diff=625606
Kernel live patching
2020-07-17T02:57:56Z
<p>VictriD: Add Chinese translation.</p>
<hr />
<div>[[Category:Kernel]]<br />
[[ja:カーネルライブパッチ]]<br />
[[pt:Kernel live patching]]<br />
[[zh-hans:Kernel live patching]]<br />
{{Related articles start}}<br />
{{Related|Kernel modules}}<br />
{{Related|Kernels/Compilation}}<br />
{{Related|Kexec}}<br />
{{Related articles end}}<br />
<br />
Kernel Live Patching (KLP) allows quick fixes to the kernel space without rebooting the whole system. Since version 4.0, related patches have been accepted [https://lwn.net/Articles/619390/][https://lwn.net/Articles/622936/][https://lwn.net/Articles/634649/], so one can configure their kernel to enable this feature. Generally, KLP is achieved by the following steps:<br />
# Obtain the source tree of the running kernel<br />
# Prepare the patch against the kernel<br />
# Apply some tools (as follows) to help transform and load the patch<br />
<br />
Some projects provide the live patching utilities before KLP was officially supported, such as Oracle's ksplice, SuSE's [[#kGraft]], and RedHat's [[#kpatch]]. They implemented the KLP functionality in different ways. The minimalistic functional set of patches entered mainstream kernel were derived from kpatch and kGraft.<br />
<br />
== kpatch ==<br />
<br />
=== Installation ===<br />
<br />
[[Install]] {{AUR|kpatch}} for an appropriate kernel and {{AUR|kpatch-git}} for userspace tools.<br />
<br />
You can also manually build a kernel that supports kpatch usage, by enabling {{ic|CONFIG_LIVEPATCH}}, {{ic|CONFIG_DEBUG_INFO}}, and {{ic|CONFIG_KALLSYMS}}.<br />
<br />
{{Note|Remember to update the [[bootloader]] after you install the special kernel.}}<br />
<br />
=== Usage ===<br />
<br />
Once both packages are successfully built and after reboot, you may<br />
<br />
$ export ROOTDIR=some/dir/aur/linux-kpatch/src/linux-x-y<br />
$ cd $ROOTDIR<br />
<br />
Assume that you have done some modifications and have a patch ''some.patch'' (against the source tree after a {{ic|makepkg -o}}, not the vanilla kernel of version ''x.y'') in the working directory. Launch the kpatch utility,<br />
<br />
$ kpatch-build -s $(pwd) -v $(pwd)/vmlinux ''some.patch''<br />
<br />
This command involves two kernel builds, the original one and the patched one, so it may take a period of time to complete. After the build is over, there should be a ''kpatch-some.ko'' module in the same directory. And then,<br />
<br />
# insmod ''kpatch-some.ko''<br />
<br />
should do the trick.<br />
<br />
For further information, please check the manpages or [https://github.com/dynup/kpatch the GitHub repository].<br />
<br />
== kGraft ==<br />
<br />
{{Expansion|No useful information.}}<br />
<br />
KGraft hasn't been tested in Arch environment.<br />
<br />
== See also ==<br />
<br />
* [https://www.kernel.org/doc/html/latest/livepatch/livepatch.html The kernel document of livepatch]<br />
* [[wikipedia:Kpatch]]<br />
* [[wikipedia:KGraft]]<br />
* [[wikipedia:Ksplice]]</div>
VictriD
https://wiki.archlinux.org/index.php?title=VLC_media_player&diff=599909
VLC media player
2020-03-03T04:46:21Z
<p>VictriD: /* Segmentation fault */ Added another situation of SIGSEGV, caused by dual graphic cards mis-configuation.</p>
<hr />
<div>[[Category:Video]]<br />
[[Category:Audio]]<br />
[[Category:Streaming]]<br />
[[de:VLC]]<br />
[[es:VLC media player]]<br />
[[fa:پخشکننده صوتیتصویری VLC]]<br />
[[ja:VLC media player]]<br />
From the project [https://www.videolan.org/vlc/ home page]:<br />
:VLC is a free and open source cross-platform multimedia player and framework that plays most multimedia files as well as DVD, Audio CD, VCD, and various streaming protocols.<br />
<br />
== Installation ==<br />
<br />
[[Install]] the {{Pkg|vlc}} package.<br />
<br />
Notable variants are:<br />
<br />
* {{AUR|vlc-git}} - Development branch.<br />
* {{AUR|vlc-nox}} - Without X support.<br />
<br />
== Language ==<br />
<br />
VLC does not offer an option to change language in its ''Preferences'' menu. But you can use the ''LANGUAGE='' prefix. For instance, modify the {{ic|/usr/share/applications/vlc.desktop}} line:<br />
<br />
Exec=/usr/bin/vlc %U<br />
to:<br />
<br />
Exec=LANGUAGE=fr /usr/bin/vlc %U<br />
<br />
to switch VLC interface to French. <br />
<br />
== Skins ==<br />
<br />
VLC can be "skinned" for a different look and feel. You can get skins at the [https://www.videolan.org/vlc/skins.php skins website].<br />
<br />
To install a skin download it and move it to {{ic|~/.local/share/vlc/skins2/}}.<br />
<br />
Open up VLC, click ''Tools > Preferences''. When the preferences window opens up you should be in the "Interface" tab<br />
<br />
Choose the "Use custom skin" radio button, and select the downloaded skin.<br />
<br />
Restart VLC for the change to take effect.<br />
<br />
== Web interface ==<br />
<br />
Run VLC with the parameter {{ic|--extraintf&#61;http}} to use both the desktop and web interface. The {{ic|--http-host}} parameter specifies the address to, which is {{ic|localhost}} by default. To set a password, use {{ic|--http-password}}, otherwise VLC will not allow you to log in.<br />
<br />
# vlc --extraintf=http --http-host 0.0.0.0 --http-port 8080 --http-password 'yourpasswordhere'<br />
<br />
Or you can enable this feature in the UI by navigating to ''View > Add Interface > Web Interface''.<br />
<br />
VLC defaults to port 8080: http://127.0.0.1:8080<br />
<br />
Edit {{ic|/usr/share/vlc/lua/http/.hosts}} to allow remote connections. You will need to restart VLC in order for changes to take effect.<br />
<br />
== Tips and tricks ==<br />
<br />
=== Twitch.tv streaming over VLC ===<br />
<br />
See [[Streamlink#Twitch]].<br />
<br />
=== Playing streamed content from a local DLNA server ===<br />
<br />
If you find that trying to play uPNP/DLNA content (by going to ''View > Playlist > Local Network > Universal Plug'n'Play''), that vlc fails to see the DLNA server on the local network, then make sure that the firewall is not blocking port 1900 UDP. It is essential that this port is open in order to play local uPNP/DLNA content.<br />
<br />
=== Control using hotkeys or cli ===<br />
<br />
Install {{Pkg|openbsd-netcat}}.<br />
<br />
Get script at: http://crunchbang.org/forums/viewtopic.php?pid=112035%23p112035#p112035<br />
<br />
Follow instructions in script to setup a socket for VLC.<br />
<br />
Either run the script from the command line or register the script with keyboard shortcuts through your desktop.<br />
<br />
Alternatively, you can use dbus-send [https://theelitist.github.io/control-vlc-media-player-through-d-bus as discussed here]{{Dead link|2020|02|26}} to interact with VLC:<br />
<br />
$ dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause<br />
<br />
It is also possible to start vlc with an ncurses dialog<br />
<br />
$ vlc -I ncurses<br />
<br />
see the [https://wiki.videolan.org/Documentation:Modules/ncurses/ documentaion] for more information<br />
<br />
=== Preventing multiple instances ===<br />
<br />
The default settings for VLC is to open a new instance of the program for each file that is opened. This can be annoying if you are using VLC for something like playing your music collection. You can disable this in ''Tools > Preferences > Interface > Instances > Allow only one instance''. Optionally, tick ''Enqueue files when in one instance mode'' which keeps current file playing and adds any newly opened files to the current playlist.<br />
<br />
=== Hardware video acceleration ===<br />
<br />
See [[Hardware video acceleration]].<br />
<br />
VLC automatically tries to use an available API, but you can override it by going to ''Tools > Preferences > Input & Codecs'' and choosing the suitable option under ''Hardware-accelerated decoding'', e.g. {{ic|Video Acceleration (VA) API}} for VA-API or {{ic|Video Decode and Presentation API for Unix (VDPAU)}} for VDPAU.<br />
<br />
=== systemd service ===<br />
<br />
VLC's web interface can be started from systemd. First, you need to create a default user:<br />
<br />
# useradd -c "VLC daemon" -d / -G audio -M -p \! -r -s /usr/bin/nologin -U vlcd<br />
<br />
Now create the systemd service file:<br />
<br />
{{hc|/etc/systemd/system/vlc.service|<nowiki><br />
[Unit]<br />
Description=VideoOnLAN Service<br />
After=network.target<br />
<br />
[Service]<br />
Type=forking<br />
User=vlcd<br />
ExecStart=/usr/bin/vlc --daemon --syslog -I http --http-port 8090 --http-password</nowiki> ''password''<nowiki> <br />
Restart=on-abort<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
</nowiki>}}<br />
<br />
[[Start]] and [[enable]] {{ic|vlc.service}}. Log in to http://''yourmachine'':8090/ with no username and with the password you put in the service file.<br />
<br />
=== Chromecast support ===<br />
<br />
Starting with 3.0 release (''Vetinari'' branch), VLC can stream to chromecast devices on the same wireless network. <br />
<br />
Install packages:<br />
<br />
* {{Pkg|libmicrodns}} - VLC can find the chromecast device and it shows up in ''Playback > Renderer'' menu<br />
* {{Pkg|protobuf}} - enables streaming to the selected device in ''Playback > Renderer'' menu<br />
<br />
Then, edit the file {{ic|/etc/nsswitch.conf}} and change the {{ic|hosts}} line to include {{ic|1=mdns_minimal [NOTFOUND=return]}} before {{ic|resolve}} and {{ic|dns}}:<br />
<br />
hosts: ... '''mdns_minimal [NOTFOUND=return]''' resolve [!UNAVAIL=return] dns ...<br />
<br />
{{Note|If you experience slowdowns in resolving {{ic|.local}} hosts try to use {{ic|mdns4_minimal}} instead of {{ic|mdns_minimal}}.}}<br />
<br />
{{Note|Look towards [[avahi]] for more information.}}<br />
<br />
== Troubleshooting ==<br />
<br />
=== Video broken or other issue after upgrade ===<br />
<br />
Now and then VLC will have some issues with configuration even in minor releases. Before making bug reports, remove or rename your configuration located at {{ic|~/.config/vlc}} and confirm whether the issue is still there.<br />
<br />
If using a ffmpeg variant from the AUR, be sure that you have upgraded it as well. Pacman will not upgrade it when necessary and a mismatch will break VLC.<br />
<br />
=== Segmentation fault ===<br />
<br />
==== Fault when initiating VLC ====<br />
<br />
When starting VLC you can get a segfault, and ruling out general factors such as [[Microcode]], a possible workaround to this is running the following:<br />
<br />
# /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins<br />
<br />
Then reinstall VLC.<br />
<br />
If that does not work, VLC has a segfault issue with {{ic|plugins.dat}} (see {{Bug|57777}}), simply remove the file:<br />
<br />
# rm /usr/lib/vlc/plugins/plugins.dat<br />
<br />
==== Fault when playing a video ====<br />
<br />
Sometimes you can open VLC and use it to play audio files, but it closes when you play a video. You'll also get a segfault. It occurs especially when you're using different graphic cards on one computer. Then [[Hardware video acceleration]] was wrongly configured, causing VLC unable referring to graphic devices. You can install the following dependencies to solve the problem.<br />
<br />
For Nvidia graphic card users: install {{Pkg|libva-vdpau-driver}}.<br />
<br />
For Intel graphic card users: install {{Pkg|libva-intel-driver}}.<br />
<br />
=== Missing icons in dropdown menus ===<br />
<br />
This can happen under XFCE, there will be no more icons in dropdown menus, like the PCI card icon.<br />
<br />
Execute these commands to reactivate these icons:<br />
<br />
$ gconftool-2 --type boolean --set /desktop/gnome/interface/buttons_have_icons true<br />
$ gconftool-2 --type boolean --set /desktop/gnome/interface/menus_have_icons true<br />
<br />
=== Failed to open VDPAU backend ===<br />
<br />
See [[Hardware video acceleration#Failed to open VDPAU backend]].<br />
<br />
Since your system probably does not support VDPAU you should tell VLC to use VA-API instead, see [[#Hardware video acceleration]].<br />
<br />
=== No playback via SFTP of media files names containing spaces ===<br />
<br />
If VLC does not play any videos or audio files over SFTP make sure you have {{Pkg|sshfs}} installed.<br />
<br />
If it refuses to play any media files containing spaces via SFTP and always asks for authentication change the Exec line in the {{ic|vlc.desktop}} file to:<br />
<br />
Exec=/usr/bin/vlc --started-from-file %F<br />
<br />
See [https://bugs.launchpad.net/ubuntu/+source/vlc/+bug/239431/comments/11].<br />
<br />
== See also ==<br />
<br />
* [[Wikipedia:VLC media player|Wikipedia article]]<br />
* [[List of applications#Multimedia]]<br />
* [https://www.videolan.org/vlc/ VLC homepage]<br />
* [https://github.com/acrisci/playerctl playerctl]: A command-line utility and library for controlling media players<br />
* [https://wiki.videolan.org/Control_VLC_via_a_browser Control VLC via a browser]</div>
VictriD
https://wiki.archlinux.org/index.php?title=ArchWiki:Translation_Team_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=597198
ArchWiki:Translation Team (简体中文)
2020-02-11T03:15:18Z
<p>VictriD: 认领页面:Google Authenticator</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:ArchWiki (简体中文)]]<br />
[[ar:ArchWiki:Translation Team]]<br />
[[cs:ArchWiki:Translation Team]]<br />
[[el:ArchWiki:Translation Team]]<br />
[[en:ArchWiki:Translation Team]]<br />
[[es:ArchWiki:Translation Team]]<br />
[[fr:ArchWiki Translation Team]]<br />
[[hr:ArchWiki:Translation Team]]<br />
[[it:ArchWiki:Translation Team]]<br />
[[ja:ArchWiki 翻訳チーム]]<br />
[[ko:ArchWiki:Translation Team]]<br />
[[nl:ArchWiki:Translation Team]]<br />
[[pl:ArchWiki:Translation Team]]<br />
[[pt:ArchWiki:Translation Team]]<br />
[[ru:ArchWiki:Translation Team]]<br />
[[sk:ArchWiki:Translation Team]]<br />
[[zh-hant:ArchWiki:Translation Team]]<br />
Arch Wiki 上有许多中文页面,这其中大部分是从外文翻译过来的,这些页面是无数中文志愿者劳动的结晶。随着时间推移,有些页面因为没有及时维护,内容严重过时。而目前的翻译工作缺少组织,效率偏低。所以参照西班牙和意大利翻译组的做法,添加这个页面。<br />
<br />
如果你希望对Arch Wiki做贡献,参与Wiki建设,比如翻译英文页面和对已翻译过的中文页面进行维护,只需要编辑下面的[[#页面维护列表]],添加相应的条目,并将自己加为相关页面的维护者。如果你在列表中还没有找到想要翻译的页面,可以自行添加。另外,如果因为时间原因无法再维护页面,请及时将自己从维护者列表中删除。<br />
<br />
== 创建翻译 ==<br />
{{警告|如果不准备翻译页面的大部分内容,请尽量不要新建简体中文页面。检查英文页面的更新需要花费不少精力,没有翻译的页面会增加维护负担。}}<br />
# 如果还不知道如何编辑 wiki,请阅读 [[Help:Editing (简体中文)|编辑帮助]]。<br />
# 阅读 [[Help:i18n (简体中文)|i18n帮助]],文章给出了 ArchWiki 国际化和本地化的指南。<br />
# [[Special:UserLogin|登录]] 以进行编辑。<br />
# 选择要翻译的页面,例如从 [[Special:Random|随机页面]] 或[[#页面维护列表|页面维护列表]] 中选择一个未翻译完成的页面。假设要翻译 [[Some Page]].<br />
# 进入选择的英文页面,点击页面顶部的 '''编辑'''。<br />
# 添加要翻译文件的语言间链接, 简体中文的话加入<nowiki>[[zh-hans:Some Page]]</nowiki>,其它语言参见[[Help:i18n#Interlanguage links]])。<br />
# 复制所有页面代码。<br />
# 保存页面 (新加了语言链接)<br />
# 访问页面左边新添加的语言链接,应该会进到 [[Some Page (简体中文)]] : {{ic|<nowiki>https://wiki.archlinux.org/index.php/Some_Page_(</nowiki>''简体中文'')}}<br />
# 因为页面不存在,点击 '''创建'''。<br />
# 将显示一个编辑器 - 粘贴复制的英文页面。<br />
# 将文章分类修改为本地化版本,例如将 {{ic|<nowiki>[[Category:Internationalization]]</nowiki>}} 修改为 {{ic|<nowiki>[[Category:Internationalization (简体中文)]]</nowiki>}},参阅[[Help:Category (简体中文)]].<br />
# 修改语言间链接,指向英文页面(将 {{ic|zh-hans}} 修改为 {{ic|en}},并将英文页面移到文章顶部。<br />
# 翻译页面,进行保存。<br />
# (推荐)给翻译完成的页面加上[[Template:TranslationStatus (简体中文)|翻译状态]],后有详细介绍。<br />
# 更新所有其它语言页面,加入刚翻译文章的语言间链接。<br />
# (可选)创建一个简体中文名称的页面,指向新创建的页面:访问 {{ic|<nowiki>https://wiki.archlinux.org/index.php/</nowiki>''页面的中文名称''}}.<br />
# (可选)建立新页面,并加入:{{bc|<nowiki>#REDIRECT [[Some Page (简体中文)</nowiki>]]}}<br />
<br />
== Templates ==<br />
<br />
{{Translateme (简体中文)|Not translated}}<br />
<br />
The following table lists the [[Help:Template (简体中文)|templates]] that should be translated and their Simplified Chinese equivalent.<br />
<br />
{| class=wikitable<br />
! English template || Simplified Chinese version<br />
|-<br />
! colspan=2| Article templates<br />
|-<br />
| [[Template:Related articles start]] || [[Template:Related articles start (简体中文)]]<br />
|-<br />
| [[Template:Yes]] || [[Template:是]]<br />
|-<br />
| [[Template:No]] || [[Template:否]]<br />
|-<br />
| [[Template:Tip]] || [[Template:提示]]<br />
|-<br />
| [[Template:Note]] || [[Template:注意]]<br />
|-<br />
| [[Template:Warning]] || [[Template:警告]]<br />
|-<br />
| [[Template:Dead link]] || [[Template:失效链接]]<br />
|-<br />
| [[Template:Broken package link]] || {{-}}<br />
|-<br />
! colspan=2| Translation status templates<br />
|-<br />
| [[Template:Bad translation]] || {{-}}<br />
|-<br />
| [[Template:Translateme]] || [[Template:Translateme (简体中文)]]<br />
|-<br />
| [[Template:TranslationStatus]] || [[Template:TranslationStatus (简体中文)]]<br />
|-<br />
! colspan=2| Special templates<br />
|-<br />
| [[Template:Cat main]] || {{-}}<br />
|-<br />
| [[Template:Template]] || {{-}}<br />
|}<br />
<br />
== 完善翻译 ==<br />
[https://wiki.archlinux.org/index.php?title=Special:WhatLinksHere/Template:Translateme_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&limit=100 这个页面] 包含了需要完善翻译的简体中文页面。完善翻译的基本步骤:<br />
# 选择自己比较熟悉的文章进行翻译<br />
# 先检查英文页面的对应段落,更新成最新的英文后再翻译,避免翻译过时的内容,减少信息遗漏。<br />
# 翻译完成后删除页面中的 <nowiki>{{translateme (简体中文)}}</nowiki> 标记<br />
# (推荐)给翻译完成的页面加上[[Template:TranslationStatus (简体中文)|翻译状态]],后有详细介绍。<br />
<br />
== 更新过期页面 == <br />
如果发现有 Wiki 页面过期或错误:<br />
* 小的改动,有时间可以立即进行修改同步,维护者并不控制页面的编辑权限,越多的人参与维护越好。如果改动较大,请先联系维护者,避免重复劳动。<br />
* 没有时间查看更改,请给页面加上 {{ic|<nowiki>{{out of date}}</nowiki>}} 模版,这样其他贡献者更容易发现需要更新的页面,而读者看到过期标记就可以直接查看英文页面,以免被错误内容误导,白白耽误时间。<br />
* 没有时间翻译,请将过期的中文部分删去,从英文页面中复制更改的部分到中文页面的相应部分,去掉{{ic|<nowiki>{{out of date}}</nowiki>}}模板(如果页面上有的话)并加上{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他贡献者就更容易发现需要翻译的页面,而读者也不会被过期的内容误导。<br />
如果发现有页面未翻译:<br />
* 有时间的话,请将页面中的英文部分翻译为中文,并去掉{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板。<br />
* 没有时间翻译,请为页面添加{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板,这样其他的贡献者就能更容易发现需要翻译的页面。<br />
{{注意|在修改页面上的模板时,请同时更新页面维护列表的翻译状态。}}<br />
<br />
== 翻译任务 ==<br />
=== 模板 Article summary 变更为 Related ===<br />
因为 Summary 中的简介基本上和正文的介绍一样,所以页面左边的介绍栏进行了简化,只保留相关文章功能。英文页面正在进行大规模修改,相应的中文页面也需要同步更新。<br />
<br />
需要注意的地方:<br />
* 将第一行改成<br />
: <nowiki>{{Related articles start (简体中文)}}</nowiki><br />
* 如果英文的相关文章存在中文翻译,则替换为简体中文页面。示例:<br />
: <nowiki>{{Related2|Display Manager (简体中文)|显示管理器}}</nowiki><br />
* 示例:[https://wiki.archlinux.org/index.php?title=Start_X_at_Login&diff=0&oldid=270155 英文变更], [https://wiki.archlinux.org/index.php?title=Start_X_at_Login_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=285643&oldid=242662 对应的翻译]<br />
<br />
== 维护翻译 ==<br />
完成页面的翻译只是初步完成任务,及时同步英文页面改动、更新翻译是一个持续性的工作,可能会耗费更多的时间。<br />
<br />
=== 页面认领 ===<br />
所有人都可以认领页面。认领后的责任包括进行翻译,关注英文页面的改动,及时同步翻译。<br />
<br />
为了更好的跟踪英文页面的修改,请务必在设置中启用监视列表邮件通知,并监视对应的英文页面(从设置中找到监视列表,加入英文页面。或者直接到英文页面点击页面顶端的监视标签。这样只要有改动,就会收到邮件通知)。<br />
<br />
{{小贴士|如果收到邮件通知后没有访问页面或者访问了页面却没有登录用户,下次页面改动时就不会再发邮件通知。可以点击监视列表中的'''标记所有页面为已读'''再次获取更新。}}<br />
<br />
如果页面有维护者但长期得不到更新,将会在维护列表中删除维护者。<br />
<br />
=== 翻译状态模板 ===<br />
Arch 作为滚动发行版,软件变化比较快,对应的文档变化也比较快。许多翻译的文章由于缺乏更新,会产生命令运行出错或不起作用等问题。而由于这些过期页面没有及时标记出来,所以用户无法及时获得更新。[[Template:TranslationStatus (简体中文)|翻译状态模板]]就是为了解决这个问题而创建。<br />
<br />
此模板可以起到如下作用:<br />
* 为用户提供翻译状况,包括翻译时间、英文页面的最后版本等<br />
* 用户可以点击查看翻译后,英文页面的改动,这样英文不是很好的用户可以只查看很小一部分英文内容,并判断出是否影响操作。<br />
* 翻译人员可以跟踪页面状况,通过[[Special:WhatLinksHere/Template:TranslationStatus_(简体中文)|模板的反向链接]]可以查找到所有标记页面,查看需要更新翻译的部分。<br />
<br />
[[Template:TranslationStatus (简体中文)|模板页面]]有详细的使用方法。<br />
<br />
=== 页面维护列表 ===<br />
{{注意|请按照拉丁字母顺序添加页面。}}<br />
<br />
翻译状态说明:<br />
;过期:页面内容未与英文页面同步,对应{{ic|<nowiki>{{out of date}}</nowiki>}} 模版<br />
;未翻译:页面中含有英文内容,对应{{ic|<nowiki>{{translateme (简体中文)}}</nowiki>}}模板<br />
;完成:页面已与英文页面同步<br />
<br />
{| class="wikitable sortable collapsible" border="1"<br />
|-<br />
! 页面<br />
! 翻译状态<br />
! 维护者<br />
! class="unsortable" width="30%" | 备注<br />
|-<br />
| [[acpid (简体中文)]]<br />
| 过期<br />
| Cael<br />
|<br />
|-<br />
| [[Advanced Linux Sound Architecture (简体中文)]]<br />
| 翻译中<br />
| ihonliu<br />
| 无<br />
|-<br />
| [[Arch based distributions (active) (简体中文)]]<br />
| 完成<br />
| Joshua<br />
| 勘误中<br />
|-<br />
| [[Arch boot process (简体中文)]]<br />
| 翻译中<br />
| Bangbo Zheng<br />
| <br />
|-<br />
| [[Amateur radio (简体中文)]]<br />
| 翻译中<br />
| liu-shuyuan<br />
| <br />
|-<br />
| [[AMD Catalyst (简体中文)]]<br />
| 过期<br />
| Shibao Zhao<br />
| 无<br />
|-<br />
| [[ATI (简体中文)]]<br />
| 完成<br />
| skysailing<br />
| 无<br />
|-<br />
| [[AUR helpers (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 部分用词可能需要修改<br />
|-<br />
| [[awesome (简体中文)]]<br />
| 进行中<br />
| Cael<br />
| 无<br />
|-<br />
| [[BIND (简体中文)]]<br />
| 完成<br />
| Dargasia<br />
|<br />
|-<br />
| [[Bumblebee (简体中文)]]<br />
| 完成<br />
| Peter<br />
| 无<br />
|-<br />
| [[Chromium (简体中文)]]<br />
| 完成<br />
| Bobby<br />
| 无<br />
|-<br />
| [[Ceph (简体中文)]]<br />
| 翻译中<br />
| Aaron Chen<br />
| 部分未翻译 <br />
|-<br />
| [[Cinnamon (简体中文)]]<br />
| 部分翻译 <br />
| Bobby<br />
| 部分未翻译 <br />
|- <br />
| [[Common Applications (简体中文)]]<br />
| 部分翻译 <br />
| DavidChen<br />
| 翻译中<br />
|-<br />
| [[Common Applications/Science (简体中文)]]<br />
| drop maintain<br />
| 更新,翻译中<br />
|<br />
|-<br />
| [[Compiz (简体中文)]]<br />
| 翻译中<br />
| xiii_1991<br />
| 20140813开始<br />
|-<br />
| [[Conky (简体中文)]]<br />
| 完成<br />
| upi<br />
| 无<br />
|-<br />
| [[Core utilities (简体中文)]]<br />
| 完成<br />
| rentaro, Arisaka<br />
| 无<br />
|-<br />
|-<br />
| [[Clover (简体中文)]]<br />
| 完成<br />
| Yume Kankawa<br />
| 无<br />
|-<br />
| [[Disk cloning (简体中文)]]<br />
| 翻译中<br />
| _spaike97<br />
| 无<br />
|-<br />
| [[Dynamic Kernel Module Support (简体中文)]]<br />
| 完成<br />
| Mithrandir<br />
| 完善中<br />
|-<br />
| [[Emacs (简体中文)]]<br />
| 翻译中<br />
| Jaurung yuanhang<br />
| 未完成<br />
|-<br />
| [[File recovery (简体中文)]]<br />
| 翻译中<br />
| _spaike97<br />
| 无<br />
|-<br />
| [[Fish (简体中文)]]<br />
| 完成<br />
| liu-shuyuan<br />
|<br />
|-<br />
| [[Flatpak (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Font configuration (简体中文)]]<br />
| 翻译中<br />
| Jaurung<br />
| 完善中<br />
|-<br />
| [[Fonts (简体中文)]]<br />
| 翻译中<br />
| qqbzg<br />
| 无<br />
|-<br />
| [[GDM (简体中文)]]<br />
| 翻译中<br />
| Junjie Yuan<br />
| 绝大多数内容未翻译,重新进行翻译<br />
|-<br />
| [[GNOME (简体中文)]]<br />
| 完成<br />
| skywet<br />
| <br />
|-<br />
| [[Google Authenticator (简体中文)]]<br />
| 完成<br />
| VictriD<br />
| 无<br />
|-<br />
| [[GRUB (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[GRUB/Tips and tricks (简体中文)]]<br />
| 完成<br />
| Armodeniz<br />
| <br />
|-<br />
| [[Java (简体中文)]]<br />
| 翻译中<br />
| CaCaCarrot<br />
| 无<br />
|-<br />
| [[KDE (简体中文)]]<br />
| 过期<br />
| <br />
| <br />
|-<br />
| [[LAMP (简体中文)]]<br />
| 完成<br />
| Liuzhengyi<br />
| 勘误中<br />
|-<br />
| [[LibreOffice (简体中文)]]<br />
| 完成<br />
| qqbzg<br />
| 勘误中<br />
|-<br />
| [[Libvirt (简体中文)]]<br />
| 完成<br />
| Kurobac<br />
| 需要格式改进<br />
|-<br />
| [[Local Mirror (简体中文)]]<br />
| 完成<br />
| Jason Zhang<br />
| 完善中<br />
|- <br />
| [[MATLAB (简体中文)]]<br />
| 部分翻译 <br />
| Liu Qinyang<br />
|<br />
|-<br />
| [[Minecraft (简体中文)]]<br />
| 完成 <br />
| Xavier Lau<br />
| 页面已经与英文版同步,长期维护中<br />
|-<br />
| [[NetworkManager (简体中文)]]<br />
| 翻译中 <br />
| Jack-lijing, leeking <br />
| 请优先翻译<br />
|-<br />
| [[Network Time Protocol daemon (简体中文)]]<br />
| 完成<br />
| sid<br />
| 完善中<br />
|-<br />
| [[Unofficial user repositories (简体中文)]]<br />
| 翻译中<br />
| TransistorLogic<br />
| 无<br />
|-<br />
| [[OpenOffice (简体中文)]]<br />
| 过期<br />
| 无<br />
| 无<br />
|-<br />
| [[Opera (简体中文)]]<br />
| 未翻译<br />
| Bobby<br />
| 请优先翻译此文 <br />
|-<br />
| [[Pacman GUI Frontends (简体中文)]]<br />
| 过期<br />
| 无<br />
| 无<br />
|-<br />
| [[Pidgin (简体中文)]]<br />
| 进行中<br />
| Cael<br />
| 无 <br />
|-<br />
| [[Python打包指引 (简体中文)]]<br />
| 翻译中<br />
| SherlockHolo<br />
| 无<br />
|- <br />
| [[ranger (简体中文)]]<br />
| 完成<br />
| Jason Zhang<br />
| 完善中<br />
|-<br />
| [[Raspberry Pi (简体中文)]]<br />
| 翻译中<br />
| Mithrandir<br />
| <br />
|-<br />
| [[Reporting bug guidelines (简体中文)]]<br />
| 完成<br />
| 无<br />
| 无<br />
|-<br />
| [[SDDM (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Secure Shell (简体中文)]]<br />
| 完成<br />
| Arisaka<br />
| 无<br />
|-<br />
| [[Smart Common Input Method platform (简体中文)]]<br />
| 过期<br />
| 无<br />
| 无<br />
|-<br />
| [[Steam (简体中文)]]<br />
| 完成<br />
| C0n5t4ntK<br />
| 长期维护中<br />
|-<br />
| [[Systemd-timesyncd (简体中文)]]<br />
| 完成<br />
| 无<br />
| 无<br />
|-<br />
| [[TLP (简体中文)]]<br />
| 完成<br />
| Skywet<br />
| 持续更新中 <br />
|-<br />
| [[Tomcat (简体中文)]]<br />
| 完成<br />
| Starwing117<br />
| 持续更新中 <br />
|-<br />
| [[Vim (简体中文)]]<br />
| 完成<br />
| 无<br />
| 无<br />
|-<br />
| [[VirtualBox (简体中文)]]<br />
| 翻译至 2017-10-15<br />
| [[User:5long]]<br />
|<br />
|-<br />
| [[VMware (简体中文)]]<br />
| 完成<br />
| ThomasWFan<br />
| 页面已经与英文版同步,长期维护中<br />
|- <br />
| [[Xfce (简体中文)]]<br />
| 完成 <br />
| 无<br />
| 无<br />
|-<br />
| [[Xmonad (简体中文)]]<br />
| 过期<br />
| 无<br />
| 无<br />
|-<br />
| [[Xrandr (简体中文)]]<br />
| 过期<br />
| 无<br />
| 无</div>
VictriD
https://wiki.archlinux.org/index.php?title=Google_Authenticator_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=597197
Google Authenticator (简体中文)
2020-02-11T02:56:53Z
<p>VictriD: Renew contents translation with the original English version. Also fix some misguided, or vague translation and broken links with link content localization. Reasons: I felt</p>
<hr />
<div>[[Category:Authentication]]<br />
[[Category:Google]]<br />
[[en:Google Authenticator]]<br />
[[es:Google Authenticator]]<br />
[[ja:Google Authenticator]]<br />
[[ru:Google Authenticator]]<br />
{{TranslationStatus (简体中文)|Google_Authenticator|2020-02-11|573160}}<br />
[https://github.com/google/google-authenticator Google Authenticator] 使用一次性密码('''O'''ne-'''t'''ime '''P'''asscodes)([[Wikipedia:One-time pad|OTP]])进行两步验证。iOS、Android 和 Blackberry 上都提供了 OTP 生成器应用。与 [[S/KEY Authentication]] 类似,两步验证的机制集成在Linux的 [[PAM]] 系统中。此指南显示了此两步验证机制的安装与配置。<br />
<br />
==安装==<br />
<br />
安装 {{Pkg|libpam-google-authenticator}} 软件包或开发者版本 {{AUR|google-authenticator-libpam-git}}。<br />
<br />
== 设置插入式验证模块('''P'''luggable '''A'''uthentication '''M'''odules) ==<br />
<br />
{{Warning|若通过 [[Secure Shell (简体中文)|SSH]] 进行 Google Authenticator 的所有配置,在完成所有配置并测试正常之前,请勿关闭 SSH 会话,否则可能会无法登录。此外,最好在激活 PAM 之前生成密钥文件。}}<br />
<br />
通常远程登录才需要设置两步验证。对应的PAM的配置在文件{{ic|/etc/pam.d/sshd}}内。如果想全局使用谷歌两步身份验证,请'''小心'''的修改{{ic|/etc/pam.d/system-auth}},以免锁定自己从而不能登录。在本指南中,我们将在本地会话中编辑 SSH 登录配置文件{{ic|/etc/pam.d/sshd}},这样就算操作出错,也不会影响您的登录(但不是必须的)。<br />
<br />
要同时输入 Unix 密码'''与'''两步验证码登录,请在 {{ic|/etc/pam.d/sshd}}文件的system-remote-login行之上添加{{ic|pam_google_authenticator.so}}:<br />
<br />
'''auth required pam_google_authenticator.so'''<br />
auth include system-remote-login<br />
account include system-remote-login<br />
password include system-remote-login<br />
session include system-remote-login<br />
<br />
这样将会首先询问两步验证码,验证成功后才会询问 Unix 密码。交换{{ic|pam_google_authenticator.so}}与 system-remote-login 两行会改变验证顺序。<br />
<br />
{{Warning|只有生成密钥文件(见下)的用户才会被允许SSH登录。}}<br />
<br />
要允许使用 Unix 密码'''或'''两步验证码登录,请修改:<br />
<br />
auth '''sufficient''' pam_google_authenticator.so<br />
<br />
在文件{{ic|/etc/ssh/'''sshd_config'''}}内开启质疑-应答认证(challenge-response authentication):<br />
ChallengeResponseAuthentication yes<br />
最后 [[Systemd (简体中文)#使用单元|重新加载]] {{ic|sshd}} 服务。<br />
<br />
{{Warning|如果设置使用密钥登陆并[[Secure Shell (简体中文)#强制公钥验证|禁止密码登录]], OpenSSH 会忽略如上所有的配置。但是在 OpenSSH 6.2 版本以后,允许使用基于密钥和两步验证的验证。请参阅 [[Secure Shell (简体中文)#双因素验证与公钥|SSH的双因素验证与公钥]]。}}<br />
<br />
===只对在本地网络外的登录启用两步验证===<br />
<br />
有时,我们只希望对不在本地网络内发起的 SSH 连接启用两步验证。此时,建立一个文件(比如{{ic|/etc/security/access-local.conf}}),然后仿照下面的例子配置你想要跳过两步验证的网络地址:<br />
<br />
# only allow from local IP range<br />
+ : ALL : 192.168.20.0/24<br />
# Additional network: VPN tunnel ip range (in case you have one)<br />
+ : ALL : 10.8.0.0/24<br />
+ : ALL : LOCAL<br />
- : ALL : ALL<br />
<br />
然后编辑你的{{ic|/etc/pam.d/sshd}},添加这一行:<br />
<br />
#%PAM-1.0<br />
#auth required pam_securetty.so #disable remote root<br />
'''auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf'''<br />
auth required pam_google_authenticator.so<br />
auth include system-remote-login<br />
account include system-remote-login<br />
password include system-remote-login<br />
session include system-remote-login<br />
<br />
==生成密钥文件==<br />
<br />
{{Tip|[[Help:Reading (简体中文)#安装软件包|安装]] {{Pkg|qrencode}} 以在屏幕上生成可以扫描的二维码。扫描二维码以自动配置两步验证器。}}<br />
<br />
每一个想要使用两步验证的用户需要在其用户目录生成一个密钥文件,使用命令''google-authenticator''来完成:<br />
<br />
$ google-authenticator<br />
Do you want authentication tokens to be time-based (y/n) y<br />
<这里是自动生成的二维码><br />
Your new secret key is: ZVZG5UZU4D7MY4DH (验证器配置密钥)<br />
Your verification code is 269371 (输入[[#设置两步验证器|验证器]]生成的验证码)<br />
Your emergency scratch codes are: (备用令牌码)<br />
70058954<br />
97277505<br />
99684896<br />
56514332<br />
82717798<br />
<br />
Do you want me to update your "/home/username/.google_authenticator" file (y/n) y<br />
(是否重新生成登录配置文件?)<br />
<br />
Do you want to disallow multiple uses of the same authentication<br />
token? This restricts you to one login about every 30s, but it increases<br />
your chances to notice or even prevent man-in-the-middle attacks (y/n) y<br />
(是否拒绝多次重复使用相同的令牌?这将限制你每30s仅能登录一次,但会提醒/阻止中间人攻击。)<br />
<br />
By default, tokens are good for 30 seconds and in order to compensate for<br />
possible time-skew between the client and the server, we allow an extra<br />
token before and after the current time. If you experience problems with poor<br />
time synchronization, you can increase the window from its default<br />
size of 1:30min to about 4min. Do you want to do so (y/n) n<br />
(是否将窗口时间由1分30秒增加到约4分钟?这将缓解时间同步问题。)<br />
<br />
If the computer that you are logging into is not hardened against brute-force<br />
login attempts, you can enable rate-limiting for the authentication module.<br />
By default, this limits attackers to no more than 3 login attempts every 30s.<br />
Do you want to enable rate-limiting (y/n) y<br />
(是否启用此模块的登录频率限制,登录者将会被限制为最多在30秒内登录3次。)<br />
<br />
<br />
建议您将'''备用令牌码'''保存在安全的地方(打印出来并放在一个安全的位置),因为当丢失手机(即你的两步验证器)或其他原因不能使用两步验证器时,只能使用'''备用令牌码'''登录。它们同时也被保存在{{ic|~/.google_authenticator}},你可以在登录后随时查阅。<br />
<br />
==设置两步验证器==<br />
<br />
在你的手机上安装两步验证器软件。例如:<br />
<br />
* '''FreeOTP''' : [https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp Android(Play商店)]/[https://itunes.apple.com/es/app/freeotp-authenticator/id872559395 iOS].<br />
* '''Google Authenticator''' [https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 Android(Play商店)]/[https://itunes.apple.com/es/app/google-authenticator/id388497605 iOS].<br />
<br />
在软件中创建一个新验证,输入密钥(如例子中的'ZVZG5UZU4D7MY4DH')或扫描二维码来导入密钥,并依照屏幕提示输入验证码。<br />
<br />
软件现在应该会显示一个每30秒更新的验证码。<br />
<br />
==测试==<br />
<br />
从另一台设备和/或另一个终端连接到完成了上述配置的主机:<br />
<br />
$ ssh hostname<br />
login as: <username><br />
Verification code: <令牌码/备用令牌码><br />
Password: <password><br />
$<br />
<br />
==存储位置==<br />
<br />
如果想要改变密钥存储位置,请使用{{ic|--secret}}参数:<br />
<br />
$ google-authenticator --secret="/'''PATH_FOLDER'''/'''USERNAME'''"<br />
<br />
然后更改{{ic|/etc/pam.d/sshd}}内的路径配置:<br />
<br />
{{hc|/etc/pam.d/sshd|2=<br />
auth required pam_google_authenticator.so user=root secret=/'''PATH_FOLDER'''/${USER}<br />
}}<br />
<br />
{{ic|user&#61;root}} 用于强制PAM使用root用户权限来搜索文件。<br />
<br />
另外请注意,密钥文件的所有者是root,生成文件的用户只能读取文件(chmod: {{ic|400}})。<br />
<br />
$ chown root.root /'''PATH_FILE'''/'''SECRET_KEY_FILES'''<br />
chmod 400 /'''PATH_FILE'''/'''SECRET_KEY_FILES'''<br />
<br />
== 用于桌面登陆 ==<br />
<br />
谷歌两步认证插件可以同时用于控制台与 GNOME 桌面登录。只需要在文件 {{ic|/etc/pam.d/login}} 或 {{ic|/etc/pam.d/gdm-password}} 内加入<br />
<br />
auth required pam_google_authenticator.so<br />
<br />
==生成两步验证代码==<br />
<br />
如果你在其他的系统也配置了Google Authenticator,那么如果手机丢失(即你的两步验证器)你就无法登录这些系统了。使用额外的两步验证代码生成方法有时很有帮助。<br />
<br />
===代码管理器===<br />
一个可以显示、生成、储存、管理两步验证代码的脚本可以从 {{AUR|gashell}} 安装。此外,还有可替代的 auther 程序 {{AUR|auther-git}}。<br />
<br />
===命令行===<br />
生成两步验证代码最简单的方法是使用{{ic|oath-tool}}。可以从 {{Pkg|oath-toolkit}} 安装, 并这样使用:<br />
<br />
oathtool --totp -b ABC123<br />
<br />
其中, {{ic|ABC123}} 是配置密钥。<br />
<br />
在绝大多数有足够的用户权限的Android系统上,Google Authenticator的数据库可以被拷贝出设备并直接访问。这是一个 [[SQLite]]3 数据库。你可以用以下的shell脚本读取Google Authenticator的数据库并对每一个储存的密钥生成动态的两步验证码。<br />
<br />
{{hc|google-authenticator.sh|2=<br />
#!/bin/sh<br />
<br />
# This is the path to the Google Authenticator app file. It's typically located<br />
# in /data under Android. Copy it to your PC in a safe location and specify the<br />
# path to it here.<br />
DB="/path/to/com.google.android.apps.authenticator/databases/databases"<br />
<br />
sqlite3 "$DB" 'SELECT email,secret FROM accounts;' {{!}} while read A<br />
do<br />
NAME=`echo "$A" {{!}} cut -d '{{!}}' -f 1`<br />
KEY=`echo "$A" {{!}} cut -d '{{!}}' -f 2`<br />
CODE=`oathtool --totp -b "$KEY"`<br />
echo -e "\e[1;32m$CODE\e[0m - \e[1;33m$NAME\e[0m"<br />
done<br />
}}</div>
VictriD