|
@@ -8,7 +8,7 @@
|
|
|
<sect1 id="ch-system-createfiles">
|
|
|
<?dbhtml filename="createfiles.html"?>
|
|
|
|
|
|
- <title>Creating Essential Files and Symlinks</title>
|
|
|
+ <title>创建必要的文件和符号链接</title>
|
|
|
|
|
|
<indexterm zone="ch-system-createfiles">
|
|
|
<primary sortas="e-/etc/passwd">/etc/passwd</primary>
|
|
@@ -34,10 +34,13 @@
|
|
|
<primary sortas="e-/var/log/wtmp">/var/log/wtmp</primary>
|
|
|
</indexterm>
|
|
|
|
|
|
- <para>Some programs use hard-wired paths to programs which do not exist yet.
|
|
|
+ <!--para>Some programs use hard-wired paths to programs which do not exist yet.
|
|
|
In order to satisfy these programs, create a number of symbolic links which
|
|
|
will be replaced by real files throughout the course of this chapter after the
|
|
|
- software has been installed:</para>
|
|
|
+ software has been installed:</para-->
|
|
|
+ <para>有些程序使用硬编码的路径访问当前还不存在的程序。
|
|
|
+ 为了满足它们的要求,需要创建一些符号链接。在本章的后续内容中,
|
|
|
+ 它们将被安装好的软件包中真正的文件替代:</para>
|
|
|
|
|
|
<screen revision="sysv"><userinput>ln -sv /tools/bin/{bash,cat,dd,echo,ln,pwd,rm,stty} /bin
|
|
|
ln -sv /tools/bin/{install,perl} /usr/bin
|
|
@@ -69,101 +72,113 @@ ln -sv bash /bin/sh</userinput></screen>
|
|
|
<!--sed 's/tools/usr/' /tools/lib/libstdc++.la > /usr/lib/libstdc++.la
|
|
|
sed 's/tools/usr/' /tools/lib/lib${lib}.la > /usr/lib/lib${lib}.la-->
|
|
|
<variablelist>
|
|
|
- <title>The purpose of each link:</title>
|
|
|
+ <title>每个链接的目的:</title>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/bin/bash</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>Many <command>bash</command> scripts specify
|
|
|
- <filename>/bin/bash</filename>.</para>
|
|
|
+ <para>许多 <command>bash</command> 脚本指定了
|
|
|
+ <filename>/bin/bash</filename>。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/bin/cat</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>This pathname is hard-coded into Glibc's configure script.</para>
|
|
|
+ <para>这个路径硬编码在 Glibc 配置脚本中。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/bin/dd</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>The path to <filename>dd</filename> will be hard-coded into the
|
|
|
- <filename>/usr/bin/libtool</filename> utility.</para>
|
|
|
+ <para>指向 <filename>dd</filename> 的路径会被硬编码在
|
|
|
+ <filename>/usr/bin/libtool</filename> 工具中。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/bin/echo</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>This is to satisfy one of the tests in Glibc's test suite, which
|
|
|
- expects <filename>/bin/echo</filename>.</para>
|
|
|
+ <!--para>This is to satisfy one of the tests in Glibc's test suite, which
|
|
|
+ expects <filename>/bin/echo</filename>.</para-->
|
|
|
+ <para>这是为了满足 Glibc 测试套件中的一项测试,它需要
|
|
|
+ <filename>/bin/echo</filename>。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/usr/bin/install</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>The path to <filename>install</filename> will be hard-coded into
|
|
|
- the <filename>/usr/lib/bash/Makefile.inc</filename> file.</para>
|
|
|
+ <!--para>The path to <filename>install</filename> will be hard-coded into
|
|
|
+ the <filename>/usr/lib/bash/Makefile.inc</filename> file.</para-->
|
|
|
+ <para>指向 <filename>install</filename> 的路径会被硬编码到
|
|
|
+ <filename>/usr/lib/bash/Makefile.inc</filename> 文件中。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/bin/ln</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>The path to <filename>ln</filename> will be hard-coded into the
|
|
|
+ <!--para>The path to <filename>ln</filename> will be hard-coded into the
|
|
|
<filename>/usr/lib/perl5/&perl-version;/<target-triplet>/Config_heavy.pl</filename>
|
|
|
- file.</para>
|
|
|
+ file.</para-->
|
|
|
+ <para>指向 <filename>ln</filename> 的路径会被硬编码到
|
|
|
+ <filename>/usr/lib/perl5/&perl-version;/<target-triplet>/Config_heavy.pl</filename>
|
|
|
+ 文件中。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/bin/pwd</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>Some <command>configure</command> scripts, particularly Glibc's,
|
|
|
- have this pathname hard-coded.</para>
|
|
|
+ <para>某些 <command>configure</command> 脚本,特别是 Glibc 的,
|
|
|
+ 硬编码了这个路径。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/bin/rm</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>The path to <filename>rm</filename> will be hard-coded into the
|
|
|
+ <para>指向 <filename>rm</filename> 的路径会被硬编码到
|
|
|
+ <filename>/usr/lib/perl5/&perl-version;/<target-triplet>/Config_heavy.pl</filename>
|
|
|
+ 文件中。</para>
|
|
|
+ <!--para>The path to <filename>rm</filename> will be hard-coded into the
|
|
|
<filename>/usr/lib/perl5/&perl-version;/<target-triplet>/Config_heavy.pl</filename>
|
|
|
- file.</para>
|
|
|
+ file.</para-->
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/bin/stty</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>This pathname is hard-coded into Expect, therefore it is needed
|
|
|
- for Binutils and GCC test suites to pass.</para>
|
|
|
+ <!--para>This pathname is hard-coded into Expect, therefore it is needed
|
|
|
+ for Binutils and GCC test suites to pass.</para-->
|
|
|
+ <para>这个路径被硬编码到 Expect 中,创建该链接才能使得
|
|
|
+ Binutils 和 GCC 通过测试套件测试。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/usr/bin/perl</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>Many Perl scripts hard-code this path to the
|
|
|
- <command>perl</command> program.</para>
|
|
|
+ <para>许多 Perl 脚本硬编码
|
|
|
+ <command>perl</command> 程序的路径。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/usr/lib/libgcc_s.so{,.1}</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>Glibc needs this for the pthreads library to work.</para>
|
|
|
+ <para>Glibc 需要它才能让 pthread 库正常工作。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/usr/lib/libstdc++{,.6}</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>This is needed by several tests in Glibc's test suite, as well as
|
|
|
- for C++ support in GMP.</para>
|
|
|
+ <para>Glibc 测试套件中的若干项测试需要它, 另外构建 GMP 的 C++
|
|
|
+ 支持也需要它。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
<!--
|
|
@@ -179,37 +194,51 @@ ln -sv bash /bin/sh</userinput></screen>
|
|
|
<varlistentry revision="systemd">
|
|
|
<term><parameter><filename>/usr/lib/lib{blkid,lzma,mount,uuid}.{a,la,so*}</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>These links prevent systemd utilities from acquiring an
|
|
|
+ <!--para>These links prevent systemd utilities from acquiring an
|
|
|
unnecessary reference to the
|
|
|
- <filename class="directory">/tools</filename> directory.</para>
|
|
|
+ <filename class="directory">/tools</filename> directory.</para-->
|
|
|
+ <para>这些链接防止 systemd 工具获得指向
|
|
|
+ <filename class="directory">/tools</filename>
|
|
|
+ 目录的不必要的引用。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
<varlistentry>
|
|
|
<term><parameter><filename>/bin/sh</filename></parameter></term>
|
|
|
<listitem>
|
|
|
- <para>Many shell scripts hard-code <filename>/bin/sh</filename>.</para>
|
|
|
+ <para>许多 shell 脚本硬编码路径
|
|
|
+ <filename>/bin/sh</filename>。</para>
|
|
|
</listitem>
|
|
|
</varlistentry>
|
|
|
|
|
|
</variablelist>
|
|
|
|
|
|
- <para>Historically, Linux maintains a list of the mounted file systems in the
|
|
|
+ <!--para>Historically, Linux maintains a list of the mounted file systems in the
|
|
|
file <filename>/etc/mtab</filename>. Modern kernels maintain this list
|
|
|
internally and exposes it to the user via the <filename
|
|
|
class="directory">/proc</filename> filesystem. To satisfy utilities that
|
|
|
expect the presence of <filename>/etc/mtab</filename>, create the following
|
|
|
- symbolic link:</para>
|
|
|
+ symbolic link:</para-->
|
|
|
+ <para>历史上,Linux 在 <filename>/etc/mtab</filename>
|
|
|
+ 维护已经挂载的文件系统的列表。现代内核在内部维护该列表,并通过
|
|
|
+ <filename class="directory">/proc</filename> 文件系统将它展示给用户。
|
|
|
+ 为了满足那些需要 <filename>/etc/mtab</filename> 的工具,
|
|
|
+ 执行下列命令,创建符号链接:</para>
|
|
|
|
|
|
<screen><userinput>ln -sv /proc/self/mounts /etc/mtab</userinput></screen>
|
|
|
|
|
|
- <para>In order for user <systemitem class="username">root</systemitem> to be
|
|
|
+ <!--para>In order for user <systemitem class="username">root</systemitem> to be
|
|
|
able to login and for the name <quote>root</quote> to be recognized, there
|
|
|
must be relevant entries in the <filename>/etc/passwd</filename> and
|
|
|
<filename>/etc/group</filename> files.</para>
|
|
|
|
|
|
<para>Create the <filename>/etc/passwd</filename> file by running the following
|
|
|
- command:</para>
|
|
|
+ command:</para-->
|
|
|
+ <para>为了使得 <systemitem class="username">root</systemitem>
|
|
|
+ 能正常登录,而且它的用户名能被正常识别,必须在文件
|
|
|
+ <filename>/etc/passwd</filename> 和 <filename>/etc/groups</filename>
|
|
|
+ 中写入相关的条目。</para>
|
|
|
+ <para>执行下列命令创建 <filename>/etc/passwd</filename> 文件:</para>
|
|
|
|
|
|
<screen revision="sysv"><userinput>cat > /etc/passwd << "EOF"
|
|
|
<literal>root:x:0:0:root:/root:/bin/bash
|
|
@@ -235,11 +264,14 @@ systemd-coredump:x:79:79:systemd Core Dumper:/:/bin/false
|
|
|
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false</literal>
|
|
|
EOF</userinput></screen>
|
|
|
|
|
|
- <para>The actual password for <systemitem class="username">root</systemitem>
|
|
|
- (the <quote>x</quote> used here is just a placeholder) will be set later.</para>
|
|
|
+ <!--para>The actual password for <systemitem class="username">root</systemitem>
|
|
|
+ (the <quote>x</quote> used here is just a placeholder) will be set later.</para-->
|
|
|
+ <para>我们以后再设置 <systemitem class="username">root</systemitem>
|
|
|
+ 用户的实际密码(这里的 <quote>x</quote> 只是一个占位符)。</para>
|
|
|
|
|
|
- <para>Create the <filename>/etc/group</filename> file by running the following
|
|
|
- command:</para>
|
|
|
+ <!--para>Create the <filename>/etc/group</filename> file by running the following
|
|
|
+ command:</para-->
|
|
|
+ <para>执行下列命令,创建 <filename>/etc/group</filename> 文件:</para>
|
|
|
|
|
|
<screen revision="sysv"><userinput>cat > /etc/group << "EOF"
|
|
|
<literal>root:x:0:
|
|
@@ -302,7 +334,7 @@ nogroup:x:99:
|
|
|
users:x:999:</literal>
|
|
|
EOF</userinput></screen>
|
|
|
|
|
|
- <para>The created groups are not part of any standard—they are groups
|
|
|
+ <!--para>The created groups are not part of any standard—they are groups
|
|
|
decided on in part by the requirements of the Udev configuration in this
|
|
|
chapter, and in part by common convention employed by a number of existing
|
|
|
Linux distributions. In addition, some test suites rely on specific users
|
|
@@ -312,44 +344,77 @@ EOF</userinput></screen>
|
|
|
a group <systemitem class="groupname">bin</systemitem> with a GID of 1 be
|
|
|
present. All other group names and GIDs can be chosen freely by the system
|
|
|
administrator since well-written programs do not depend on GID numbers, but
|
|
|
- rather use the group's name.</para>
|
|
|
-
|
|
|
- <para>To remove the <quote>I have no name!</quote> prompt, start a new
|
|
|
+ rather use the group's name.</para-->
|
|
|
+ <para>这里创建的用户组并不属于任何标准 —— 它们一部分是为了满足本章中
|
|
|
+ Udev 配置的需要,另一部分借鉴了一些 Linux 发行版的通用惯例。
|
|
|
+ 另外,某些测试套件需要特定的用户或组。Linux Standard Base
|
|
|
+ (LSB,可以在 <ulink url="http://www.linuxbase.org"/> 查看)标准
|
|
|
+ 只推荐以组 ID 0 创建用户组
|
|
|
+ <systemitem class="groupname">root</systemitem>,
|
|
|
+ 以及以组 ID 1 创建用户组
|
|
|
+ <systemitem class="groupname">bin</systemitem>,
|
|
|
+ 其他组名和组 ID 由系统管理员自由分配,因为好的程序不会依赖组 ID 数字,
|
|
|
+ 而是使用组名。</para>
|
|
|
+
|
|
|
+ <!--para>To remove the <quote>I have no name!</quote> prompt, start a new
|
|
|
shell. Since a full Glibc was installed in <xref
|
|
|
linkend="chapter-temporary-tools"/> and the
|
|
|
<filename>/etc/passwd</filename> and <filename>/etc/group</filename>
|
|
|
files have been created, user name and group name resolution will now
|
|
|
- work:</para>
|
|
|
+ work:</para-->
|
|
|
+ <para>为了移除 <quote>I have no name!</quote> 提示符,需要打开一个新
|
|
|
+ shell。由于在 <xref linkend="chapter-temporary-tools"/>
|
|
|
+ 中已经安装了一份完整的 Glibc,而且刚才创建了文件
|
|
|
+ <filename>/etc/passwd</filename> 和 <filename>/etc/group</filename>,
|
|
|
+ 用户名和组名现在就可以正常解析了。</para>
|
|
|
|
|
|
<screen role="nodump"><userinput>exec /tools/bin/bash --login +h</userinput></screen>
|
|
|
|
|
|
- <para>Note the use of the <parameter>+h</parameter> directive. This tells
|
|
|
+ <!--para>Note the use of the <parameter>+h</parameter> directive. This tells
|
|
|
<command>bash</command> not to use its internal path hashing. Without this
|
|
|
directive, <command>bash</command> would remember the paths to binaries it has
|
|
|
executed. To ensure the use of the newly compiled binaries as soon as they are
|
|
|
installed, the <parameter>+h</parameter> directive will be used for the duration
|
|
|
- of this chapter.</para>
|
|
|
-
|
|
|
- <para>The <command>login</command>, <command>agetty</command>, and
|
|
|
+ of this chapter.</para-->
|
|
|
+ <para>注意这里使用了 <parameter>+h</parameter> 参数,
|
|
|
+ 它告诉 <command>bash</command> 不要使用内部的路径散列机制。
|
|
|
+ 如果没有指定该参数,<command>bash</command> 会记忆它执行过程序的路径。
|
|
|
+ 为了在安装新编译好的程序后马上使用它们,在本章中总是使用
|
|
|
+ <parameter>+h</parameter>。</para>
|
|
|
+
|
|
|
+ <!--para>The <command>login</command>, <command>agetty</command>, and
|
|
|
<command>init</command> programs (and others) use a number of log
|
|
|
files to record information such as who was logged into the system and
|
|
|
when. However, these programs will not write to the log files if they
|
|
|
do not already exist. Initialize the log files and give them
|
|
|
- proper permissions:</para>
|
|
|
+ proper permissions:</para-->
|
|
|
+ <para><command>login</command>、<command>agetty</command> 和
|
|
|
+ <command>init</command> 等程序使用一些日志文件,
|
|
|
+ 以记录登录系统的用户和登录时间等信息。
|
|
|
+ 然而,这些程序不会创建不存在的日志文件。初始化日志文件,
|
|
|
+ 并为它们设置合适的权限:</para>
|
|
|
|
|
|
<screen><userinput>touch /var/log/{btmp,lastlog,faillog,wtmp}
|
|
|
chgrp -v utmp /var/log/lastlog
|
|
|
chmod -v 664 /var/log/lastlog
|
|
|
chmod -v 600 /var/log/btmp</userinput></screen>
|
|
|
|
|
|
- <para>The <filename>/var/log/wtmp</filename> file records all logins and
|
|
|
+ <!--para>The <filename>/var/log/wtmp</filename> file records all logins and
|
|
|
logouts. The <filename>/var/log/lastlog</filename> file records when each
|
|
|
user last logged in. The <filename>/var/log/faillog</filename> file records
|
|
|
failed login attempts. The <filename>/var/log/btmp</filename> file records
|
|
|
- the bad login attempts.</para>
|
|
|
-
|
|
|
- <note><para>The <filename>/run/utmp</filename> file records the users that
|
|
|
+ the bad login attempts.</para-->
|
|
|
+ <para>文件 <filename>/var/log/wtmp</filename> 记录所有的登录和登出,
|
|
|
+ 文件 <filename>/var/log/lastlog</filename>
|
|
|
+ 记录每个用户最后登录的时间,文件 <filename>/var/log/faillog</filename>
|
|
|
+ 记录所有失败的登录尝试,文件 <filename>/var/log/btmp</filename>
|
|
|
+ 记录所有错误的登录尝试。</para>
|
|
|
+
|
|
|
+ <note><!--para>The <filename>/run/utmp</filename> file records the users that
|
|
|
are currently logged in. This file is created dynamically in the boot
|
|
|
- scripts.</para></note>
|
|
|
+ scripts.</para-->
|
|
|
+ <para> 文件 <filename>/run/utmp</filename> 记录当前登录的用户,
|
|
|
+ 它由启动脚本动态创建。</para>
|
|
|
+ </note>
|
|
|
|
|
|
</sect1>
|