Linux 文件系统层次结构

版本 0.65

Binh Nguyen

2004-07-30

本文档概述了根据 FSSTND v2.3 最终版(2004 年 1 月 29 日)的要求和指南,以及其在任意系统上的实际实现,Linux 操作系统下文件和目录放置的要求和指南。本文档旨在供 Linux 社区所有成员访问,与发行版无关,并旨在讨论 FSSTND 的影响,以及它如何成功地提高了应用程序、系统管理工具、开发工具和脚本的支持互操作性效率,以及这些系统文档的更大统一性。

版权所有 2003 Binh Nguyen

商标归其各自所有者所有。

根据 GNU 自由文档许可证 1.2 版的条款,允许复制、分发和/或修改本文档;没有不变章节,没有封面文本,也没有封底文本。许可证的副本包含在题为“GNU 自由文档许可证”的部分中。


目录
提供源代码和预格式化版本
1. Linux 文件系统层次结构
1.1. 前言
1.2. 根目录
1.3. /bin
1.4. /boot
1.5. /dev
1.6. /etc
1.7. /home
1.8. /initrd
1.9. /lib
1.10. /lost+found
1.11. /media
1.12. /mnt
1.13. /opt
1.14. /proc
1.15. /root
1.16. /sbin
1.17. /usr
1.18. /var
1.19. /srv
1.20. /tmp
词汇表
A. UNIX System V 信号
B. 来源
C. 关于作者
D. 贡献者
E. 免责声明
F. 捐赠
G. 反馈
H. GNU 自由文档许可证
H.1. 序言
H.2. 适用性和定义
H.3. 逐字复制
H.4. 批量复制
H.5. 修改
H.6. 合并文档
H.7. 文档集合
H.8. 与独立作品的聚合
H.9. 翻译
H.10. 终止
H.11. 本许可证的未来修订
H.12. 附录:如何将此许可证用于您的文档

提供源代码和预格式化版本

本书的源代码和其他机器可读格式可以在 Linux 文档项目主页 http://www.tldp.org 上找到。本文档的最新版本可以在 http://cvsview.tldp.org/index.cgi/LDP/guide/docbook/Linux-Filesystem-Hierarchy/ 找到


第 1 章. Linux 文件系统层次结构

1.1. 前言

当从另一个操作系统(如 Microsoft Windows)迁移到另一个操作系统时;最终用户会受到深刻影响的一件事将是文件系统之间的差异。

什么是文件系统?

文件系统是操作系统用来跟踪磁盘或分区上文件的方法和数据结构;也就是说,文件在磁盘上组织的方式。这个词也用来指代用于存储文件的分区或磁盘,或者文件系统的类型。因此,人们可能会说我有两个文件系统,意思是有一个用于存储文件的两个分区,或者正在使用扩展文件系统,意思是文件系统的类型。

磁盘或分区与其包含的文件系统之间的区别很重要。一些程序(包括,合理地,创建文件系统的程序)直接在磁盘或分区的原始扇区上操作;如果那里存在文件系统,它将被破坏或严重损坏。大多数程序在文件系统上操作,因此无法在不包含文件系统(或包含错误类型的文件系统)的分区上工作。

在分区或磁盘可以用作文件系统之前,需要对其进行初始化,并且需要将簿记数据结构写入磁盘。此过程称为创建文件系统

大多数 UNIX 文件系统类型都具有类似的总体结构,尽管确切的细节差异很大。中心概念是超级块inode数据块目录块间接块。超级块包含有关文件系统整体的信息,例如其大小(此处的确切信息取决于文件系统)。 inode 包含有关文件的所有信息,除了其名称。名称存储在目录中,以及 inode 的编号。目录条目由文件名和表示文件的 inode 编号组成。 inode 包含多个数据块的编号,这些数据块用于存储文件中的数据。但是,inode 中只有几个数据块编号的空间,如果需要更多空间,则会动态分配更多指向数据块的指针的空间。这些动态分配的块是间接块;名称表示为了找到数据块,必须首先在间接块中找到其编号。

与 UNIX 一样,Linux 选择具有单个分层目录结构。一切都从根目录 / 开始,然后扩展到子目录,而不是拥有所谓的“驱动器”。在 Windows 环境中,人们可以将文件放在几乎任何地方:C 盘、D 盘、E 盘等。这种文件系统称为分层结构,由程序本身(程序目录)而不是操作系统管理。另一方面,Linux 根据目录对启动过程的重要性,从根目录 / 开始降序排列目录。

如果您想知道为什么 Linux 使用正斜杠 / 而不是像 Windows 中那样的反斜杠 \,那是因为它只是遵循 UNIX 传统。像 Unix 一样,Linux 也选择区分大小写。这意味着字符的大小写(大写或非大写)变得非常重要。因此,This 与 THIS 不同。此功能解释了新用户遇到的相当大一部分问题,尤其是在通过可移动磁盘介质(如软盘)或通过 FTP 等方式进行文件传输操作期间。

文件系统顺序特定于文件的功能,而不是其程序上下文(大多数 Linux 文件系统是“第二扩展文件系统”,简称“EXT2”(也称为“ext2fs”或“extfs2”),或者是此文件系统的子集,例如 ext3 和 Reiserfs)。操作系统在此文件系统中确定程序将其文件存储到哪个目录中。

如果您在 Windows 中安装程序,它通常会将其大多数文件存储在其自己的目录结构中。例如,帮助文件可能位于 C:\Program Files\[程序名称]\ 或 C:\Program Files\[程序名称]\help 或 C:\Program Files\[程序名称]\humpty\dumpty\doo 中。在 Linux 中,程序将其文档放在 /usr/share/doc/[程序名称] 中,手册页放在 /usr/share/man/man[1-9] 中,信息页放在 /usr/share/info 中。它们被合并到系统层次结构中。

正如所有 Linux 用户都知道的那样,除非您挂载分区或设备,否则系统不知道该分区或设备的存在。这可能看起来不是提供对分区或设备访问的最简单方法,但是与其他操作系统相比,它提供了更大的灵活性。这种布局(称为统一文件系统)确实比 Windows 使用的方法提供了几个优势。让我们以 /usr 目录为例。根目录的此子目录包含大多数系统可执行文件。使用 Linux 文件系统,您可以选择从另一个分区甚至另一台机器上通过网络挂载它,使用无数的协议,例如 NFS (Sun)、Coda (CMU) 或 AFS (IBM)。底层系统将不会也不需要知道差异。 /usr 目录的存在是完全透明的。它看起来像是本地目录结构的一部分。

合规性要求

 +---------+-----------------+-------------+
 |         | shareable       | unshareable |
 +---------+-----------------+-------------+
 |static   | /usr            | /etc        |
 |         | /opt            | /boot       |
 +---------+-----------------+-------------+
 |variable | /var/mail       | /var/run    |
 |         | /var/spool/news | /var/lock   |
 +---------+-----------------+-------------+

 "Shareable" files are defined as those that can be stored on one host and
 used on others. "Unshareable" files are those that are not shareable. For
 example, the files in user home directories are shareable whereas device
 lock files are not. "Static" files include binaries, libraries,
 documentation files and other files that do not change without system
 administrator intervention. "Variable" files are defined as files that
 are not static.
 

这种统一文件系统的另一个原因是 Linux 在运行时使用系统内存缓存大量磁盘访问,以加速这些进程。因此,至关重要的是在系统关闭之前刷新这些缓冲区(将其内容写入磁盘)。否则,文件将处于不确定的状态,这当然是非常糟糕的事情。刷新是通过在正确的系统关闭期间“卸载”分区来实现的。换句话说,不要在系统运行时关闭系统!您可能经常侥幸逃脱,因为 Linux 文件系统非常健壮,但您也可能对重要文件造成严重破坏。只需按 ctrl-alt-del 或使用正确的命令(例如 shutdown、poweroff、init 0)。这将以一种体面的方式关闭系统,从而保证文件的完整性。

我们 Linux 社区中的许多人已经理所当然地认为存在关于 Linux 的优秀书籍和文档,例如 Linux 文档项目制作的那些。我们已经习惯于将来自不同来源(如 Linux FTP 站点和发行版 CD-ROM)的各种软件包平滑地集成在一起。我们已经接受我们都知道在任何运行 Linux 的机器上都可以在哪里找到像 mount 这样的关键文件。我们还理所当然地认为基于 CD-ROM 的发行版可以直接从 CD 运行,并且只消耗少量的物理硬盘或 RAM 磁盘来存储一些可变文件,如 /etc/passwd 等。情况并非总是如此。

在 Linux 的青春期(90 年代初中期),每个发行商都有自己喜欢的方案来定位目录层次结构中的文件。不幸的是,这导致了很多问题。Linux 文件系统结构是一个文档,旨在帮助结束这种混乱局面。通常,创建此文档的组或文档本身被称为 FSSTND。这是“文件系统标准”的缩写。该文档已帮助标准化了各地 Linux 系统上文件系统的布局。自该标准的最初版本发布以来,大多数发行商已经全部或部分地采用了它,这极大地造福了所有 Linux 用户。

自该标准的第一个草案以来,FSSTND 项目一直由 Daniel Quinlan 协调,该标准的开发是通过一群开发人员和 Linux 爱好者的共识进行的。 FSSTND 小组着手完成许多具体目标。第一个目标是解决当时现有发行版中存在的一些问题。那时,不可能拥有一个可共享的 /usr 分区,/bin 和 /usr/bin 之间没有明确的区别,不可能设置无盘工作站,并且关于哪些文件应该放在哪里存在普遍的混乱。第二个目标是确保与 Linux 和其他类 UNIX 操作系统中已使用的实际标准保持一定的合理兼容性。最后,该标准必须获得 Linux 社区内的开发人员、发行商和用户的广泛认可。没有这种支持,该标准将毫无意义,只会成为另一种布局文件系统的方式。

幸运的是,FSSTND 已经成功了,尽管 FSSTND 项目也有一些没有实现的目标。 FSSTND 不试图模仿任何特定的商业 UNIX 操作系统(例如 SunOS、AIX 等)的方案。此外,对于 FSSTND 涵盖的许多文件,该标准并未规定这些文件是否应该存在,而只是规定了如果存在这些文件应该放在哪里。最后,对于大多数文件,FSSTND 不试图规定文件内容格式。(当几个不同的软件包可能需要知道文件格式才能协同工作时,有一些特定的例外。例如,包含持有锁的进程的进程 ID 的锁文件。)总体目标是确定常见文件可以找到的位置(如果它们存在于特定机器上)。 FSSTND 项目始于 1993 年 8 月初。从那时起,该文档进行了多次公开修订。最新的 v2.3 版本于 2004 年 1 月 29 日发布。

如果您问“这一切的目的是什么?好吧,答案取决于您是谁。如果您是 Linux 用户,并且您不管理自己的系统,那么 FSSTND 可确保如果您已经有在另一台 Linux 机器上的经验,您将能够找到您期望程序所在的位置。它还确保您可能拥有的任何文档都有意义。此外,如果您以前已经有一些 Unix 经验,那么 FSSTND 不应与您当前使用的系统相差太大,但有一些例外。也许最重要的是,标准的制定使 Linux 达到了一种成熟的水平,作者和商业应用程序开发人员觉得他们可以支持。

如果您管理自己的机器,那么您将获得上述 FSSTND 的所有好处。如果您遇到问题,您也可能会对其他人为您提供支持的能力感到更安全。此外,从理论上讲,定期升级到您的系统会更容易。由于文件位置存在约定的标准,软件包维护人员可以提供升级说明,这些说明不会在您的系统中留下额外的旧文件,占用宝贵的磁盘空间。 FSSTND 还意味着来自那些为您编译和安装源代码软件包的提供商的支持更多。例如,提供商知道 sed 的可执行文件在 Linux 机器上的位置,并且可以在其安装脚本或 Makefile 中使用它。

如果您运行大型网络,FSSTND 可能会减轻您的许多 NFS 难题,因为它专门解决了以前使 /usr 的共享实现不切实际的问题。如果您是发行商,那么您将受到 Linux FSSTND 的最大影响。您可能需要做一些额外的工作来确保您的发行版符合 FSSTND,但您的用户(以及您的业务)将从中受益。如果您的系统符合标准,则第三方附加软件包(以及您自己的软件包)将与您的系统平滑集成。您的用户当然将获得上述所有好处,并且您的许多支持难题将得到缓解。您将受益于已投入到 FSSTND 中的所有讨论和思考,并避免自己设计文件系统结构时遇到的许多陷阱。如果您遵守 FSSTND,您还将能够利用围绕 FSSTND 设计的各种功能。例如,FSSTND 使包含除 / 和 /var 目录中的某些文件之外的所有内容的“live” CD-ROM 成为可能。如果您为 Linux 编写文档,FSSTND 使这项工作变得容易得多,这对 Linux 社区来说是有意义的。您不再需要担心一个发行版与另一个发行版上锁文件的具体位置,也不必被迫编写仅对特定发行版用户有用的文档。 FSSTND 至少部分地促成了最近 Linux 书籍出版的爆炸式增长。

如果您是开发人员,FSSTND 的存在极大地缓解了潜在问题的可能性。您可以知道重要系统二进制文件的位置,因此您可以从程序或 shell 脚本内部使用它们。支持用户也变得容易得多,因为在解决支持问题时,您不必担心这些二进制文件的位置等问题。如果您是需要与系统其余部分集成的程序的开发人员,FSSTND 可确保您可以确定实现此目标的步骤。例如,诸如 kermit 之类的访问串行端口的应用程序需要知道它们可以独占访问 TTY 设备。 FSSTND 规定了一种通用的方法来做到这一点,以便所有兼容的应用程序可以协同工作。这样您就可以专注于为 Linux 制作更多出色的软件,而不必担心如何检测和处理 Linux 风格的差异。 Linux 社区对 FSSTND 的广泛接受对于标准和操作系统的成功至关重要。几乎每个现代发行版都符合 Linux FSSTND。如果您的实现至少部分不符合 FSSTND,那么它可能非常旧,或者您自己构建的。 FSSTND 本身包含旨在符合 FSSTND 的一些发行版的列表。但是,已知有些发行版在 FSSTND 的实现中偷工减料。

这绝不意味着标准本身是完整的。仍然存在未解决的问题,例如与体系结构无关的脚本和数据文件 /usr/share 的组织。到目前为止,i386 一直是 Linux 的主要平台,因此对此类文件进行标准化的需求并不存在。

将 Linux 快速移植到其他体系结构(MC680x0、Alpha、MIPS、PowerPC)表明这个问题很快就需要解决。另一个正在讨论的问题是像 SVR4 中那样创建 /opt 目录。这种目录的目标是为大型商业或第三方软件包提供一个安装自己的位置,而无需担心 FSSTND 对其他目录层次结构的要求。 FSSTND 为 Linux 社区提供了优秀的参考文档,并已被证明是 Linux 成熟的重要因素。随着 Linux 的不断发展,FSSTND 也会随之发展。

现在,我们已经了解了事物应该如何,让我们看看现实世界。您将看到,Linux 上这个概念的实现并不完美,并且由于 Linux 总是吸引那些往往相当固执己见的个人主义者,因此在用户中一直存在争议,例如某些文件应该放入哪个目录。随着不同发行版的出现,混乱再次降临到我们身上。一些发行版将外部介质的挂载目录放在 / 目录中,另一些放在 /mnt 中。基于 Red Hat 的发行版具有用于配置输入和网络设备的配置文件的 /etc/sysconfig 子层次结构。其他发行版根本没有此目录,而是将相应的文件放在其他位置,甚至使用完全不同的机制来执行相同的操作。一些发行版将 KDE 放在 /opt/ 中,另一些放在 /usr 中。

但即使在给定的文件系统层次结构中,也存在不一致之处。例如,即使这从来不是 XFree86 小组的意图,XFree86 实际上确实有自己的目录层次结构。

只要您自己编译程序,这些问题就不会显现出来。您可以使配置脚本或 Makefile 适应您的系统配置或您的偏好。但是,如果您安装预编译的软件包(如 RPM),情况就不同了。通常,这些软件包无法从一个文件系统层次结构适应到另一个文件系统层次结构。更糟糕的是:某些 RPM 甚至可能创建自己的层次结构。如果您在 Mandrake 系统上安装 SuSE Linux 发行版的 KDE RPM,则二进制文件将放入 /opt/kde2/bin 中。因此它将无法工作,因为 Mandrake 期望它位于 /usr/bin 中。当然,有办法规避这个问题,但目前的情况显然是站不住脚的。因此,所有主要的 Linux 发行商都加入了 Linux 标准库项目,该项目正试图为 Linux 发行版创建通用标准。这并非易事,因为更改文件系统层次结构意味着发行商的大量工作,因此每个发行商都试图推动一个标准,该标准将允许他们尽可能多地保留自己的层次结构。 LSB 也将包含文件系统层次标准项目(FHS,前 FSSTND)提出的建议。


1.2. 根目录

为了符合 FSSTND,/ 中需要以下目录或指向目录的符号链接。

       /bin       Essential command binaries
       /boot      Static files of the boot loader
       /dev       Device files
       /etc       Host-specific system configuration
       /lib       Essential shared libraries and kernel modules
       /media     Mount point for removeable media
       /mnt       Mount point for mounting a filesystem temporarily
       /opt       Add-on application software packages
       /sbin      Essential system binaries
       /srv       Data for services provided by this system
       /tmp       Temporary files
       /usr       Secondary hierarchy
       /var       Variable data
       

如果安装了相应的子系统,则 / 中必须有以下目录或指向目录的符号链接

     / -- the root directory
     /home User home directories (optional)
     /lib<qual> Alternate format essential shared libraries
                      (optional)
     /root Home directory for the root user (optional)
     

上面列出的每个目录都在本文档后面的单独小节中详细描述。

参考系统将基于 Debian 3.0r0 (Woody),2.4.18 内核,配置为 Redhat kernel-2.4.18-i686.config 文件。

硬件

  • Intel Celeron 766 处理器

  • MSI MS-6309 V.2.0 主板

  • 512MB PQI PC133 SDRAM

  • 16x Lite-On LTD-165H DVD-ROM

  • 40x24x10 Sony CRX175A1 CD-RW

  • NVIDIA RIVA 32MB TNT2 M64

  • D-Link DFE-530TX 10/100 NIC

  • Realtek RTL8029(AS) 10 NIC

  • Lucent Mars2 Linmodem

  • C-Media CMI8738 PCI 音频设备

  • Miro DC-30 VIVO

  • Aopen KF-45A Miditower 机箱

  • Acer Accufeel 键盘

  • Genius Netscroll+ 鼠标

  • Compaq MV500 Presario 显示器

软件

  • Windows XP on /dev/hda1

  • FreeBSD 4.2 on /dev/hda2

  • Redhat 8.0 on /dev/hda5

  • Debian 3.0r0 on /dev/hda6

  • Mandrake 9.1 on /dev/hda7

  • Swap partition on /dev/hda8

众所周知,Linux 文件系统以 /(根目录)开头。所有其他目录都是此目录的“子目录”。根文件系统所在的分区在启动期间首先挂载,如果系统找不到它,系统将无法启动。在我们的参考系统上,根目录包含以下子目录

bin/ dev/ home/ lost+found/ proc/ sbin/ usr/ cdrom/ opt/ vmlinuz boot/ etc/ lib/ mnt/ root/ tmp/ var/ dvd/ floppy/ initrd/ /tftpboot

过去,它也是 'root' 的主目录,但现在他已被赋予了自己的目录,原因将在本文档后面解释。


1.3. /bin

与 /sbin 不同,bin 目录包含几个有用的命令,系统管理员和非特权用户都可以使用它们。它通常包含 shell,如 bash、csh 等...以及常用命令,如 cp、mv、rm、cat、ls。因此,与 /usr/bin 相比,此目录中的二进制文件被认为是必不可少的。原因是它包含即使仅挂载包含 / 的分区也必须可用的基本系统程序。如果您需要修复其他分区但无法访问共享目录(即,您处于单用户模式,因此没有网络访问),则可能会出现这种情况。它还包含启动脚本可能依赖的程序。

符合 FSSTND 意味着 /bin 中没有子目录,并且以下命令或指向命令的符号链接位于此处。

cat      Utility to concatenate files to standard output
chgrp    Utility to change file group ownership
chmod    Utility to change file access permissions
chown    Utility to change file owner and group
cp       Utility to copy files and directories
date     Utility to print or set the system data and time
dd       Utility to convert and copy a file
df       Utility to report filesystem disk space usage
dmesg    Utility to print or control the kernel message buffer
echo     Utility to display a line of text
false    Utility to do nothing, unsuccessfully
hostname Utility to show or set the system's host name
kill     Utility to send signals to processes
ln       Utility to make links between files
login    Utility to begin a session on the system
ls       Utility to list directory contents
mkdir    Utility to make directories
mknod    Utility to make block or character special files
more     Utility to page through text
mount    Utility to mount a filesystem
mv       Utility to move/rename files
ps       Utility to report process status
pwd      Utility to print name of current working directory
rm       Utility to remove files or directories
rmdir    Utility to remove empty directories
sed      The `sed' stream editor
sh       The Bourne command shell
stty     Utility to change and print terminal line settings
su       Utility to change user ID
sync     Utility to flush filesystem buffers
true     Utility to do nothing, successfully
umount   Utility to unmount file systems
uname    Utility to print system information

If /bin/sh is not a true Bourne shell, it must be a hard or symbolic link to
the real shell command.

The rationale behind this is because sh and bash mightn't necessarily behave 
in the same manner. The use of a symbolic link also allows users to easily
see that /bin/sh is not a true Bourne shell.

The [ and test commands must be placed together in either /bin or /usr/bin.

The requirement for the [ and test commands to be included as binaries
(even if implemented internally by the shell) is shared with the POSIX.2
standard.

The following programs, or symbolic links to programs, must be in /bin if the
corresponding subsystem is installed:

csh     The C shell (optional)
ed      The `ed' editor (optional)
tar     The tar archiving utility (optional)
cpio    The cpio archiving utility (optional)
gzip    The GNU compression utility (optional)
gunzip  The GNU uncompression utility (optional)
zcat    The GNU uncompression utility (optional)
netstat The network statistics utility (optional)
ping    The ICMP network test utility (optional)

If the gunzip and zcat programs exist, they must be symbolic or hard links to
gzip. /bin/csh may be a symbolic link to /bin/tcsh or /usr/bin/tcsh.

The tar, gzip and cpio commands have been added to make restoration of a 
system possible (provided that / is intact).

Conversely, if no restoration from the root partition is ever expected,
then these binaries might be omitted (e.g., a ROM chip root, mounting /usr
through NFS). If restoration of a system is planned through the network,
then ftp or tftp (along with everything necessary to get an ftp connection)
must be available on the root partition.


1.4. /boot

此目录包含启动过程所需的一切,除了启动时不需要的配置文件(其中最著名的是属于 GRUB 引导加载程序的那些)和映射安装程序。因此,/boot 目录存储在内核开始执行用户模式程序之前使用的数据。这可能包括冗余(备份)主引导记录、扇区/系统映射文件、内核和其他重要的启动文件以及不由手动直接编辑的数据。安排引导加载程序能够引导文件的程序放在 /sbin 中。引导加载程序的配置文件放在 /etc 中。系统内核位于 / 或 /boot 中(或如 Debian 下的 /boot 中,但实际上按照 FSSTND 符号链接到 / 中)。

/boot/boot.0300

备份主引导记录。

/boot/boot.b

这作为基本引导扇区安装。在大多数现代发行版的情况下,它实际上是指向四个文件之一的符号链接 /boot/boot-bmp.b、/boot/boot-menu.b、/boot/boot-text.b、/boot/boot-compat.b,允许用户更改启动模式,使其利用启动画面、简单菜单、基于文本的界面或最小引导加载程序以确保兼容性。在每种情况下,都需要重新安装 lilo 才能完成更改。要更改实际的“启动徽标”,您可以使用 fblogo 等实用程序或更精细的 bootsplash。

/boot/chain.b

用于引导非 Linux 操作系统。

/boot/config-kernel-version

已安装的内核配置。当在其他系统或设备模块上编译内核时,此文件最有用。以下是文件内容的小样本。

        CONFIG_X86=y
        CONFIG_MICROCODE=m
        CONFIG_X86_MSR=m
        CONFIG_MATH_EMULATION=y
        CONFIG_MTRR=y
        CONFIG_MODULES=y
        CONFIG_MODVERSIONS=y
        CONFIG_SCSI_DEBUG=m
        CONFIG_I2O=m
        CONFIG_ARCNET_ETH=y
        CONFIG_FMV18X=m
        CONFIG_HPLAN_PLUS=m
        CONFIG_ETH16I=m
        CONFIG_NE2000=m
        CONFIG_HISAX_HFC_PCI=y
        CONFIG_ISDN_DRV_AVMB1_C4=m
        CONFIG_USB_RIO500=m
        CONFIG_QUOTA=y
        CONFIG_AUTOFS_FS=m
        CONFIG_ADFS_FS=m
        CONFIG_AFFS_FS=m
        CONFIG_HFS_FS=m
        CONFIG_FAT_FS=y
        CONFIG_MSDOS_FS=y
        CONFIG_UMSDOS_FS=m
        CONFIG_FBCON_VGA=m
        CONFIG_FONT_8x8=y
        CONFIG_FONT_8x16=y
        CONFIG_SOUND=m
        CONFIG_SOUND_CMPCI=m
        CONFIG_AEDSP16=m
  

如您所见,它相当简单。该行以配置选项开头,以及它是否配置为内核的一部分、模块或根本未配置。以 # 符号开头的行是注释,在处理过程中不会被解释。

/boot/os2_d.b

用于引导到 0S/2 操作系统。

/boot/map

包含内核的位置。

/boot/vmlinuz, /boot/vmlinuz-kernel-version

通常是内核或指向内核的符号链接。

/boot/grub

此子目录包含 GRUB 配置文件,包括启动图像和声音。 GRUB 是 GNU GRand Unified Bootloader,一个旨在彻底解决所有启动问题的项目。最有趣的功能之一是,您不必安装新的分区或内核,您可以在启动时通过 GRUB 控制台更改所有参数,因为它了解文件系统。

/boot/grub/device.map

将 /dev 中的设备映射到 grub 使用的设备。例如,(/dev/fd0) 由 /dev/fd0 表示,(hd0, 4) 由 /dev/hda5 引用。

/boot/grub/grub.conf, /boot/grub/menu.lst

Grub 配置文件。

/boot/grub/messages

Grub 启动欢迎消息。

/boot/grub/splash.xpm.gz

Grub 启动背景图像。


1.5. /dev

/dev 是特殊文件或设备文件的位置。这是一个非常有趣的目录,突出了 Linux 文件系统的一个重要方面 - 一切都是文件或目录。浏览此目录,您应该希望看到 hda1、hda2 等...,它们代表系统第一个主驱动器上的各个分区。 /dev/cdrom 和 /dev/fd0 代表您的 CD-ROM 驱动器和软盘驱动器。这可能看起来很奇怪,但如果您将文件的特性与硬件的特性进行比较,它就会变得有意义。两者都可以读取和写入。以 /dev/dsp 为例。此文件代表您的扬声器设备。写入此文件的任何数据都将重定向到您的扬声器。如果您尝试 'cat /boot/vmlinuz > /dev/dsp'(在正确配置的系统上),您应该在扬声器上听到一些声音。那是你的内核的声音!发送到 /dev/lp0 的文件将被打印。发送数据到 /dev/ttyS0 并从中读取数据将允许您与连接在那里的设备进行通信 - 例如,您的调制解调器。

大多数设备是块设备或字符设备;但是,也存在其他类型的设备,并且可以创建。一般来说,“块设备”是存储或保存数据的设备,“字符设备”可以被认为是传输或转移数据的设备。例如,软盘驱动器、硬盘驱动器和 CD-ROM 驱动器都是块设备,而串行端口、鼠标和并行打印机端口都是字符设备。存在某种命名方案,但在绝大多数情况下,这些方案完全不合逻辑。

total 724
lrwxrwxrwx    1 root     root           13 Sep 28 18:06 MAKEDEV -> /sbin/MAKEDEV
crw-rw----    1 root     audio     14,  14 Oct  7 16:26 admmidi0
crw-rw----    1 root     audio     14,  30 Oct  7 16:26 admmidi1
lrwxrwxrwx    1 root     root           11 Oct  7 16:26 amidi -> /dev/amidi0
crw-rw----    1 root     audio     14,  13 Oct  7 16:26 amidi0
crw-rw----    1 root     audio     14,  29 Oct  7 16:26 amidi1
crw-rw----    1 root     audio     14,  11 Oct  7 16:26 amixer0
crw-rw----    1 root     audio     14,  27 Oct  7 16:26 amixer1
drwxr-xr-x    2 root     root         4096 Sep 28 18:05 ataraid
lrwxrwxrwx    1 root     root           11 Oct  7 16:26 audio -> /dev/audio0
crw-rw----    1 root     audio     14,   4 Oct  7 16:26 audio0
crw-rw----    1 root     audio     14,  20 Oct  7 16:26 audio1
crw-rw----    1 root     audio     14,   7 Mar 15  2002 audioctl
lrwxrwxrwx    1 root     root            9 Oct 14 22:51 cdrom -> /dev/scd1
lrwxrwxrwx    1 root     root            9 Oct 14 22:52 cdrom1 -> /dev/scd0
crw-------    1 root     tty        5,   1 Jan 19 20:47 console
lrwxrwxrwx    1 root     root           11 Sep 28 18:06 core -> /proc/kcore
crw-rw----    1 root     audio     14,  10 Oct  7 16:26 dmfm0
crw-rw----    1 root     audio     14,  26 Oct  7 16:26 dmfm1
crw-rw----    1 root     audio     14,   9 Oct  7 16:26 dmmidi0
crw-rw----    1 root     audio     14,  25 Oct  7 16:26 dmmidi1
lrwxrwxrwx    1 root     root            9 Oct  7 16:26 dsp -> /dev/dsp0
crw-rw----    1 root     audio     14,   3 Oct  7 16:26 dsp0
crw-rw----    1 root     audio     14,  19 Oct  7 16:26 dsp1
crw--w----    1 root     video     29,   0 Mar 15  2002 fb0
crw--w----    1 root     video     29,   1 Mar 15  2002 fb0autodetect
crw--w----    1 root     video     29,   0 Mar 15  2002 fb0current
crw--w----    1 root     video     29,  32 Mar 15  2002 fb1
crw--w----    1 root     video     29,  33 Mar 15  2002 fb1autodetect
crw--w----    1 root     video     29,  32 Mar 15  2002 fb1current
lrwxrwxrwx    1 root     root           13 Sep 28 18:05 fd -> /proc/self/fd
brw-rw----    1 root     floppy     2,   0 Mar 15  2002 fd0
brw-rw----    1 root     floppy     2,   1 Mar 15  2002 fd1
crw--w--w-    1 root     root       1,   7 Sep 28 18:06 full
brw-rw----    1 root     disk       3,   0 Mar 15  2002 hda
brw-rw----    1 root     disk       3,  64 Mar 15  2002 hdb
brw-rw----    1 root     disk      22,   0 Mar 15  2002 hdc
brw-rw----    1 root     disk      22,  64 Mar 15  2002 hdd
drwxr-xr-x    2 root     root        12288 Sep 28 18:05 ida
prw-------    1 root     root            0 Jan 19 20:46 initctl
brw-rw----    1 root     disk       1, 250 Mar 15  2002 initrd
drwxr-xr-x    2 root     root         4096 Sep 28 18:05 input
crw-rw----    1 root     dialout   45, 128 Mar 15  2002 ippp0
crw-rw----    1 root     dialout   45,   0 Mar 15  2002 isdn0
crw-rw----    1 root     dialout   45,  64 Mar 15  2002 isdnctrl0
crw-rw----    1 root     dialout   45, 255 Mar 15  2002 isdninfo
crw-------    1 root     root      10,   4 Mar 15  2002 jbm
crw-r-----    1 root     kmem       1,   2 Sep 28 18:06 kmem
brw-rw----    1 root     cdrom     24,   0 Mar 15  2002 lmscd
crw-------    1 root     root      10,   0 Mar 15  2002 logibm
brw-rw----    1 root     disk       7,   0 Sep 28 18:06 loop0
brw-rw----    1 root     disk       7,   1 Sep 28 18:06 loop1
crw-rw----    1 root     lp         6,   0 Mar 15  2002 lp0
crw-rw----    1 root     lp         6,   1 Mar 15  2002 lp1
crw-rw----    1 root     lp         6,   2 Mar 15  2002 lp2
crw-r-----    1 root     kmem       1,   1 Sep 28 18:06 mem
lrwxrwxrwx    1 root     root           10 Oct  7 16:26 midi -> /dev/midi0
crw-rw----    1 root     audio     14,   2 Oct  7 16:26 midi0
crw-rw----    1 root     audio     14,  18 Oct  7 16:26 midi1
lrwxrwxrwx    1 root     root           11 Oct  7 16:26 mixer -> /dev/mixer0
crw-rw-rw-    1 root     root      14,   0 Nov 11 16:22 mixer0
crw-rw----    1 root     audio     14,  16 Oct  7 16:26 mixer1
lrwxrwxrwx    1 root     root           11 Oct  7 06:50 modem -> /dev/ttyLT0
crw-rw----    1 root     audio     31,   0 Mar 15  2002 mpu401data
crw-rw----    1 root     audio     31,   1 Mar 15  2002 mpu401stat
crw-rw----    1 root     audio     14,   8 Oct  7 16:26 music
crw-rw-rw-    1 root     root       1,   3 Sep 28 18:06 null
crw-rw-rw-    1 root     root     195,   0 Jan  6 03:03 nvidia0
crw-rw-rw-    1 root     root     195,   1 Jan  6 03:03 nvidia1
crw-rw-rw-    1 root     root     195, 255 Jan  6 03:03 nvidiactl
crw-rw----    1 root     lp         6,   0 Mar 15  2002 par0
crw-rw----    1 root     lp         6,   1 Mar 15  2002 par1
crw-rw----    1 root     lp         6,   2 Mar 15  2002 par2
-rw-r--r--    1 root     root       665509 Oct  7 16:41 pcm
crw-r-----    1 root     kmem       1,   4 Sep 28 18:06 port
crw-rw----    1 root     dip      108,   0 Sep 28 18:07 ppp
crw-------    1 root     root      10,   1 Mar 15  2002 psaux
crw-rw-rw-    1 root     root       1,   8 Sep 28 18:06 random
crw-rw----    1 root     root      10, 135 Mar 15  2002 rtc
brw-rw----    1 root     cdrom     11,   0 Mar 15  2002 scd0
brw-rw----    1 root     cdrom     11,   1 Mar 15  2002 scd1
brw-rw----    1 root     disk       8,   0 Mar 15  2002 sda
brw-rw----    1 root     disk       8,   1 Mar 15  2002 sda1
brw-rw----    1 root     disk       8,   2 Mar 15  2002 sda2
brw-rw----    1 root     disk       8,   3 Mar 15  2002 sda3
brw-rw----    1 root     disk       8,   4 Mar 15  2002 sda4
brw-rw----    1 root     disk       8,  16 Mar 15  2002 sdb
brw-rw----    1 root     disk       8,  17 Mar 15  2002 sdb1
brw-rw----    1 root     disk       8,  18 Mar 15  2002 sdb2
brw-rw----    1 root     disk       8,  19 Mar 15  2002 sdb3
brw-rw----    1 root     disk       8,  20 Mar 15  2002 sdb4
crw-rw----    1 root     audio     14,   1 Oct  7 16:26 sequencer
lrwxrwxrwx    1 root     root           10 Oct  7 16:26 sequencer2 -> /dev/music
lrwxrwxrwx    1 root     root            4 Sep 28 18:05 stderr -> fd/2
lrwxrwxrwx    1 root     root            4 Sep 28 18:05 stdin -> fd/0
lrwxrwxrwx    1 root     root            4 Sep 28 18:05 stdout -> fd/1
crw-rw-rw-    1 root     tty        5,   0 Sep 28 18:06 tty
crw-------    1 root     root       4,   0 Sep 28 18:06 tty0
crw-------    1 root     root       4,   1 Jan 19 14:59 tty1
crw-rw----    1 root     dialout   62,  64 Oct  7 06:50 ttyLT0
crw-rw----    1 root     dialout    4,  64 Mar 15  2002 ttyS0
crw-rw----    1 root     dialout    4,  65 Mar 15  2002 ttyS1
crw-rw----    1 root     dialout    4,  66 Mar 15  2002 ttyS2
crw-rw----    1 root     dialout    4,  67 Mar 15  2002 ttyS3
crw-rw----    1 root     dialout  188,   0 Mar 15  2002 ttyUSB0
crw-rw----    1 root     dialout  188,   1 Mar 15  2002 ttyUSB1
cr--r--r--    1 root     root       1,   9 Jan 19 20:46 urandom
drwxr-xr-x    2 root     root         4096 Sep 28 18:05 usb
prw-r-----    1 root     adm             0 Jan 19 14:58 xconsole
crw-rw-rw-    1 root     root       1,   5 Sep 28 18:06 zero

您可能希望记住的一些常见设备文件及其在 Windows 下的等效对应项是

/dev/ttyS0 (第一个通信端口,COM1)

第一个串行端口(鼠标、调制解调器)。

/dev/psaux (PS/2)

PS/2 鼠标连接(鼠标、键盘)。

/dev/lp0 (第一个打印机端口,LPT1)

第一个并行端口(打印机、扫描仪等)。

/dev/dsp (第一个音频设备)

名称 DSP 来自术语数字信号处理器,这是一种专门的处理器芯片,针对数字信号分析进行了优化。声卡可以使用专用的 DSP 芯片,也可以使用多个分立器件来实现这些功能。可能用于此设备的其他术语包括数字化语音和 PCM。

/dev/usb (USB 设备)

此子目录包含大多数 USB 设备节点。设备名称分配相当简单,因此无需详细说明。

/dev/sda (C:\, SCSI 设备)

第一个 SCSI 设备(HDD、记忆棒、外部大容量存储设备,例如笔记本电脑上的 CD-ROM 驱动器等)。

/dev/scd (D:\, SCSI CD-ROM 设备)

第一个 SCSI CD-ROM 设备。

/dev/js0 (标准游戏端口操纵杆)

第一个操纵杆设备。

设备按类型定义,例如“块”或“字符”,以及“主”编号和“次”编号。主编号用于对设备进行分类,次编号用于标识特定设备类型。例如,连接到主控制器的所有 IDE 设备的主编号均为 3。主设备和从设备以及各个分区通过使用次编号进一步定义。以下显示中日期之前的两个数字就是这些编号

# ls -l /dev/hd*

brw-rw----    1 root     disk       3,   0 Mar 15  2002 /dev/hda
brw-rw----    1 root     disk       3,   1 Mar 15  2002 /dev/hda1
brw-rw----    1 root     disk       3,  10 Mar 15  2002 /dev/hda10
brw-rw----    1 root     disk       3,  11 Mar 15  2002 /dev/hda11
brw-rw----    1 root     disk       3,  12 Mar 15  2002 /dev/hda12
brw-rw----    1 root     disk       3,  13 Mar 15  2002 /dev/hda13
brw-rw----    1 root     disk       3,  14 Mar 15  2002 /dev/hda14
brw-rw----    1 root     disk       3,  15 Mar 15  2002 /dev/hda15
brw-rw----    1 root     disk       3,  16 Mar 15  2002 /dev/hda16
brw-rw----    1 root     disk       3,  17 Mar 15  2002 /dev/hda17
brw-rw----    1 root     disk       3,  18 Mar 15  2002 /dev/hda18
brw-rw----    1 root     disk       3,  19 Mar 15  2002 /dev/hda19
brw-rw----    1 root     disk       3,   2 Mar 15  2002 /dev/hda2
brw-rw----    1 root     disk       3,  20 Mar 15  2002 /dev/hda20
brw-rw----    1 root     disk       3,   3 Mar 15  2002 /dev/hda3
brw-rw----    1 root     disk       3,   4 Mar 15  2002 /dev/hda4
brw-rw----    1 root     disk       3,   5 Mar 15  2002 /dev/hda5
brw-rw----    1 root     disk       3,   6 Mar 15  2002 /dev/hda6
brw-rw----    1 root     disk       3,   7 Mar 15  2002 /dev/hda7
brw-rw----    1 root     disk       3,   8 Mar 15  2002 /dev/hda8
brw-rw----    1 root     disk       3,   9 Mar 15  2002 /dev/hda9
brw-rw----    1 root     disk       3,  64 Mar 15  2002 /dev/hdb
brw-rw----    1 root     disk       3,  65 Mar 15  2002 /dev/hdb1
brw-rw----    1 root     disk       3,  74 Mar 15  2002 /dev/hdb10
brw-rw----    1 root     disk       3,  75 Mar 15  2002 /dev/hdb11
brw-rw----    1 root     disk       3,  76 Mar 15  2002 /dev/hdb12
brw-rw----    1 root     disk       3,  77 Mar 15  2002 /dev/hdb13
brw-rw----    1 root     disk       3,  78 Mar 15  2002 /dev/hdb14
brw-rw----    1 root     disk       3,  79 Mar 15  2002 /dev/hdb15
brw-rw----    1 root     disk       3,  80 Mar 15  2002 /dev/hdb16
brw-rw----    1 root     disk       3,  81 Mar 15  2002 /dev/hdb17
brw-rw----    1 root     disk       3,  82 Mar 15  2002 /dev/hdb18
brw-rw----    1 root     disk       3,  83 Mar 15  2002 /dev/hdb19
brw-rw----    1 root     disk       3,  66 Mar 15  2002 /dev/hdb2
brw-rw----    1 root     disk       3,  84 Mar 15  2002 /dev/hdb20
brw-rw----    1 root     disk       3,  67 Mar 15  2002 /dev/hdb3
brw-rw----    1 root     disk       3,  68 Mar 15  2002 /dev/hdb4
brw-rw----    1 root     disk       3,  69 Mar 15  2002 /dev/hdb5
brw-rw----    1 root     disk       3,  70 Mar 15  2002 /dev/hdb6
brw-rw----    1 root     disk       3,  71 Mar 15  2002 /dev/hdb7
brw-rw----    1 root     disk       3,  72 Mar 15  2002 /dev/hdb8
brw-rw----    1 root     disk       3,  73 Mar 15  2002 /dev/hdb9
brw-rw----    1 root     disk      22,   0 Mar 15  2002 /dev/hdc
brw-rw----    1 root     disk      22,  64 Mar 15  2002 /dev/hdd

hda 和 hdb 设备的主编号均为 3。当然,每个特定分区的次编号都会更改。可以通过查看 /usr/src/linux/include/linux/major.h 文件的内容来检查每个主编号类别的定义。《devices.txt》也记录了主编号和次编号。它位于 /usr/src/linux/Documentation 目录中。此文件定义了主编号。几乎所有设备文件都在安装时默认创建。但是,您始终可以使用 mknod 命令或 MAKEDEV 脚本(位于 /dev 目录本身中)创建设备。可以使用此实用程序创建设备,方法是提供要创建的设备、设备类型(块或字符)以及主编号和次编号。例如,假设您意外删除了 /dev/ttyS0(Windows 下的 COM1),则可以使用以下命令重新创建它

# mknod ttyS0 c 4 64

对于我们这些比较懒惰的人来说,您可以简单地运行 MAKEDEV 脚本,如下所示

# MAKEDEV *

这将创建所有已知设备。

`/dev` 也可能包含一个 `MAKEDEV.local`,用于创建任何本地设备文件。

一般来说,并且根据 FSSTND 的要求,MAKEDEV 将提供创建系统上可能找到的任何设备的功能,而不仅仅是特定实现安装的那些设备。

对于那些想知道为什么 Linux 使用如此原始的系统来引用设备的人来说,这是因为我们尚未能够设计出一种足够复杂的机制,该机制能够提供足够的优势来取代当前系统,从而实现广泛采用。

迄今为止(截至内核版本 2.4),CSIRO 的 Richard Gooch 做出了最好的尝试。它被称为 devfsd,并且已成为内核的一部分多年。它已获得内核开发人员和 Linus 本人的认可,其实现的详细信息可以在 /usr/src/linux/Documentation/filesystems/devfs/README 中找到。以下是本文档的摘录。

Devfs 是“真实”字符和块特殊设备在根文件系统上的替代方案。内核设备驱动程序可以通过名称而不是主编号和次编号来注册设备。这些设备将自动出现在 devfs 中,并带有驱动程序指定的任何默认所有权和保护。守护程序 (devfsd) 可用于覆盖这些默认值。Devfs 自 2.3.46 版本以来已在内核中。

注意,devfs 是完全可选的。如果您更喜欢旧的基于磁盘的设备节点,那么只需保留 CONFIG_DEVFS_FS=n(默认值)。在这种情况下,一切都不会改变。另请注意,如果您确实启用了 devfs,则默认设置是保持与旧设备名称的完全兼容性。

devfs 有两个方面:一个是底层设备命名空间,它就像任何已挂载的文件系统一样是一个命名空间。另一方面是文件系统代码,它提供了设备命名空间的视图。我之所以区分,是因为 devfs 可以多次挂载,每次挂载都显示相同的设备命名空间。所做的更改是全局性的,适用于所有已挂载的 devfs 文件系统。此外,由于 devfs 命名空间在没有任何 devfs 挂载的情况下存在,因此您可以轻松地通过引用 devfs 命名空间中的条目来挂载根文件系统。

devfs 的代价是内核代码大小和内存使用量略有增加。大约 7 页代码(其中一些在 __init 部分中)和命名空间中每个条目 72 字节。一个适中的系统只有几百个设备条目,因此这会增加几页。将其与将 /dev 放在 ramdisk 上的建议进行比较。

在典型的机器上,成本低于 0.2%。在具有 64 MB RAM 的适中系统上,成本低于 0.1%。对 devfs 的“臃肿软件”指责是不合理的。

截至内核版本 2.6,devfs 已被标记为过时,现在已被 udev 取代。udev 是一个非常相似的系统(至少从最终用户的角度来看),但它完全在用户空间中工作。有关 udev 的概述,请访问 http://www.kroah.com/linux/talks/ols_2003_udev_paper/Reprint-Kroah-Hartman-OLS2003.pdf


1.6. /etc

这是系统的神经中枢,它包含所有系统相关的配置文件,或者在其子目录中。“配置文件”定义为用于控制程序操作的本地文件;它必须是静态的,不能是可执行二进制文件。因此,定期备份此目录是一个好主意。如果您重新安装或丢失当前安装,它肯定会为您节省大量后续的重新配置工作。通常,不应在此处放置任何二进制文件,或者说这里不放置二进制文件。

/etc/X11/

此目录树包含 X Window 系统的所有配置文件。用户应注意,此目录中的许多文件实际上是指向 /usr/X11R6 目录树的符号链接。因此,这些文件是否在此位置存在是不确定的。

/etc/X11/XF86Config, /etc/X11/XF86Config-4

“X”配置文件。大多数现代发行版都拥有硬件自动检测系统,可以自动创建有效文件。如果自动检测失败,也可以手动创建配置文件,前提是您对系统有足够的了解。从头到尾键入文件是不明智的。相反,请使用常见的配置实用程序(例如 xf86config、XF86Setup 和 xf86cfg)来创建可用的模板。然后,使用适当的文档,通过直觉和/或反复试验开始优化。可以通过此文件配置的选项包括启动时要加载的 X 模块、键盘、鼠标、监视器和图形芯片组类型。通常,商业发行版将包含自己的 X 配置实用程序,例如 Mandrake 上的 XDrake 以及 Redhat 上的 Xconfiguration。以下是参考系统中的示例 X 配置文件

### BEGIN DEBCONF SECTION
# XF86Config-4 (XFree86 server configuration file) generated by dexconf, the
# Debian X Configuration tool, using values from the debconf database.
#
# Edit this file with caution, and see the XF86Config-4 manual page.
# (Type "man XF86Config-4" at the shell prompt.)
#
# If you want your changes to this file preserved by dexconf, only 
# make changes
# before the "### BEGIN DEBCONF SECTION" line above, and/or after the
# "### END DEBCONF SECTION" line below.
#
# To change things within the debconf section, run the command:
#   dpkg-reconfigure xserver-xfree86
# as root.  Also see "How do I add custom sections to a dexconf-
# generated
# XF86Config or XF86Config-4 file?" in /usr/share/doc/xfree86-
# common/FAQ.gz.

Section "Files"
        FontPath        "unix/:7100"                        
# local font server
        # if the local font server has problems, 
# we can fall back on these
        FontPath        "/usr/lib/X11/fonts/misc"
        FontPath        "/usr/lib/X11/fonts/cyrillic"
        FontPath        "/usr/lib/X11/fonts/100dpi/:unscaled"
        FontPath        "/usr/lib/X11/fonts/75dpi/:unscaled"
        FontPath        "/usr/lib/X11/fonts/Type1"
        FontPath        "/usr/lib/X11/fonts/Speedo"
        FontPath        "/usr/lib/X11/fonts/100dpi"
        FontPath        "/usr/lib/X11/fonts/75dpi"
EndSection

Section "Module"
        Load        "GLcore"
        Load        "bitmap"
        Load        "dbe"
        Load        "ddc"
        Load        "dri"
        Load        "extmod"
        Load        "freetype"
        Load        "glx"
        Load        "int10"
        Load        "pex5"
        Load        "record"
        Load        "speedo"
        Load        "type1"
        Load        "vbe"
        Load        "xie"
EndSection

Section "InputDevice"
        Identifier        "Generic Keyboard"
        Driver                "keyboard"
        Option                "CoreKeyboard"
        Option                "XkbRules"        "xfree86"
        Option                "XkbModel"        "pc104"
        Option                "XkbLayout"        "us"
EndSection

Section "InputDevice"
        Identifier        "Configured Mouse"
        Driver                "mouse"
        Option                "CorePointer"
        Option                "Device"                "/dev/psaux"
        Option                "Protocol"                "NetMousePS/2"
        Option                "Emulate3Buttons"        "true"
        Option                "ZAxisMapping"                "4 5"
EndSection

Section "InputDevice"
        Identifier        "Generic Mouse"
        Driver                "mouse"
        Option                "SendCoreEvents"        "true"
        Option                "Device"                "/dev/input/mice"
        Option                "Protocol"                "ImPS/2"
        Option                "Emulate3Buttons"        "true"
        Option                "ZAxisMapping"                "4 5"
EndSection

Section "Device"
        Identifier        "Generic Video Card"
        Driver                "nv"
#        Option                "UseFBDev"                "true"
        Option                "UseFBDev"                "false"
EndSection

Section "Monitor"
        Identifier        "Generic Monitor"
        HorizSync        30-38
        VertRefresh        43-95
        Option                "DPMS"
EndSection

Section "Screen"
        Identifier        "Default Screen"
        Device                "Generic Video Card"
        Monitor                "Generic Monitor"
        DefaultDepth        16
        SubSection "Display"
                Depth                1
                Modes                "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth                4
                Modes                "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth                8
                Modes                "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth                15
                Modes                "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth                16
                Modes                "800x600" "640x480"
        EndSubSection
        SubSection "Display"
                Depth                24
                Modes                "800x600" "640x480"
        EndSubSection
EndSection

Section "ServerLayout"
        Identifier        "Default Layout"
        Screen                "Default Screen"
        InputDevice        "Generic Keyboard"
        InputDevice        "Configured Mouse"
        InputDevice        "Generic Mouse"
EndSection

Section "DRI"
        Mode        0666
EndSection

### END DEBCONF SECTION

如您所见,文件的布局非常简单,并且在大多数发行版中往往非常标准。顶部是各种 X 字体文件的位置(注意 - 如果您未指定有效的字体,X 将无法启动),接下来是“Modules”部分。它详细说明了启动时要加载的模块。最著名的扩展可能是 GLX(3D 图形和游戏渲染所必需的)和 Xinerama,它允许用户将其桌面扩展到多个监视器上。接下来是各种“Device”部分,它们描述了您拥有的硬件类型。这些子部分配置不当可能会导致令人心碎和痛苦的事情,例如看似错位的键、着魔的鼠标以及 X 尝试在有时永无止境的循环中重新启动时不断闪烁。在大多数情况下,当所有其他方法都失败时,vesa 驱动程序似乎能够初始化大多数现代显卡。“Screen”部分允许更改默认启动分辨率和深度。通常,可以通过使用 alt-ctrl-+ 或 alt-ctrl- 组合键来动态更改这些属性。最后是“ServerLayout”和“DRI”部分。用户几乎永远不会接触“DRI”部分,只有那些希望使用 Xinerama 扩展的用户才需要更改任何 ServerLayout 选项。

/etc/X11/Xmodmap

通常,您的默认键盘映射来自您的 X 服务器设置。如果此设置不足,并且您不愿意经历重新配置的过程,或者您不是超级用户,则需要使用 xmodmap 程序。这是该实用程序的全局配置文件。

/etc/X11/xkb/

X 服务器支持的各种符号、类型、键映射的几何图形可以在此目录树中找到。

/etc/X11/lbxproxy/

低带宽 X (LBX) 代理服务器配置文件。希望利用 X (LBX) 低带宽扩展的应用程序必须将其连接连接到 lbxproxy。这些应用程序无需了解有关 LBX 的任何信息,它们只需连接到 lbxproxy,就好像它是普通的 X 服务器一样。lbxproxy 接受客户端连接,通过单个连接将其多路复用到 X 服务器,并对 X 协议执行各种优化,以使其在低带宽和/或高延迟连接上更快。应该注意的是,这种压缩不会大大提高渲染速度。其主要目的是减少网络负载,从而增加整体网络延迟。一个名为 DXPC(差分 X 协议压缩)的竞争项目已被发现在这项任务中更有效率。研究表明,在几乎所有情况下,X 的 ssh 隧道都会比任何这些专用软件产生更好的结果。

/etc/X11/proxymngr/

X 代理服务管理器初始化文件。proxymngr 负责解析来自 xfindproxy(在 xbase-clients 包中)和其他类似客户端的请求,在适当的时候启动新的代理,并跟踪所有可用的代理服务。

/etc/X11/xdm/

X 显示管理器配置文件。xdm 管理 X 服务器的集合,这些服务器可能位于本地主机或远程计算机上。它提供的服务类似于 init、getty 和 login 在基于字符的终端上提供的服务:提示输入登录名和密码、验证用户身份以及运行会话。xdm 支持 XDMCP(X 显示管理器控制协议),也可以用于运行选择器进程,该进程向用户呈现提供 XDMCP 显示管理的主机菜单。如果安装了 xutils 包,xdm 可以使用 sessreg 实用程序将登录会话注册到系统 utmp 文件;但是,这对于 xdm 的功能不是必需的。

/etc/X11/xdm/xdm-config

这是主“xdm”配置文件。它确定所有其他“xdm”配置文件的位置。它几乎肯定会保持不变。

/etc/X11/gdm/

GNOME 显示管理器配置文件。gdm 为 X 显示提供相当于“login:”提示符的功能 - 它弹出一个登录窗口并启动一个 X 会话。它提供 xdm 的所有功能,包括用于管理远程显示器的 XDMCP 支持。问候窗口是使用 GNOME 库编写的,因此看起来像一个 GNOME 应用程序 - 甚至支持主题!默认情况下,问候程序以非特权用户身份运行以确保安全。

/etc/X11/gdm/gdm.conf

这是 GDM 的主要配置文件。通过它,用户可以指定他们是否希望其系统自动以特定用户身份登录、背景启动图像,以及他们是否希望通过使用 XDMCP 协议将其机器作为某种终端服务器运行。

/etc/X11/fonts

xfs 字体的家目录。

/etc/X11/fs/

X 字体服务器配置文件。xfs 是一个守护程序,它侦听网络端口并为 X 服务器(以及 X 客户端)提供 X 字体。所有 X 服务器都能够为自己提供本地安装的字体,但 xfs 使将该作业从 X 服务器卸载变得可能,并且/或在运行 xfs 的联网机器上拥有一个中央字体库,以便网络上运行 X 服务器的所有机器都不需要自己的字体集。用户也可以调用 xfs,例如,使 X 字体在用户帐户中可用,而这些字体对于 X 服务器或已经运行的系统 xfs 不可用。

/etc/X11/fs/config

这是“xfs”初始化文件。它指定允许在任何给定时间连接到“xfs”服务器的客户端数量、日志文件的位置、默认分辨率、字体的位置等。

	
# font server configuration file
# $Xorg: config.cpp,v 1.3 2000/08/17 19:54:19 cpqbld Exp $

# allow a maximum of 10 clients to connect to this font server
client-limit = 10
# when a font server reaches its limit, start up a new one
clone-self = on
# log messages to /var/log/xfs.log (if syslog is not used)
error-file = /var/log/xfs.log
# log errors using syslog
use-syslog = on
# turn off TCP port listening (Unix domain connections are still permitted)
no-listen = tcp
# paths to search for fonts
catalogue = /usr/lib/X11/fonts/misc/,/usr/lib/X11/fonts/cyrillic/,
/usr/lib/X11/fonts/100dpi/:unscaled,/usr/lib/X11/fonts/75dpi/:unscaled,
/usr/lib/X11/fonts/Type1/,/usr/lib/X11/fonts/CID,
/usr/lib/X11/fonts/Speedo/,/usr/lib/X11/fonts/100dpi/,
/usr/lib/X11/fonts/75dpi/
# in decipoints
default-point-size = 120
# x1,y1,x2,y2,...
default-resolutions = 100,100,75,75

# font cache control, specified in kB
cache-hi-mark = 2048
cache-low-mark = 1433
cache-balance = 70

/etc/X11/twm

twm 配置文件的家目录。原始的选项卡式窗口管理器。

/etc/X11/xinit/

xinit 配置文件。“xinit”是一种启动 X 会话的配置方法,旨在用作脚本的一部分。通常,这在较大的站点中用作定制登录过程的一部分。

/etc/X11/xinit/xinitrc

全局 xinitrc 文件,由 xinit (startx) 启动的所有 X 会话使用。当然,它的使用会被位于用户主目录中的 .xinitrc 文件覆盖。

/etc/adduser.conf

“adduser”配置。adduser 命令可以创建新用户、组,并将现有用户添加到现有组。使用 adduser 添加用户比手动添加用户容易得多。Adduser 将选择适当的 UID 和 GID 值,创建主目录,从 /etc/skel 复制骨架用户配置,允许您设置初始密码和 GECOS 字段。可选地,可以在这些命令之后执行自定义脚本。有关完整文档,请参阅 adduser(8) 和 adduser.conf(5)。

/etc/adjtime

具有帮助调整软件(内核)时间以使其与 RTC 匹配的参数。

/etc/aliases

这是别名文件 - 它说明了谁为谁接收邮件。它最初由 `eximconfig` 生成,`eximconfig` 是 Debian 发行版中 exim 包的一部分,但可以由邮件系统管理员编辑。有关此处可以配置的事项的详细信息,请参阅 exim 信息部分。别名数据库文件 (aliases.db) 是由 newaliases 实用程序从别名文件中的条目构建的。

/etc/alternatives

在单个系统上同时安装多个功能相同或相似的程序是可能的。例如,许多系统同时安装了多个文本编辑器。这为系统的用户提供了选择,允许每个人使用不同的编辑器(如果需要),但如果用户未指定特定的偏好,则程序很难选择要调用的编辑器。

alternatives 系统旨在解决此问题。文件系统中所有提供可互换功能的文件的共享一个通用名称。alternatives 系统和系统管理员共同确定此通用名称引用的实际文件。例如,如果系统上同时安装了文本编辑器 ed(1) 和 nvi(1),则 alternatives 系统将默认使通用名称 /usr/bin/editor 引用 /usr/bin/nvi。系统管理员可以覆盖此设置并使其改为引用 /usr/bin/ed,并且 alternatives 系统在明确要求这样做之前不会更改此设置。

通用名称不是指向所选替代项的直接符号链接。相反,它是指向 alternatives 目录中名称的符号链接,而 alternatives 目录中的名称又是指向所引用实际文件的符号链接。这样做是为了使系统管理员的更改可以限制在 /etc 目录中。

/etc/apt

这是 Debian 的下一代 dpkg 包管理器前端。它提供了 apt-get 实用程序和 APT dselect 方法,这些方法提供了一种更简单、更安全的安装和升级软件包的方式。APT 具有完整的安装顺序、多源功能和一些其他独特功能,请参阅 /usr/share/doc/apt/guide.text.gz 中的用户指南

/etc/apt/sources.list

deb cdrom:[Debian GNU/Linux 3.0 r0 _Woody_ - Official i386 Binary-7 (20020718)]/
          unstable contrib main non-US/contrib non-US/main
deb cdrom:[Debian GNU/Linux 3.0 r0 _Woody_ - Official i386 Binary-6 (20020718)]/
          unstable contrib main non-US/contrib non-US/main
deb cdrom:[Debian GNU/Linux 3.0 r0 _Woody_ - Official i386 Binary-5 (20020718)]/
          unstable contrib main non-US/contrib non-US/main
deb cdrom:[Debian GNU/Linux 3.0 r0 _Woody_ - Official i386 Binary-4 (20020718)]/
          unstable contrib main non-US/contrib non-US/main
deb cdrom:[Debian GNU/Linux 3.0 r0 _Woody_ - Official i386 Binary-3 (20020718)]/ 
          unstable contrib main non-US/contrib non-US/main
deb cdrom:[Debian GNU/Linux 3.0 r0 _Woody_ - Official i386 Binary-2 (20020718)]/ 
          unstable contrib main non-US/contrib non-US/main
deb cdrom:[Debian GNU/Linux 3.0 r0 _Woody_ - Official i386 Binary-1 (20020718)]/ 
          unstable contrib main non-US/contrib non-US/main

# deb http://security.debian.org/ stable/updates main

包含 apt 源列表,可以从中通过 APT 安装软件包。

/etc/asound.conf

ALSA(高级 Linux 声音架构)配置文件。它通常通过 alsactl 或其他第三方声音配置实用程序创建,这些实用程序可能特定于发行版,例如 Redhat 的 sndconfig。

/etc/at.deny

被拒绝访问 at 守护程序的用户。“at”命令允许用户在任意时间执行程序。

/etc/autoconf

autoconf 的配置文件。“autoconf”创建脚本以使用模板配置源代码包。要从 configure.in 创建 configure,请在不带参数的情况下运行 autoconf 程序。autoconf 使用 m4 宏处理器处理 configure.ac,使用 Autoconf 宏。如果您为 autoconf 提供参数,它将读取该文件而不是 configure.ac,并将配置脚本写入标准输出而不是 configure。如果您为 autoconf 提供参数 -,它将读取标准输入而不是 configure.ac,并将配置脚本写入标准输出。

Autoconf 宏在多个文件中定义。一些文件与 Autoconf 一起分发;autoconf 首先读取它们。然后,它在包含已分发 Autoconf 宏文件的目录中查找可选文件 acsite.m4,并在当前目录中查找可选文件 aclocal.m4。这些文件可以包含您站点或软件包自己的 Autoconf 宏定义。如果宏在 autoconf 读取的多个文件中定义,则它读取的最后一个定义将覆盖较早的定义。

/etc/bash.bashrc

交互式 bash shell 的系统范围函数和别名文件。

/etc/bash_completion

bash 2.05a 的可编程完成函数。

/etc/chatscripts/provider

这是用于拨号连接到您的默认服务提供商的 chat 脚本。

/etc/cron.d, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly

这些目录包含 cron 守护程序定期执行的脚本。

/etc/crontab

“cron”配置文件。此文件用于 cron 表,以设置系统例程的自动运行。也可以为个人用户建立 cron 表。这些用户 cron 表文件的位置将在稍后解释。

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
25 6 * * * root test -e /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6 * * 7 root test -e /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6 1 * * root test -e /usr/sbin/anacron || run-parts --report /etc/cron.monthly
#

/etc/csh.login

csh(1) 的系统范围 .login 文件。此文件在 shell 的所有调用中都被源化。它包含要在登录时执行的命令,有时也包含别名。

/etc/csh.logout

csh(1) 的系统范围 .logout 文件。此文件在 shell 的所有调用中都被源化。它包含要在注销时执行的命令。

/etc/csh.cshrc

csh(1) 的系统范围 .cshrc 文件。此文件在 shell 的所有调用中都被源化。此文件应包含用于设置命令搜索路径以及其他重要环境变量的命令。此文件不应包含产生输出或假设 shell 连接到 tty 的命令。

/etc/cups

通用 UNIX 打印系统 (CUPS) 的配置文件。此处的文件用于定义特定于客户端的参数,例如默认服务器或默认加密设置。

/etc/deluser.conf

“deluser”配置文件。deluser 命令可以删除用户和组,并将用户从给定的组中删除。Deluser 可以选择删除和备份用户的主目录和邮件假脱机,或者系统上他拥有的所有文件。可选地,还可以在每个命令之后执行自定义脚本。

/etc/devfs

此守护程序设置 /dev 文件系统以供使用。它在 /dev 中创建必需的符号链接,并且还创建(如果配置为这样,默认情况下是这样)指向设备“旧”名称的符号链接。

/etc/devfs/conf.d/

“devfsd”配置文件。此守护程序设置 /dev 文件系统以供使用。它在 /dev 中创建必需的符号链接,并且还创建(如果配置为这样,默认情况下是这样)指向设备“旧”名称的符号链接。

/etc/dhclient.conf, /etc/dhclient-script

分别是“dhclient”配置文件和“dhclient”脚本文件。它配置您的系统,使其可以在基于 DHCP 的网络上充当客户端。如今,连接到互联网至关重要。

/etc/dict.conf

#  /etc/dict.conf Written by Bob Hilliard <hilliard@debian.org>
#  1998/03/20.  Last revised Sun, 22 Nov 1998 18:10:04 -0500 This is
#  the configuration file for /usr/bin/dict.  In most cases only the
#  server keyword need be specified.  

#  This default configuration will try to access a dictd server on
#  the local host, failing that, it will try the public server.  In
#  many cases this will be slow, so you should comment out the line 
#  for the server that you don't want to use. To use any other 
#  server, enter its IP address in place of "dict.org".  

#  Refer to the dict manpage (man dict) for other options that could
#  be inserted in here.

server localhost 
server dict.org

dict 是字典服务器协议 (DICT) 的客户端,DICT 是一种基于 TCP 事务的查询/响应协议,可提供对一组自然语言字典数据库中的字典定义的访问。

/etc/dosemu.conf

Linux DOS 模拟器的配置文件。DOSEMU 是一个 PC 模拟器应用程序,允许 Linux 在虚拟 x86 机器中运行 DOS 操作系统。这允许您运行许多 DOS 应用程序。它包括 FreeDOS 内核、彩色文本和完整的键盘仿真(通过热键)通过终端、内置 X 支持、IBM 字符集字体、控制台图形功能(使用大多数兼容的显卡)、DPMI 支持(因此您可以运行 DOOM)、CDROM 支持、内置 IPX 和 pktdrvr 支持。注意 - “dosemu”只是 Corel 自己的 PC-DOS 的移植版本。

/etc/email-addresses

exim 包的一部分。此文件包含用于传出邮件的电子邮件地址。此处未包含的任何本地部分都将像往常一样由系统域限定。它应包含以下格式的行

  user: someone@isp.com
  otheruser: someoneelse@anotherisp.com
  

Exim 是一个 MTA,被认为比 smail 或 sendmail 更容易配置。它是 sendmail、mailq 和 rsmtp 的直接替代品。高级功能包括拒绝来自已知垃圾邮件站点的连接的能力,以及极其高效的队列处理算法。

/etc/esound.conf

ESD 配置文件。启迪声音守护程序旨在混合多个数字音频流,以便单个设备播放。与 nasd、artsd 和 rplay 一样,它也具有远程播放声音的功能。

/etc/exports

希望通过 NFS 访问系统的系统控制列表、您想要共享的目录列表以及在每个共享上分配的权限。

  # /etc/exports: the access control list for filesystems which may be
  # exported to NFS clients.  See exports(5).
  ## LTS-begin ##

  #
  # The lines between the 'LTS-begin' and the 'LTS-end' were added
  # on: Sun Feb 23 05:54:17 EST 2003 by the ltsp installation script.
  # For more information, visit the ltsp homepage
  # at http://www.ltsp.org
  #

  /opt/ltsp/i386                  192.168.0.0/255.255.255.0(ro,no_root_squash)
  /var/opt/ltsp/swapfiles         192.168.0.0/255.255.255.0(rw,no_root_squash)

  #
  # The following entries need to be uncommented if you want
  # Local App support in ltsp
  #
  #/home                  192.168.0.0/255.255.255.0(rw,no_root_squash)

  ## LTS-end ##

/etc/fdprm

软盘参数表。描述不同的软盘格式的外观。由 setfdprm 使用。

/etc/fstab

“mount”和现在的“supermount”的配置文件。它列出了启动时由 mount -a 命令(在 /etc/rc 或等效的启动文件中)自动挂载的文件系统。在 Linux 下,还包含有关 swapon -a 自动使用的交换空间的信息。

  # /etc/fstab: static file system information.
  #
  # The following is an example. Please see fstab(5) for further details.
  # Please refer to mount(1) for a complete description of mount options.
  #
  # Format:
  # <file system> <mount point> <type> <options> <dump> <pass>
  #
  # dump(8) uses the <dump> field to determine which file systems need
  # to be dumped. fsck(8) uses the <pass> column to determine which file
  # systems need to be checked--the root file system should have a 1 in 
  # this field, other file systems a 2, and any file systems that should
  # not be checked (such as MS-DOS or NFS file systems) a 0.
  #
  # The `sw' option indicates that the swap partition is to be activated
  # with `swapon -a'.
  /dev/hda2 none swap sw 0 0
  # The `bsdgroups' option indicates that the file system is to be mounted
  # with BSD semantics (files inherit the group ownership of the directory
  # in which they live). `ro' can be used to mount a file system read-only.
  /dev/hda3 / ext2 defaults 0 1 
  /dev/hda5 /home ext2 defaults 0 2
  /dev/hda6 /var ext2 defaults 0 2
  /dev/hda7 /usr ext2 defaults,ro 0 2
  /dev/hda8 /usr/local ext2 defaults,bsdgroups 0 2
  # The `noauto' option indicates that the file system should not be mounted
  # with `mount -a'. `user' indicates that normal users are allowed to mount
  # the file system.
  /dev/cdrom /cdrom iso9660 defaults,noauto,ro,user 0 0
  /dev/fd0 /floppy minix defaults,noauto,user 0 0
  /dev/fd1 /floppy minix defaults,noauto,user 0 0
  # NFS file systems: server:
  /export/usr /usr nfs defaults 0 0
  # proc file system:
  proc /proc proc defaults 0 0
  

/etc/ftpaccess

确定谁可以获得对您机器的 ftp 访问权限。

/etc/ftpchroot

需要 chroot 的 ftp 用户列表。

/etc/ftpuser

不允许的 ftp 用户列表。

/etc/gateways

列出“routed”的网关。

/etc/gettydefs

配置控制台登录。

/etc/gnome-vfs-mime-magic

Gnome VFS 库使用的 MIME magic 模式。

/etc/group

类似于 /etc/passwd。它列出了配置的用户组以及谁属于这些组。

/etc/group-

旧的 /etc/group 文件。

/etc/gshadow

包含组密码的加密形式。

/etc/gshadow-

旧的 /etc/gshadow 文件。

/etc/hostname

包含您机器的主机名(可以是完全限定的,也可以不是)。

/etc/host.conf

确定查找的搜索顺序(通常是 hosts bind,即“首先检查 /etc/hosts,然后查找 DNS”)。

/etc/hosts

此文件用于使用特定的 IP 地址定义系统名称和域组合。如果机器连接到网络,则此文件始终需要包含 IP 地址的条目。

  ### etherconf DEBCONF AREA. DO NOT EDIT THIS AREA OR INSERT TEXT BEFORE IT.
  127.0.0.1 localhost ::1 localhost
  ip6-localhost ip6-loopback
  fe00::0 ip6-localnet
  ff00::0 ip6-mcastprefix
  ff02::1 ip6-allnodes
  ff02::2 ip6-allrouters
  ff02::3 ip6-allhosts
  192.168.0.99 debian.localdomain.com debian
  ### END OF DEBCONF AREA. PLACE YOUR EDITS BELOW; THEY WILL BE PRESERVED.
  192.168.0.1 ws001
  

/etc/hosts.allow

tcp-wrappers 系统的一部分,用于控制对您机器服务的访问。它列出了允许访问系统和特定守护程序的主机。

  # /etc/hosts.allow: list of hosts that are allowed to access the
  # system.
  # See the manual pages hosts_access(5), hosts_options(5)
  # and /usr/doc/netbase/portmapper.txt.gz
  #
  # Example: ALL: LOCAL @some_netgroup
  # ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
  #
  # If you're going to protect the portmapper use the name "portmap"
  # for the daemon name. Remember that you can only use the keyword
  # "ALL" and IP addresses (NOT host or domain names) for the
  # portmapper. See portmap(8) and /usr/doc/portmap/portmapper.txt.gz
  # for further information.
  bootpd: 0.0.0.0 in.tftpd: 192.168.0.
  portmap: 192.168.0.
  rpc.mountd: 192.168.0.
  rpc.nfsd: 192.168.0.
  gdm: 192.168.0.
  nasd: 192.168.0.
  

/etc/hosts.deny

tcp-wrappers 系统的一部分,用于控制对您机器服务的访问。它列出了不允许访问系统的主机。

  # Example: ALL: some.host.name, .some.domain
  # ALL EXCEPT in.fingerd: other.host.name, .other.domain
  #
  # If you're going to protect the portmapper use the name "portmap"
  # for the daemon name. Remember that you can only use the keyword
  # "ALL" and IP addresses (NOT host or domain names) for the
  # portmapper. See portmap(8) and /usr/doc/portmap/portmapper.txt.gz
  # for further information.
  #
  # The PARANOID wildcard matches any host whose name does not match
  # its address. You may wish to enable this to ensure any programs
  # that don't validate looked up hostnames still leave understandable
  # logs. In past versions of Debian this has been the default.
  # ALL: PARANOID
  

/etc/httpd

Apache 配置文件。Apache 是一种功能强大、高性能的 HTTP 服务器。作为世界上最受欢迎的服务器,Apache 具有模块化设计,并支持在运行时动态选择扩展模块。它的优点是其可能的自定义范围、服务器进程数量的动态调整以及各种可用的模块,包括许多身份验证机制、服务器解析的 HTML、服务器端包含、访问控制、CERN httpd 元文件模拟、代理缓存等。Apache 还支持多个虚拟主机。

/etc/identd.conf

TCP/IP IDENT 协议服务器。它实现了 TCP/IP 提议的标准 IDENT 用户标识协议 (RFC 1413)。identd 通过查找特定的 TCP/IP 连接并返回拥有该连接的进程的用户名来运行。它还可以返回用户名以外的其他信息。

  # /etc/identd.conf - an example configuration file


  #-- The syslog facility for error messages
  # syslog:facility = daemon


  #-- User and group (from passwd database) to run as
  server:user = nobody

  #-- Override the group id
  # server:group = kmem

  #-- What port to listen on when started as a daemon or from /etc/inittab
  # server:port = 113

  #-- The socket backlog limit
  # server:backlog = 256

  #-- Where to write the file containing our process id
  # server:pid-file = "/var/run/identd/identd.pid"

  #-- Maximum number of concurrent requests allowed (0 = unlimited)
  # server:max-requests = 0

  #-- Enable some protocol extensions like "VERSION" or "QUIT"
  protocol:extensions = enabled

  #-- Allow multiple queries per connection
  protocol:multiquery = enabled

  #-- Timeout in seconds since connection or last query. Zero = disable
  # protocol:timeout = 120

  #-- Maximum number of threads doing kernel lookups
  # kernel:threads = 8

  #-- Maximum number of queued kernel lookup requests
  # kernel:buffers = 32

  #-- Maximum number of time to retry a kernel lookup in case of failure
  # kernel:attempts = 5



  #-- Disable username lookups (only return uid numbers)
  # result:uid-only = no

  #-- Enable the ".noident" file
  # result:noident = enabled

  #-- Charset token to return in replies
  # result:charset = "US-ASCII"

  #-- Opsys token to return in replies
  # result:opsys = "UNIX"

  #-- Log all request replies to syslog (none == don't)
  # result:syslog-level = none


  #-- Enable encryption (only available if linked with a DES library)
  # result:encrypt = no

  #-- Path to the DES key file (only available if linked with a DES library)
  # encrypt:key-file = "/usr/local/etc/identd.key"


  #-- Include a machine local configuration file
  # include = /etc/identd.conf
  

/etc/inetd.conf

由 INETD TCP/IP 超级服务器启动的服务的配置。“inetd”现在已弃用。“xinetd”已取代其位置。有关更多详细信息,请参阅 /etc/xinet.conf。

  # /etc/inetd.conf:  see inetd(8) for further information.
  #
  # Internet server configuration database
  #
  #
  # Lines starting with "#:LABEL:" or "#<off>#" should not
  # be changed unless you know what you are doing!
  #
  # If you want to disable an entry so it isn't touched during
  # package updates just comment it out with a single '#' character.
  #
  # Packages should modify this file by using update-inetd(8)
  #
  # <service_name> <sock_type> <proto> 
  # <flags> <user> <server_path>
  # <args>
  #
  #:INTERNAL: Internal services
  #echo	stream	tcp nowait root	internal
  #echo	dgram	udp wait root internal
  #chargen stream tcp	nowait root internal
  #chargen dgram udp	wait root internal
  discard stream tcp nowait root internal
  discard dgram	udp wait root internal
  daytime stream tcp nowait root internal
  #daytime dgram udp wait root internal
  time stream tcp nowait root internal
  #time dgram udp wait root internal

  #:STANDARD: These are standard services.
  ftp stream tcp nowait	root /usr/sbin/tcpd /usr/sbin/in.ftpd	
  telnet stream	tcp nowait telnetd.telnetd /usr/sbin/tcpd 
                                           /usr/sbin/in.telnetd

  #:MAIL: Mail, news and uucp services.
  smtp stream tcp nowait mail /usr/sbin/exim exim -bs
  imap2  stream  tcp nowait root /usr/sbin/tcpd /usr/sbin/imapd
  imap3  stream  tcp nowait root /usr/sbin/tcpd /usr/sbin/imapd

  #:INFO: Info services
  ident	stream tcp wait	identd /usr/sbin/identd	identd
  finger stream	tcp nowait nobody /usr/sbin/tcpd 
                                  /usr/sbin/in.fingerd

  #:BOOT: Tftp service is provided primarily for booting.  
  #Most sites run this only on machines acting as "boot servers."
  tftp dgram udp wait nobody /usr/sbin/tcpd 
                             /usr/sbin/in.tftpd -s /tftpboot
  

/etc/init.d

Order of scripts run in /etc/rc?.d
==================================

0. Overview.

   All scripts executed by the init system are located in /etc/init.d.
   The directories /etc/rc?.d (? = S, 0 .. 6) contain relative links to
   those scripts. These links are named S<2-digit-number><
   original-name> or K<2-digit-number><original-name>.

   If a scripts has the ".sh" suffix it is a bourne shell script and
   MAY be handled in an optimized manner. The behaviour of executing the
   script in an optimized way will not differ in any way from it being
   forked and executed in the regular way.

   The following runlevels are defined:

   N       System bootup (NONE).
   S       Single user mode (not to be switched to directly)
   0       halt
   1       single user mode
   2 .. 5  multi user mode
   6       reboot

1. Boot.

   When the systems boots, the /etc/init.d/rcS script is executed. It
   in turn executes all the S* scripts in /etc/rcS.d in alphabetical
   (and thus numerical) order. The first argument passed to the
   executed scripts is "start". The runlevel at this point is
   "N" (none).

   Only things that need to be run once to get the system in a consistent
   state are to be run. The rcS.d directory is NOT meant to replace rc.local.
   One should not start daemons in this runlevel unless absolutely
   necessary. Eg, NFS might need the portmapper, so it is OK to start it
   early in the boot process. But this is not the time to start the
   squid proxy server.

2. Going multiuser.

   After the rcS.d scripts have been executed, init switches to the
   default runlevel as specified in /etc/inittab, usually "2".

   Init then executes the /etc/init.d/rc script which takes care of
   starting the services in /etc/rc2.d.

   Because the previous runlevel is "N" (none) the /etc/rc2.d/KXXxxxx
   scripts will NOT be executed - there is nothing to stop yet,
   the system is busy coming up.

   If for example there is a service that wants to run in runlevel 4
   and ONLY in that level, it will place a KXXxxxx script in
   /etc/rc{2,3,5}.d to stop the service when switching out of runlevel 4.
   We do not need to run that script at this point.
   
   The /etc.rc2.d/SXXxxxx scripts will be executed in alphabetical
   order, with the first argument set to "start".

3. Switching runlevels.

   When one switches from (for example) runlevel 2 to runlevel 3,
   /etc/init.d/rc will first execute in alphabetical order all K
   scripts for runlevel 3 (/etc/rc3.d/KXXxxxx) with as first argument
   "stop" and then all S scripts for runlevel 3 (/etc/rc3.d/SXXxxxx)
   with as first argument "start".

   As an optimization, a check is made for each "service" to see if
   it was already running in the previous runlevel. If it was, and there
   is no K (stop) script present for it in the new runlevel, there is
   no need to start it a second time so that will not be done.

   On the other hand, if there was a K script present, it is assumed the
   service was stopped on purpose first and so needs to be restarted.

   We MIGHT make the same optimization for stop scripts as well-
   if no S script was present in the previous runlevel, we can assume
   that service was not running and we don't need to stop it either.
   In that case we can remove the "coming from level N" special case
   mentioned above in 2). But right now that has not been implemented.

4. Single user mode.

   Switching to single user mode is done by switching to runlevel 1.
   That will cause all services to be stopped (assuming they all have
   a K script in /etc/rc1.d). The runlevel 1 scripts will then switch
   to runlevel "S" which has no scripts - all it does is spawn
   a shell directly on /dev/console for maintenance.

5. Halt/reboot

   Going to runlevel 0 or 6 will cause the system to be halted or rebooted,
   respectively. For example, if we go to runlevel 6 (reboot) first
   all /etc/rc6.d/KXXxxxx scripts will be executed alphabetically with
   "stop" as the first argument.

   Then the /etc/rc6.d/SXXxxxx scripts will be executed alphabetically
   with "stop" as the first argument as well. The reason is that there
   is nothing to start any more at this point - all scripts that are
   run are meant to bring the system down.

   In the future, the /etc/rc6.d/SXXxxxx scripts MIGHT be moved to
   /etc/rc6.d/K1XXxxxx for clarity.

/etc/inittab

启动时系统配置/初始化脚本。告诉 init 如何处理运行级别。它设置默认运行级别。这是首先运行的,除非在紧急 (-b) 模式下启动。它还允许用户在外部设备(如串行端口)上启动 getty 会话。要向系统添加终端或拨入调制解调器线路,只需向 /etc/inittab 添加更多行,每行对应一个终端或拨入线路。有关更多详细信息,请参阅手册页 init、inittab 和 getty。如果命令在启动时失败,并且 init 配置为重新启动它,它将使用大量系统资源:init 启动它,它失败,init 启动它,它失败,依此类推。为防止这种情况,init 将跟踪它重新启动命令的频率,如果频率变得过高,它将在再次重新启动之前延迟五分钟。/etc/inittab 还有一些特殊功能,允许 init 对特殊情况做出反应。powerwait 允许 init 在电源故障时关闭系统。这假设使用 UPS,以及监视 UPS 并通知 init 电源已关闭的软件。ctrlaltdel 允许 init 在用户在控制台键盘上按下 ctrl-alt-del 时重新启动系统。请注意,系统管理员可以将对 ctrl-alt-del 的反应配置为其他内容,例如,如果系统位于公共场所,则忽略它。sysinit 系统启动时要运行的命令。此命令通常清理 /tmp,例如。上面的列表并非详尽无遗。有关所有可能性以及如何使用上述可能性,请参阅 inittab 手册页。设置(或重置)初始终端颜色。以下 shell 脚本应该适用于 VGA 控制台:for n in 1 2 4 5 6 7 8; do setterm -fore yellow -bold on -back blue -store > /dev/tty$n done 替换您喜欢的颜色,并对串行终端使用 /dev/ttyS$n。为确保在人们注销时重置它们(如果它们已被更改),请将 /etc/inittab 中对 getty(或 mingetty 或 uugetty 或其他任何内容)的引用替换为对 /sbin/mygetty 的引用。#!/bin/sh setterm -fore yellow -bold on -back blue -store > $1 exec /sbin/mingetty $@ 下面提供了一个示例 /etc/inittab。

  # /etc/inittab: init(8) configuration.
  # $Id: etc.xml,v 1.10 2004/02/03 21:42:57 binh Exp $
  # The default runlevel. id:2:initdefault:
  # Boot-time system configuration/initialization script.
  # This is run first except when booting in emergency (-b) mode.
  si::sysinit:/etc/init.d/rcS
  # What to do in single-user mode.
  ~~:S:wait:/sbin/sulogin
  # /etc/init.d executes the S and K scripts upon change
  # of runlevel.
  #
  # Runlevel 0 is halt.
  # Runlevel 1 is single-user.
  # Runlevels 2-5 are multi-user.
  # Runlevel 6 is reboot.
  l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1
  l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3
  l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5
  l6:6:wait:/etc/init.d/rc 6
  # Normally not reached, but fallthrough in case of emergency.
  z6:6:respawn:/sbin/sulogin
  # What to do when CTRL-ALT-DEL is pressed.
  ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
  # Action on special keypress (ALT-UpArrow).
  #kb::kbrequest:/bin/echo "Keyboard Request
  #--edit /etc/inittab to let this work."
  # What to do when the power fails/returns.
  pf::powerwait:/etc/init.d/powerfail start
  pn::powerfailnow:/etc/init.d/powerfail now
  po::powerokwait:/etc/init.d/powerfail stop
  # /sbin/getty invocations for the runlevels.
  #
  # The "id" field MUST be the same as the last
  # characters of the device (after "tty").
  #
  # Format:
  # <id>:<runlevels>:<action>:<process>
  #
  # Note that on most Debian systems tty7 is used by the X Window System,
  # so if you want to add more getty's go ahead but skip tty7 if you run X.
  #
  1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2
  3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4
  5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6
  # Example how to put a getty on a serial line (for a terminal)
  #
  #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 
  #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
  # Example how to put a getty on a modem line.
  #
  #T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

  Undocumented features
  
  The letters A-C can be used to spawn a daemon listed in /etc/inittab. For
  example, assuming you want to start getty on a port to receive a call, but
  only after receiving a voice call first (and not all the time). Furthermore,
  you want to be able to receive a data or a fax call and that when you get
  the voice message you'll know which you want. You insert two new lines
  in /etc/inittab, each with its own ID, and each with a runlevel such as A
  for data and B for fax. When you know which you need, you simply spawn the
  appropriate daemon by calling 'telinit A' or 'telinit B'.
  The appropriate getty is put on the line until the first call is received.
  When the caller terminates the connection, the getty drops because, by
  definition, on demand will not respawn. The other two letters, S and Q, are
  special. S brings you system to maintenance mode and is the same as changing
  state to runlevel 1. The Q is used to tell init to reread inittab. The
  /etc/inittab file can be changed as often as required, but will only be read
  under certain circumstances: -One of its processes dies (do you need to
  respawn another?) -On a powerful signal from a power daemon (or a command
  line) -When told to change state by telinit The Q argument tells init to
  reread the /etc/inittab file. Even though it is called the System V runlevel
  system runlevels 7-9 are legitimate runlevels that can be used if necessary.
  The administrator must remember to alter the inittab file though and also to
  create the required rc?.d files.

/etc/inputrc

libreadline 的全局 inputrc。Readline 是一个从用户获取行并自动编辑它的函数。

/etc/isapnp.conf

基于 ISA 的卡的配置文件。此标准在新系统中几乎是多余的。“isapnptools”ISA 即插即用配置实用程序套件用于配置此类设备。这些程序适用于所有系统,无论它们是否包含 PnP BIOS。实际上,PnP BIOS 添加了一些复杂性,因为它可能已经激活了一些卡,以便驱动程序可以找到它们,并且这些工具可以取消配置它们或更改它们的设置,从而导致各种不良影响。

/etc/isdn

ISDN 配置文件。

/etc/issue

getty 在登录提示符之前输出的内容。通常包含对系统的简短描述或欢迎消息。内容由系统管理员决定。Debian GNU/\s 3.0 \n \l

/etc/issue.net

向远程登录您机器的用户显示欢迎屏幕(而 /etc/issue 确定本地用户在登录时看到的内容)。Debian GNU/%s 3.0 %h

/etc/kde

KDE 初始化脚本和 KDM 配置。

/etc/kde/kdm

K 桌面管理器文件的位置。kdm 管理 X 服务器的集合,这些服务器可能位于本地主机或远程计算机上。它提供的服务类似于 init、getty 和 login 在基于字符的终端上提供的服务:提示输入登录名和密码、验证用户身份以及运行会话。kdm 支持 XDMCP(X 显示管理器控制协议),也可以用于运行选择器进程,该进程向用户呈现提供 XDMCP 显示管理的主机菜单。

/etc/kderc

系统范围的 KDE 初始化脚本。每次加载 KDE 环境时都会执行此处的命令。它是指向 /etc/kde2/system.kdeglobals 的链接

  [Directories]
  dir_config=/etc/kde2
  dir_html=/usr/share/doc/kde/HTML
  dir_cgi=/usr/lib/cgi-bin
  dir_apps=/usr/share/applnk
  dir_mime=/usr/share/mimelnk
  dir_services=/usr/share/services
  dir_servicetypes=/usr/share/servicetypes
  [General]
  TerminalApplication=x-terminal-emulator
  

/etc/ld.so.conf, /etc/ld.so.cache

/etc/ld.so.conf 是一个文件,其中包含以冒号、空格、制表符、换行符或逗号分隔的目录列表,用于搜索库。/etc/ld.so.cache 包含在 /etc/ld.so.conf 中指定的目录中找到的库的有序列表。此文件不是人类可读的格式,不打算进行编辑。

“ldconfig”创建必要的链接和缓存(供运行时链接器 ld.so 使用),以链接到在命令行、/etc/ld.so.conf 文件以及受信任目录(/usr/lib 和 /lib)中指定的目录中找到的最新共享库。“ldconfig”在确定应更新其链接的版本时,会检查其遇到的库的标头和文件名。ldconfig 在扫描库时会忽略符号链接。

“ldconfig”将尝试根据库链接到的 C 库(如果有)来推断 ELF 库的类型(即 libc5 或 libc6/glibc),因此在制作动态库时,明智的做法是显式链接到 libc(使用 -lc)。

一些现有的库不包含足够的信息来允许推断它们的类型,因此 /etc/ld.so.conf 文件格式允许指定预期的类型。这仅用于那些我们无法弄清楚的 ELF 库。格式如下“dirname=TYPE”,其中 type 可以是 libc4、libc5 或 libc6。(此语法也适用于命令行)。不允许空格。另请参阅 -p 选项。

包含 = 的目录名称不再合法,除非它们也具有预期的类型说明符。

“ldconfig”通常应由超级用户运行,因为它可能需要对某些 root 拥有的目录和文件的写权限。它通常在启动时自动运行,或者在安装新共享库时手动运行。

/usr/X11R6/lib

X 库。

/usr/local/lib

本地库。

/etc/lilo.conf

Linux 引导加载程序“lilo”的配置文件。“lilo”是原始的操作系统加载程序,可以加载 Linux 和其他操作系统。“lilo”包通常包含 lilo(安装程序)和引导记录映像,用于安装 Linux、OS/2、DOS 和其他操作系统的通用引导扇区。您可以使用 Lilo 管理您的主引导记录(使用简单的文本屏幕、文本菜单或彩色启动画面图形),或者从其他引导加载程序调用“lilo”以快速启动 Linux 内核。

  Prompt #Prompt user to select
  OS choice at boot timeout=300  # Amount of time to wait before default OS
                                 # started (in ms)
  default=Debian4 #Default OS to be loaded
  vga=normal #VGA mode
  boot=/dev/had #location of MBR
  map=/boot/map #location of kernel
  install=/boot/boot-bmp.b #File to be installed as boot sector
  bitmap=/boot/debian.bmp #LILO boot image 
  bmp-table=30p,100p,1,10 #Colours
  selectable bmp-colors=13,,0,1,,0 #Colours chosen
  lba32 #Required on most new systems to overcome
        #1024 cylinder problem
  image=/vmlinuz #name of kernel
  image label=Debian #a label
  read-only #file system to be mounted read only
  root=/dev/hda6 #location of root filesystem
  
  image=/boot/bzImage
  label=Debian4
  read-only
  root=/dev/hda6

  image=/mnt/redhat/boot/vmlinuz
  label=Redhat
  initrd=/mnt/redhat/boot/initrd-2.4.18-14.img
  read-only
  root=/dev/hda5
  vga=788
  append=" hdc=ide-scsi hdd=ide-scsi"
  
  image=/mnt/mandrake/boot/vmlinuz
  label="Mandrake"
  root=/dev/hda7
  initrd=/mnt/mandrake/boot/initrd.img
  append="devfs=mount hdc=ide-scsi
  acpi=off quiet"
  vga=788
  read-only

  other=/dev/hda2
  table=/dev/hda
  loader=/boot/chain.b
  label=FBSD
  other=/dev/hda1
  label=Windows
  table=/dev/hda
  
  other=/dev/fd0
  label=floppy unsafe
  

/etc/local.gen

此文件列出了您希望构建的语言环境。您可以在 /usr/share/i18n/SUPPORTED 中找到有效的受支持语言环境列表。其他组合也是可能的,但可能没有经过充分测试。如果您更改此文件,则需要重新运行 locale-gen。

/etc/locale.alias

语言环境名称别名数据库。

/etc/login.defs

登录包的配置控制定义。可以通过此单个文件更改大量的属性,例如邮件的位置、登录失败后的延迟秒数、启用失败日志信息的显示、显示未知用户名登录失败、shell 环境变量等等……

/etc/logrotate.conf

logrotate 实用程序旨在简化系统上生成大量日志文件的日志文件管理。 Logrotate 允许自动轮换、压缩、删除和邮寄日志文件。 Logrotate 可以设置为每天、每周、每月或当日志文件达到特定大小时处理日志文件。 通常,logrotate 作为每日 cron 作业运行。

  # see "man logrotate" for details
  # rotate log files weekly
  weekly

  # keep 4 weeks worth of backlogs
  rotate 4

  # create new (empty) log files after rotating old ones
  create

  # uncomment this if you want your log files compressed
  #compress

  # packages drop log rotation information into this directory
  include /etc/logrotate.d

  # no packages own wtmp, or btmp -- we'll rotate them here
  /var/log/wtmp {
      monthly
      create 0664 root utmp
      rotate 1
  }

  /var/log/btmp {
      missingok
      monthly
      create 0664 root utmp
      rotate 1
  }

  # system-specific logs may be configured here

/etc/ltrace.conf

ltrace(库调用跟踪器)的配置文件。 它跟踪动态链接程序中的运行时库调用。“ltrace”是一个调试程序,它运行指定的命令直到退出。 在命令执行时,ltrace 拦截并记录由执行进程调用的动态库调用以及该进程接收到的信号。 它还可以拦截并打印程序执行的系统调用。 要跟踪的程序不需要为此重新编译,因此您可以在没有源代码的二进制文件上使用它。 如果您需要一个用于跟踪进程执行的系统管理工具,则应安装 ltrace。

/etc/magic

file(1) 命令的 Magic 本地数据和配置文件。 包含各种文件格式的描述,文件基于此描述猜测文件类型。 在此处插入您的本地 magic 数据。 格式在 magic(5) 中描述。

/etc/mail.rc

“mail”的初始化文件。 “mail”是一个智能邮件处理系统,其命令语法让人联想到 ed,行被消息替换。 它基本上是 Microsoft Outlook 的命令行版本。

/etc/mailcap

“metamail”功能文件。 metamail 程序读取 mailcap 文件,以确定如何在本地站点显示非文本内容。 mailcap 文件的语法非常简单,至少与 termcap 文件相比是这样。 任何以“#”开头的行都是注释。 空行将被忽略。 否则,每行定义单个内容类型的单个 mailcap 条目。 长行可以通过以反斜杠字符 \ 结尾来继续。 每个单独的 mailcap 条目由内容类型规范、要执行的命令以及(可能)一组可选的“标志”值组成。

/etc/mailcap.order

mailcap 排序规范。 可以通过编辑 /etc/mailcap.order 文件来更改 /etc/mailcap 文件中条目的顺序。 该文件的每一行都指定一个包和一个可选的 mime 类型。 匹配的 Mailcap 条目将按照此文件的顺序放置。 不匹配的条目将稍后放置。

/etc/mailname

邮件服务器主机名。 通常与主机名相同。

/etc/menu, /etc/menu-methods

菜单包的灵感来自旧 fvwm2 包中的 install-fvwm2-menu 程序。 然而,menu 试图为菜单构建提供更通用的接口。 使用此包中的 update-menus 命令,每个 X 窗口管理器都不需要再次修改任何包,并且它为文本和面向 X 的程序提供了统一的接口。

当想要向菜单树添加内容的包被安装时,它将在其 postinstall 脚本中运行 update-menus。 然后,Update-menus 读取 /etc/menu/ /usr/lib/menu 和 /usr/lib/menu/default 中的所有菜单文件,并将所有已安装包的菜单条目存储在内存中。 完成此操作后,它将运行 /etc/menu-methods/* 中的 menu-methods,并将有关菜单条目的信息通过 stdout 管道传输到 menu-methods,以便 menu-methods 可以读取此信息。 每个想要拥有 debian 菜单树的窗口管理器或其他程序都将在 /etc/menu-methods/ 中提供一个 menu-method 脚本。 然后,此菜单方法知道如何为该窗口管理器生成启动文件。 为了方便窗口管理器维护人员完成此任务,menu 提供了一个 install-menu 程序。 该程序可以为几乎每个窗口管理器生成启动文件。

/etc/mgetty+sendfax

用于将 mgetty 用作串行端口上的接口的配置文件。 mgetty 例程特殊例程具有处理诸如拨号连接和传真连接等事物的特殊功能。

/etc/mime.types

MIME-TYPES 和代表它们的扩展名。 此文件是“mime-support”包的一部分。 注意:像“gzip”、“bzip”和“compress”这样的压缩方案实际上不是“mime 类型”。 它们是“编码”,因此_不能_在此文件中包含条目来映射它们的扩展名。 编码文件的“mime 类型”指的是已编码的数据类型,而不是编码类型。

/etc/minicom

“minicom”配置文件。 “minicom”是一个通信程序,它有点像共享软件程序 TELIX,但它是免费的,带有源代码,并且可以在大多数类 Unix 系统下运行。 功能包括带自动重拨的拨号目录、对串行设备上 UUCP 风格的锁定文件的支持、单独的脚本语言解释器、捕获到文件、具有单独配置的多个用户等等。

/etc/modules

启动时要加载的模块列表。

  # /etc/modules: kernel modules to load at boot time.
  #
  # This file should contain the names of kernel modules that are
  # to be loaded at boot time, one per line. Comments begin with
  # a "#", and everything on the line after them are ignored.
  unix
  af_packet
  via-rhine
  cmpci
  ne2k-pci
  nvidia
  

/etc/modules.conf

  ### This file is automatically generated by update-modules"
  #
  # Please do not edit this file directly. If you want to change or add
  # anything please take a look at the files in /etc/modutils and read
  # the manpage for update-modules.
  #
  ### update-modules: start processing /etc/modutils/0keep
  # DO NOT MODIFY THIS FILE!
  # This file is not marked as conffile to make sure if you upgrade modutils
  # it will be restored in case some modifications have been made.
  #
  # The keep command is necessary to prevent insmod and friends from ignoring
  # the builtin defaults of a path-statement is encountered. Until all other
  # packages use the new `add path'-statement this keep-statement is essential
  # to keep your system working
  keep

  ### update-modules: end processing /etc/modutils/0keep

  ### update-modules: start processing /etc/modutils/actions
  # Special actions that are needed for some modules

  # The BTTV module does not load the tuner module automatically,
  # so do that in here
  post-install bttv insmod tuner
  post-remove bttv rmmod tuner


  ### update-modules: end processing /etc/modutils/actions

  ### update-modules: start processing /etc/modutils/aliases
  # Aliases to tell insmod/modprobe which modules to use 

  # Uncomment the network protocols you don't want loaded:
  # alias net-pf-1 off		# Unix
  # alias net-pf-2 off		# IPv4
  # alias net-pf-3 off		# Amateur Radio AX.25
  # alias net-pf-4 off		# IPX
  # alias net-pf-5 off		# DDP / appletalk
  # alias net-pf-6 off		# Amateur Radio NET/ROM
  # alias net-pf-9 off		# X.25
  # alias net-pf-10 off		# IPv6
  # alias net-pf-11 off		# ROSE / Amateur Radio X.25 PLP
  # alias net-pf-19 off		# Acorn Econet

  alias char-major-10-175	agpgart
  alias char-major-10-200	tun
  alias char-major-81	bttv
  alias char-major-108	ppp_generic
  alias /dev/ppp		ppp_generic
  alias tty-ldisc-3	ppp_async
  alias tty-ldisc-14	ppp_synctty
  alias ppp-compress-21	bsd_comp
  alias ppp-compress-24	ppp_deflate
  alias ppp-compress-26	ppp_deflate

  # Crypto modules (see http://www.kerneli.org/)
  alias loop-xfer-gen-0	loop_gen
  alias loop-xfer-3	loop_fish2
  alias loop-xfer-gen-10	loop_gen
  alias cipher-2		des
  alias cipher-3		fish2
  alias cipher-4		blowfish
  alias cipher-6		idea
  alias cipher-7		serp6f
  alias cipher-8		mars6
  alias cipher-11		rc62
  alias cipher-15		dfc2
  alias cipher-16		rijndael
  alias cipher-17		rc5


  ### update-modules: end processing /etc/modutils/aliases

  ### update-modules: start processing /etc/modutils/ltmodem-2.4.18
  # lt_drivers: autoloading and insertion parameter usage
  alias char-major-62 lt_serial
  alias /dev/tts/LT0  lt_serial
  alias /dev/modem lt_serial
  # options lt_modem vendor_id=0x115d device_id=0x0420 Forced=3,0x130,0x2f8
  # section for lt_drivers ends

  ### update-modules: end processing /etc/modutils/ltmodem-2.4.18

  ### update-modules: start processing /etc/modutils/paths
  # This file contains a list of paths that modprobe should scan,
  # beside the once that are compiled into the modutils tools
  # themselves.


  ### update-modules: end processing /etc/modutils/paths

  ### update-modules: start processing /etc/modutils/ppp
  alias /dev/ppp          ppp_generic
  alias char-major-108    ppp_generic
  alias tty-ldisc-3       ppp_async  
  alias tty-ldisc-14      ppp_synctty
  alias ppp-compress-21   bsd_comp   
  alias ppp-compress-24   ppp_deflate
  alias ppp-compress-26   ppp_deflate

  ### update-modules: end processing /etc/modutils/ppp

  ### update-modules: start processing /etc/modutils/setserial
  #
  # This is what I wanted to do, but logger is in /usr/bin, which isn't
  # loaded when the module is first loaded into the kernel at boot time!
  #
  #post-install serial /etc/init.d/setserial start | 
  #logger -p daemon.info -t "setserial-module reload"
  #pre-remove serial /etc/init.d/setserial stop | 
  #logger -p daemon.info -t "setserial-module uload"
  #
  alias /dev/tts          serial
  alias /dev/tts/0        serial
  alias /dev/tts/1        serial
  alias /dev/tts/2        serial
  alias /dev/tts/3        serial
  post-install serial /etc/init.d/setserial modload > /dev/null 2> /dev/null
  pre-remove serial /etc/init.d/setserial modsave  > /dev/null 2> /dev/null

  ### update-modules: end processing /etc/modutils/setserial

  ### update-modules: start processing /etc/modutils/arch/i386
  alias parport_lowlevel parport_pc
  alias char-major-10-144 nvram
  alias binfmt-0064 binfmt_aout
  alias char-major-10-135 rtc

  ### update-modules: end processing /etc/modutils/arch/i386
  

/etc/modutils

这些实用程序旨在使 Linux 模块化内核对于所有用户、管理员和发行版维护人员来说都是可管理的。

/etc/mtools

Debian 默认 mtools 配置文件。 mtools 系列命令适用于软盘上的 MS-DOS 文件和目录。 这允许您在 DOS 和 Windows 系统上将 Linux 与 MS-DOS 格式化的软盘一起使用。

/etc/manpath.conf

man_db 包使用此文件来配置 man 和 cat 路径。 它还用于通过检查其 PATH 环境变量为没有 manpath 的人提供 manpath。 有关详细信息,请参阅 manpath(5) 手册页。

/etc/mediaprm

以前名为 /etc/fdprm。 有关更多详细信息,请参阅 /etc/fdprm。

/etc/motd

每日消息,在成功登录后自动输出。 内容由系统管理员决定。 通常用于向每个用户获取信息,例如有关计划停机时间的警告。 Linux debian.localdomain.com 2.4.18 #1 Sat Mar 15 00:17:39 EST 2003 i686 unknown Debian GNU/Linux 系统附带的大多数程序都是可以自由重新分发的; 每个程序的准确分发条款在 /usr/share/doc/*/copyright 中的各个文件中描述 Debian GNU/Linux 绝对不提供任何保证,适用法律允许的范围除外。

/etc/mtab

当前已挂载文件系统的列表。 最初由启动脚本设置,并由 mount 命令自动更新。 当需要已挂载文件系统的列表时使用,例如,df 命令。 此文件有时是指向 /proc/mounts 的符号链接。

/etc/networks

系统当前所在的网络列表。 例如,192.168.0.0。

/etc/nsswitch.conf

系统数据库/名称服务交换机配置文件。

/etc/oss.conf

OSS(开放声音系统)配置文件。

/etc/pam.d/

此目录是 PAM(可插入身份验证模块)的配置文件的家目录。

/etc/postfix/

保存您的 postfix 配置文件。 Postfix 现在是 Linux 发行版中首选的 MTA。 它与 sendmail 兼容,与 sendmail 相比,它提供了更高的速度、易于管理和安全性。 它最初由 IBM 开发,被称为 IBM 安全邮件程序,并在许多大型商业网络中使用。 它现在是事实上的标准。

/etc/ppp/

放置拨号配置文件的位置。 很可能由基于文本菜单的 pppconfig 或其他基于 GUI 的 ppp 配置实用程序(如 kppp 或 gnome-ppp)创建。

/etc/pam.conf

大多数程序使用 /etc/pam.d/ 目录下的文件来设置其 PAM 服务模块。 可以使用此文件,但不建议使用。

/etc/paper.config

纸张尺寸配置文件。

/etc/papersize

默认纸张尺寸。

/etc/passwd

这是“旧”密码文件,它为了兼容性而保留,并包含用户数据库,其中字段给出用户名、真实姓名、主目录、加密密码以及有关每个用户的其他信息。 格式在 passwd 手册页中记录。

root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:100:sync:/bin:/bin/sync games:x:5:100:games:/usr/games:/bin/sh
man:x:6:100:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh
postgres:x:31:32:postgres:/var/lib/postgres:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
operator:x:37:37:Operator:/var:/bin/sh
list:x:38:38:SmartList:/var/list:/bin/sh irc:x:39:39:ircd:/var:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/home:/bin/sh
binh:x:1000:1000:,,,:/home/binh:/bin/bash
identd:x:100:65534::/var/run/identd:/bin/false
sshd:x:101:65534::/var/run/sshd:/bin/false gdm:x:102:101:Gnome Display
Manager:/var/lib/gdm:/bin/false
telnetd:x:103:103::/usr/lib/telnetd:/bin/false
dummy:x:1001:1001:,,,:/home/dummy:/bin/bash

/etc/passwd-

旧的 /etc/passwd 文件。

/etc/printcap

打印机配置(功能)文件。 所有系统打印机(无论是本地打印机还是远程打印机)的定义都存储在此文件中。 其布局类似于 /etc/termcap,但它使用不同的语法。

/etc/profile

Bourne 或 C shell 在登录或启动时要执行的文件和命令。 这些允许系统管理员为所有用户设置全局默认值。

/etc/profile.d

登录到 Bourne 或 C shell 时要执行的 Shell 脚本。 这些脚本通常从 /etc/profile 文件中调用。

/etc/protocols

协议定义文件。 它描述了可从 TCP/IP 子系统获得的各种 DARPA Internet 协议。 应该参考它,而不是使用 ARPA 包含文件中的数字或求助于猜测。 此文件应保持不变,因为更改可能会导致不正确的 IP 数据包。

/etc/pcmcia

PCMCIA 设备的配置文件。 通常仅对笔记本电脑用户有用。

/etc/reportbug.conf

reportbug 的配置文件。 Reportbug 主要用于报告 Debian 发行版中的错误。 默认情况下,它会创建一个电子邮件发送到 mit@bugs.debian.org 的 Debian 错误跟踪系统,其中包含有关错误的信息。 使用 -bts 选项,您还可以向其他也使用 ddebbugs 的服务器(如 KDE.org)报告错误。 它类似于 bug,但具有更强大的功能,同时仍保持简单性。

/etc/rc.boot 或 /etc/rc?.d

这些目录包含控制系统服务和配置运行级别所需的所有文件。 /etc/init.d/skeleton 中提供了一个骨架文件

/etc/rcS.d

此目录中的脚本在系统启动时执行一次,即使直接启动到单用户模式也是如此。 这些文件都是符号链接,实际文件位于 /etc/init.d/ 中。 有关此技术的更一般性讨论,请参阅 /etc/init.d/README。

/etc/resolv.conf

DNS 如何发生的配置在此文件中定义。 它告诉名称解析器库需要去哪里查找在 /etc/hosts 文件中找不到的信息。 这始终至少有一行 nameserver,但最好是三行。 解析器依次使用每个名称服务器。 可以包含超过前三个名称服务器,但超出前三个的任何名称服务器都将被忽略。 /etc/resolv.conf 文件中出现的两行是 domain 和 search。 这两个都是互斥选项,并且当两者都出现时,最后一个获胜。 手册页中列出了此处讨论的三个条目之外的其他条目,但并不常用。

/etc/rmt

这不是错误。 提供此 shell 脚本 (/etc/rmt) 是为了与其他类 Unix 系统兼容,其中一些系统具有期望在远程系统上的 /etc 目录中找到(并执行)rmt 的实用程序。

/etc/rpc

rpc 文件包含用户可读的名称,这些名称可以代替 rpc 程序编号使用。 每行包含以下信息: -rpc 程序的服务器名称 -rpc 程序编号 -别名 项目之间用任意数量的空格和/或制表符分隔。 “#”表示注释的开始; 直到行尾的字符不会被搜索文件的例程解释。

  # /etc/rpc:
  # $Id: etc.xml,v 1.10 2004/02/03 21:42:57 binh Exp $
  #
  # rpc 88/08/01 4.0 RPCSRC; from 1.12   88/02/07 SMI

  portmapper	100000	portmap sunrpc
  rstatd		100001	rstat rstat_svc rup perfmeter
  rusersd		100002	rusers
  nfs		100003	nfsprog
  ypserv		100004	ypprog
  mountd		100005	mount showmount
  ypbind		100007
  walld		100008	rwall shutdown
  yppasswdd	100009	yppasswd
  etherstatd	100010	etherstat
  rquotad		100011	rquotaprog quota rquota
  sprayd		100012	spray
  3270_mapper	100013
  rje_mapper	100014
  selection_svc	100015	selnsvc
  database_svc	100016
  rexd		100017	rex
  alis		100018
  sched		100019
  llockmgr	100020
  nlockmgr	100021
  x25.inr		100022
  statmon		100023
  status		100024
  bootparam	100026
  ypupdated	100028	ypupdate
  keyserv		100029	keyserver
  tfsd		100037 
  nsed		100038
  nsemntd		100039
  pcnfsd		150001
  amd		300019	amq
  sgi_fam		391002
  ugidd		545580417
  bwnfsd          788585389
  

/etc/samba

Samba 配置文件。 类似于 Unix 的“LanManager”的文件和打印机服务器。 Samba 软件套件是实现 unix 系统 SMB 协议的程序集合,允许您为 Windows、NT、OS/2 和 DOS 客户端提供文件和打印机服务。 此协议有时也称为 LanManager 或 NetBIOS 协议。

/etc/sane.d

Sane 配置文件。 SANE 代表“Scanner Access Now Easy”,它是一个应用程序编程接口 (API),提供对任何光栅图像扫描仪硬件(平板扫描仪、手持扫描仪、视频和静态相机、帧捕获器等)的标准化访问。 SANE API 是公共领域,其讨论和开发对所有人开放。 当前源代码是为 UNIX(包括 GNU/Linux)编写的,并根据 GNU 通用公共许可证(SANE API 也可用于专有应用程序和后端)提供。

SANE 是一个通用扫描仪接口。 这种通用接口的价值在于,它允许每个图像采集设备只编写一个驱动程序,而不是每个设备和应用程序编写一个驱动程序。 因此,如果您有三个应用程序和四个设备,传统上您将不得不编写 12 个不同的程序。 使用 SANE,这个数字减少到 7 个:三个应用程序加上四个驱动程序。 当然,随着越来越多的驱动程序和/或应用程序的添加,节省的成本甚至更大。

SANE 不仅减少了开发时间和代码重复,还提高了应用程序可以工作的级别。 因此,它将启用以前在 UNIX 世界中闻所未闻的应用程序。 虽然 SANE 主要针对 UNIX 环境,但该标准经过精心设计,使得在几乎任何硬件或操作系统上实现 API 成为可能。

虽然 SANE 是“Scanner Access Now Easy”的缩写,但希望 SANE 确实是理智的,因为它允许轻松实现 API,同时适应当今扫描仪硬件和应用程序所需的所有功能。 具体而言,SANE 应该足够广泛,以适应扫描仪、数码静态和摄像机以及图像文件过滤器等虚拟设备。

如果您熟悉 TWAIN,您可能会想知道为什么需要 SANE。 简而言之,TWAIN 不会将用户界面与设备的驱动程序分开。 不幸的是,这使得难以(如果不是不可能)提供对图像采集设备的网络透明访问(如果您有一个局域网,但扫描仪仅连接到一台或两台机器,这很有用;对于远程控制的相机等来说,这显然也很有用)。 这也意味着任何特定的 TWAIN 驱动程序都几乎与特定的 GUI API(无论是 Win32 还是 Mac API)绑定在一起。 相比之下,SANE 干净地将设备控件与其在用户界面中的表示形式分开。 因此,SANE 可以轻松支持命令行驱动的界面或网络透明扫描。 出于这些原因,不太可能出现可以与 TWAIN 驱动程序对话的 SANE 后端。 然而,反过来是没有问题的:通过 TWAIN 源访问 SANE 设备将非常简单。 总之,如果 TWAIN 的设计稍微好一点,那么 SANE 就没有存在的理由了,但事情就是这样,TWAIN 根本不 SANE。

/etc/securetty

标识安全终端,即允许 root 登录的终端。 通常只列出虚拟控制台,这样就无法(或至少更难)通过调制解调器或网络入侵系统来获得超级用户权限。

 
  # /etc/securetty: list of terminals on which root is allowed to login.
  # See securetty(5) and login(1).
  console

  # Standard consoles
  tty1
  tty2
  tty3
  tty4
  tty5
  tty6
  tty7
  tty8
  tty9
  tty10
  tty11
  tty12

  # Same as above, but these only occur with devfs devices
  vc/1
  vc/2
  vc/3
  vc/4
  vc/5
  vc/6
  vc/7
  vc/8
  vc/9
  vc/10
  vc/11
  vc/12
  

/etc/sensors.conf

libsensors 的配置文件。 一组旨在通过主板传感器芯片确定当前硬件状态的库。 可以通过使用这些库的第三方实用程序(如“gkrellm”)确定有用的统计信息,例如内核电压、CPU 温度。 如果您不想安装这些软件包,您也可以利用 /proc 文件系统的实时特性。

/etc/sudoers

Sudoers 文件。 必须使用 root 用户的“visudo”命令编辑此文件。 sudo 命令允许经过身份验证的用户以 root 用户身份执行授权命令。 有效的 UID 和 GID 都设置为 0(您基本上是 root 用户)。 它确定哪些用户已获得授权以及他们被授权使用的命令。 此命令的配置是通过此文件进行的。

/etc/shadow

安装了影子密码软件 (PAM) 的系统上的影子密码文件。 影子密码将加密密码从 /etc/passwd 移动到 /etc/shadow; 后者除了 root 用户外,任何人都不可读。 这使得破解密码变得更加困难。

/etc/shadow-

旧的 /etc/shadow 文件。

/etc/sysctl.conf

用于设置系统变量(最值得注意的是内核参数)的配置文件。 “sysctl”是一种在运行时配置内核某些方面的方法,而 /proc/sys/ 目录的存在使您甚至不需要特殊工具来执行此操作!

/etc/security

对安全至关重要。 此子目录允许管理员施加配额限制、访问限制,并配置 PAM 环境。

/etc/serial.conf

串行端口配置。 可更改的参数包括速度、波特率、端口、irq 和类型。

/etc/services

系统上可用的网络、服务以及每个协议的关联端口的定义。 例如,默认情况下,Web 服务 (http) 分配给端口 80。 # /etc/services: # $Id: etc.xml,v 1.10 2004/02/03 21:42:57 binh Exp $ # # 网络服务,Internet 风格 # # 请注意,IANA 目前的政策是为 TCP 和 UDP 分配一个 # 众所周知的端口号; 因此,大多数条目 # 在这里都有两个条目,即使协议不支持 UDP # 操作。 从 RFC 1700,“分配的号码”(1994 年 10 月)更新。 # 并非所有端口都包含在内,仅包含更常见的端口。 echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote msp 18/tcp # 消息发送协议 msp 18/udp # 消息发送协议 chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp-data 20/tcp ftp 21/tcp fsp 21/udp fspd ssh 22/tcp # SSH 远程登录协议 ssh 22/udp # SSH 远程登录协议 telnet 23/tcp # 24 - private smtp 25/tcp mail # 26 - unassigned time 37/tcp timserver time 37/udp timserver rlp 39/udp resource # 资源位置 nameserver 42/tcp name # IEN 116 whois 43/tcp nicname re-mail-ck 50/tcp # 远程邮件检查协议 re-mail-ck 50/udp # 远程邮件检查协议 domain 53/tcp nameserver # 名称域服务器 domain 53/udp nameserver netbios-ns 137/tcp # NETBIOS 名称服务 netbios-ns 137/udp netbios-dgm 138/tcp # NETBIOS 数据报服务 netbios-dgm 138/udp netbios-ssn 139/tcp # NETBIOS 会话服务 netbios-ssn 139/udp x11 6000/tcp x11-0 # X 窗口系统 x11 6000/udp x11-0 # X 窗口系统

/etc/shells

列出受信任的 shell。 chsh 命令允许用户仅将其登录 shell 更改为此文件中列出的 shell。 ftpd,为机器提供 FTP 服务的服务器进程,将检查用户的 shell 是否在 /etc/shells 中列出,并且除非 shell 在那里列出,否则不允许人们登录。 还有一些显示管理器会被动或主动(取决于所使用的发行版和显示管理器)拒绝用户访问系统,除非他们的 shell 是此处列出的 shell 之一。

  # /etc/shells: valid login shells
  /bin/ash
  /bin/bash
  /bin/csh
  /bin/sh
  /usr/bin/es
  /usr/bin/ksh 
  /bin/ksh
  /usr/bin/rc
  /usr/bin/tcsh
  /bin/tcsh
  /usr/bin/zsh
  /bin/sash
  /bin/zsh
  /usr/bin/esh
  

/etc/skel/

每个新用户的默认文件都存储在此目录中。 每次添加新用户时,这些骨架文件都会复制到其主目录中。 平均系统将具有:.alias、.bash_profile、.bashrc 和 .cshrc 文件。 其他文件留给系统管理员决定。

/etc/sysconfig/

此目录包含用于设置系统配置细节和启动过程的配置文件和子目录,例如“clock”(设置时区)或“keyboard”(控制键盘映射)。 内容可能会因您安装的发行版和实用程序而差异很大。 例如,在基于 Redhat 或 Mandrake 的系统上,可以更改从默认桌面到是否应为 IDE 设备启用 DMA 的无限数量的属性。 但是,在我们的 Debian 参考系统上,此文件夹几乎是临时的,仅包含两个文件 hwconf 和 soundcard,它们分别由 Redhat 实用程序 hwconf 和 sndconfig 配置。

/etc/slip

用于设置和操作 SLIP(串行线路 IP)接口的配置文件。 如今通常不使用。 此协议已被更快、更高效的 PPP 协议取代。

/etc/screenrc

这是系统范围的 screenrc。 您可以使用此文件来更改系统范围的 screen 的默认行为,或将其复制到 ~/.screenrc 并将其用作您自己设置的起点。 此文件中的命令用于设置选项、将 screen 功能绑定到按键、重新定义终端功能以及在 screen 会话开始时自动建立一个或多个窗口。 这不是选项的完整列表,请查看 screen 手册以了解您可以放入此文件中的所有详细信息。

/etc/scrollkeeper.conf

一个免费的电子文档编目系统。 它存储由 http://www.ibiblio.org/osrt/omf/ (开放源代码元数据框架) 指定的元数据,以及直接从文档中提取的某些元数据(例如目录)。 它提供与此元数据相关的各种功能,以帮助浏览器,例如对注册文档进行排序或搜索元数据以查找满足一组条件的文档。

/etc/ssh

“ssh”配置文件。 “ssh”是一个安全的 rlogin/rsh/rcp 替代品 (OpenSSH)。 这是 OpenSSH 的可移植版本,OpenSSH 是 IETF secsh 工作组指定的安全外壳协议的免费实现。 “ssh”(安全外壳)是一个用于登录远程计算机并在远程计算机上执行命令的程序。 它在两个不受信任的主机之间通过不安全的网络提供安全的加密通信。 X11 连接和任意 TCP/IP 端口也可以通过安全通道转发。 它旨在替代 rlogin、rsh 和 rcp,并且可以用作向应用程序提供安全通信通道。 应该注意的是,在某些国家/地区,特别是伊拉克和巴基斯坦,在没有特殊许可的情况下使用任何加密可能是非法的。

/etc/syslog.conf

列出日志文件应放置的位置、写入日志文件的消息以及详细程度。 现在还可以根据消息内容、消息完整性、消息加密(近期)、可移植性和更好的网络转发进行过滤。

/etc/termcap

终端功能数据库。 描述各种终端可以控制的“转义序列”。 程序的编写方式是,它们不是直接输出仅在特定品牌的终端上工作的转义序列,而是在 /etc/termcap 中查找执行他们想要做的任何事情的正确序列。 因此,大多数程序都适用于大多数类型的终端。

/etc/timezone

本地时区。

/etc/updatedb.conf

设置 updatedb 使用的环境变量,因此配置“locate”的数据库,“locate”是一个在文件名数据库中查找模式并返回匹配文件名的实用程序。

  # This file sets environment variables which are used by updatedb

  # filesystems which are pruned from updatedb database
  PRUNEFS="NFS nfs afs proc smbfs autofs auto iso9660 ncpfs coda devpts ftpfs"
  export PRUNEFS
  # paths which are pruned from updatedb database
  PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /amd /alex /var/spool"
  export PRUNEPATHS
  # netpaths which are added
  NETPATHS=""
  export NETPATHS
  

/etc/vga

用于 svgalib 的配置文件存储在此目录中。 svgalib 为在系统控制台上运行的程序提供图形功能,而无需通过 X Window 系统。 它使用对视频硬件的直接访问来提供对标准 VGA 和 SVGA 图形模式的低级访问。 它仅适用于某些视频硬件; 因此请谨慎使用。

/etc/vim

包含 vim 及其基于 X 的对应物 gvim 的配置文件。 可以通过这两个文件访问各种选项,例如自动缩进、语法突出显示等等……

/etc/xinetd.d/

原始的“inetd”守护程序现在已被大大改进的“xinetd”取代。 “inetd”应在启动时由 /etc/init.d/inetd(或某些系统上的 /etc/rc.local)运行。 然后,它侦听某些 Internet 套接字上的连接。 当在其中一个套接字上找到连接时,它会确定套接字对应的服务,并调用程序来服务请求。 程序完成后,它会继续侦听套接字(在某些情况下除外)。 本质上,inetd 允许运行一个守护程序来调用其他几个守护程序,从而减少系统负载。 通过 xinetd 控制的服务将其配置文件放在此处。

/etc/zlogin

zsh(1) 的系统范围的 .zlogin 文件。 此文件仅针对登录 shell 获取。 它应包含仅应在登录 shell 中执行的命令。 它应用于设置终端类型并运行一系列外部命令(fortune、msgs、from 等)

/etc/zlogout

用户从 zsh 退出时要执行的命令。 它的控制是系统范围的,但 zsh(1) 的 .zlogout 文件在重要性方面会覆盖它。

/etc/zprofile

zsh(1) 的系统范围的 .zprofile 文件。 此文件仅针对登录 shell 获取(即,以“-”作为 argv[0] 的第一个字符调用的 shell,以及以 -l 标志调用的 shell。)

/etc/zshenv

zsh(1) 的系统范围的 .zshenv 文件。 此文件在 shell 的所有调用中获取。 如果存在 -f 标志,或者如果在此文件中设置了 NO_RCS 选项,则会跳过所有其他初始化文件。 此文件应包含用于设置命令搜索路径以及其他重要环境变量的命令。 此文件不应包含产生输出或假定 shell 连接到 tty 的命令。

/etc/zshrc

zsh(1) 的系统范围的 .zshrc 文件。 此文件仅针对交互式 shell 获取。 它应包含用于设置别名、函数、选项、按键绑定等的命令。

符合 FSSTND 的要求,/etc 中需要以下目录或指向目录的符号链接

  opt       Configuration for /opt
  X11       Configuration for the X Window system (optional)
  sgml      Configuration for SGML (optional)
  xml       Configuration for XML (optional)

  The following directories, or symbolic links to directories must be in /etc,
  if the corresponding subsystem is installed:

  opt       Configuration for /opt

  The following files, or symbolic links to files, must be in /etc if the
  corresponding subsystem is installed (it is recommended that files be
  stored in subdirectories of /etc/ rather than directly in /etc:

  csh.login   Systemwide initialization file for C shell logins (optional)
  exports     NFS filesystem access control list (optional)
  fstab       Static information about filesystems (optional)
  ftpusers    FTP daemon user access control list (optional)
  gateways    File which lists gateways for routed (optional)
  gettydefs   Speed and terminal settings used by getty (optional)
  group       User group file (optional)
  host.conf   Resolver configuration file (optional)
  hosts       Static information about host names (optional)
  hosts.allow Host access file for TCP wrappers (optional)
  hosts.deny  Host access file for TCP wrappers (optional)
  hosts.equiv List of trusted hosts for rlogin, rsh, rcp (optional)
  hosts.lpd   List of trusted hosts for lpd (optional)
  inetd.conf  Configuration file for inetd (optional)
  inittab     Configuration file for init (optional)
  issue       Pre-login message and identification file (optional)
  ld.so.conf  List of extra directories to search for shared libraries 
              (optional)
  motd        Post-login message of the day file (optional)
  mtab        Dynamic information about filesystems (optional)
  mtools.conf Configuration file for mtools (optional)
  networks    Static information about network names (optional)
  passwd      The password file (optional)
  printcap    The lpd printer capability database (optional)
  profile     Systemwide initialization file for sh shell logins (optional)
  protocols   IP protocol listing (optional)
  resolv.conf Resolver configuration file (optional)
  rpc         RPC protocol listing (optional)
  securetty   TTY access control for root login (optional)
  services    Port names for network services (optional)
  shells      Pathnames of valid login shells (optional)
  syslog.conf Configuration file for syslogd (optional) 

  mtab does not fit the static nature of /etc: it is excepted for historical
  reasons. On some Linux systems, this may be a symbolic link to /proc/mounts,
  in which case this exception is not required.

  /etc/opt : Configuration files for /opt
  Host-specific configuration files for add-on application software packages
  must be installed within the directory /etc/opt/&60;subdir&62;, where 
  &60;subdir&62; is the name of the subtree in /opt where the static data
  from that package is stored.

  No structure is imposed on the internal arrangement of /etc/opt/&60;subdir&62;.
  If a configuration file must reside in a different location in order for the
  package or system to function properly, it may be placed in a location other
  than /etc/opt/&60;subdir&62;.

  The rationale behind this subtree is best explained by refering to the
  rationale for /opt.

  /etc/X11 : Configuration for the X Window System (optional)
  /etc/X11 is the location for all X11 host-specific configuration. This
  directory is necessary to allow local control if /usr is mounted read only.

  The following files, or symbolic links to files, must be in /etc/X11 if the
  corresponding subsystem is installed:

  Xconfig    The configuration file for early versions of XFree86 (optional)
  XF86Config The configuration file for XFree86 versions 3 and 4 (optional)
  Xmodmap    Global X11 keyboard modification file (optional)

  Subdirectories of /etc/X11 may include those for xdm and for any other
  programs (some window managers, for example) that need them.

  /etc/X11/xdm holds the configuration files for xdm. These are most of the
  files previously found in /usr/lib/X11/xdm. Some local variable data for
  xdm is stored in /var/lib/xdm.

  It is recommended that window managers with only one configuration file
  which is a default .*wmrc file must name it system.*wmrc (unless there is
  a widely-accepted alternative name) and not use a subdirectory. Any window
  manager subdirectories must be identically named to the actual window 
  manager binary.

  /etc/sgml : Configuration files for SGML (optional)
  Generic configuration files defining high-level parameters of the SGML
  systems are installed here. Files with names *.conf indicate generic
  configuration files. File with names *.cat are the DTD-specific centralized
  catalogs, containing references to all other catalogs needed to use the 
  given DTD. The super catalog file catalog references all the centralized
  catalogs.

  /etc/xml : Configuration files for XML (optional)
  Generic configuration files defining high-level parameters of the XML
  systems are installed here. Files with names *.conf indicate generic
  configuration files. The super catalog file catalog references all the
  centralized catalogs.		  
  


1.7. /home

Linux 是一个多用户环境,因此每个用户也被分配一个特定的目录,该目录仅对他们和系统管理员可见。 这些是用户主目录,可以在“/home/$USER”(~)下找到。 这是您的游乐场:一切都在您的命令之下,您可以编写文件、删除文件、安装程序等等……您的主目录包含您的个人配置文件,即所谓的点文件(它们的名称前面有一个点)。 个人配置文件通常是“隐藏的”,如果您想查看它们,您必须在文件管理器中打开相应的选项,或者使用 -a 开关运行 ls。 如果个人配置文件和系统范围的配置文件之间存在冲突,则个人文件中的设置将优先。

最终用户最有可能更改的点文件可能是您的 .xsession 和 .bashrc 文件。 分别是 X 和 Bash 的配置文件。 它们允许您能够更改登录时启动的窗口管理器,以及别名、用户指定的命令和环境变量。 几乎总是,当创建用户时,他们的点文件将从 /etc/skel 目录中获取,系统管理员在该目录中放置一个示例文件,用户可以随意修改该文件。

/home 可能会变得非常大,并且可以用于存储下载内容、编译、安装和运行程序、您的邮件、您的图像或声音文件集合等。

FSSTND 声明

  /home is a fairly standard concept, but it is clearly a site-specific
  filesystem. 
  
  Different people prefer to place user accounts in a variety of places. 
  This section describes only a suggested placement for user home
  directories; nevertheless we recommend that all FHS-compliant 
  distributions use this as the default location for home directories.
  On small systems, each user's directory is typically one of the many 
  subdirectories of /home such as /home/smith, /home/torvalds, 
  /home/operator, etc. On large systems (especially when the /home 
  directories are shared amongst many hosts using NFS) it is useful 
  to subdivide user home directories. Subdivision may be accomplished by
  using subdirectories such as /home/staff, /home/guests, /home/students,
  etc.
  
  The setup will differ from host to host. Therefore, no program
  should rely on this location.

  If you want to find out a user's home directory, you should use the 
  getpwent(3) library function rather than relying on /etc/passwd because 
  user information may be stored remotely using systems such as NIS.

  User specific configuration files for applications are stored in the
  user's home directory in a file that starts with the '.' character 
  (a "dot file"). If an application needs to create more than one dot
  file then they should be placed in a subdirectory with a name starting
  with a '.' character, (a "dot directory"). In this case the
  configuration files should not start with the '.' character.

  It is recommended that apart from autosave and lock files programs
  should refrain from creating non dot files or directories in a home
  directory without user intervention.
  


1.8. /initrd

initrd provides the capability to load a RAM disk by the boot
loader. This RAM disk can then be mounted as the root file
system and programs can be run from it. Afterwards, a new
root file system can be mounted from a different device. The
previous root (from initrd) is then moved to a directory and
can be subsequently unmounted.

initrd is mainly designed to allow system startup to occur 
in two phases, where the kernel comes up with a minimum set
of compiled-in drivers, and where additional modules are 
loaded from initrd.

Operation
---------

When using initrd, the system typically boots as follows:

 1) the boot loader loads the kernel and the initial RAM disk
 2) the kernel converts initrd into a "normal" RAM disk and
    frees the memory used by initrd
 3) initrd is mounted read-write as root
 4) /linuxrc is executed (this can be any valid executable,
 including shell scripts; it is run with uid 0 and can do
 basically everything init can do)
 5) linuxrc mounts the "real" root file system
 6) linuxrc places the root file system at the root directory
    using the pivot_root system call
 7) the usual boot sequence (e.g. invocation of /sbin/init) is
    performed on the root file system
 8) the initrd file system is removed

Note that changing the root directory does not involve unmounting 
it. It is therefore possible to leave processes running on initrd
during that procedure. Also note that file systems mounted under 
initrd continue to be accessible.

Usage scenarios
---------------

The main motivation for implementing initrd was to allow
for modular kernel configuration at system installation. 
The procedure would work as follows:

 1) system boots from floppy or other media with a minimal kernel
    (e.g. support for RAM disks, initrd, a.out, and the Ext2 FS)
    and loads initrd
 2) /linuxrc determines what is needed to (1) mount the "real" root
    FS (i.e. device type, device drivers, file system) and (2) the
    distribution media (e.g. CD-ROM, network, tape, ...). This can
    be done by asking the user, by auto-probing, or by using a
    hybrid approach.
 3) /linuxrc loads the necessary kernel modules
 4) /linuxrc creates and populates the root file system (this
    doesn't have to be a very usable system yet)
 5) /linuxrc invokes pivot_root to change the root file system and
    execs - via chroot - a program that continues the installation
 6) the boot loader is installed
 7) the boot loader is configured to load an initrd with the set of
    modules that was used to bring up the system (e.g. /initrd can
    be modified, then unmounted, and finally, the image is written
    from /dev/ram0 or /dev/rd/0 to a file)
 8) now the system is bootable and additional installation tasks
    can be performed

The key role of initrd here is to re-use the configuration data 
during normal system operation without requiring the use of a 
bloated "generic" kernel or re-compiling or re-linking the kernel.

A second scenario is for installations where Linux runs on systems 
with different hardware configurations in a single administrative 
domain. In such cases, it is desirable to generate only a small set 
of kernels (ideally only one) and to keep the system-specific part 
of configuration information as small as possible. In this case, a 
common initrd could be generated with all the necessary modules. 
Then, only /linuxrc or a file read by it would have to be different.

A third scenario are more convenient recovery disks, because 
information like the location of the root FS partition doesn't have 
to be provided at boot time, but the system loaded from initrd can 
invoke a user-friendly dialog and it can also perform some sanity 
checks (or even some form of auto-detection).

Last not least, CD-ROM distributors may use it for better installation 
from CD, e.g. by using a boot floppy and bootstrapping a bigger RAM disk 
via initrd from CD; or by booting via a loader like LOADLIN or directly 
from the CD-ROM, and loading the RAM disk from CD without need of floppies.


1.9. /lib

/lib 目录包含内核模块和启动系统并在根文件系统中运行命令(即 /bin 和 /sbin 中的二进制文件)所需的那些共享库映像(C 编程代码库)。 库很容易通过其 *.so 的文件名扩展名来识别。 Windows 中共享库的等效项将是 DLL(动态链接库)文件。 它们对于基本系统功能至关重要。 内核模块(驱动程序)位于子目录 /lib/modules/'kernel-version' 中。 为确保正确的模块编译,您应确保 /lib/modules/'kernel-version'/kernel/build 指向 /usr/src/'kernel-version',或确保 Makefile 知道内核源本身的位置。

/lib/'机器架构'

包含平台/架构相关的库。

/lib/iptables

iptables 共享库文件。

/lib/kbd

包含各种键盘映射。

/lib/modules/'kernel-version'

所有内核模块的家目录。 此处的文件组织相当清晰,因此无需详细说明。

/lib/modules/'kernel-version'/isapnpmap.dep

具有有关基于 ISA 的卡、它们需要的模块和各种其他属性的详细信息。

/lib/modules/'kernel-version'/modules.dep

列出所有模块依赖项。 可以使用 depmod 命令更新此文件。

/lib/modules/'kernel-version'/pcimap

是 /lib/modules/'kernel-version'/isapnpmap.dep 文件的 PCI 等效文件。

/lib/modules/'kernel-version'/usbmap

是 /lib/modules/'kernel-version'/isapnpmap.dep 文件的 USB 等效文件。

/lib/oss

默认情况下,所有 OSS(开放声音系统)文件都安装在此处。

/lib/security

PAM 库文件。

The FSSTND states that the /lib directory contains those shared library
images needed to boot the system and run the commands in the root filesystem,
ie. by binaries in /bin and /sbin.

Shared libraries that are only necessary for binaries in /usr (such as any 
X Window binaries) must not be in /lib. Only the shared libraries required
to run binaries in /bin and /sbin may be here. In particular, the library 
libm.so.* may also be placed in /usr/lib if it is not required by anything
in /bin or /sbin.

At least one of each of the following filename patterns are required (they 
may be files, or symbolic links):

libc.so.* The dynamically-linked C library (optional)
ld*       The execution time linker/loader (optional)

If a C preprocessor is installed, /lib/cpp must be a reference to it, for
historical reasons. The usual placement of this binary is /usr/bin/cpp.

The following directories, or symbolic links to directories, must be in 
/lib, if the corresponding subsystem is installed:

modules   Loadable kernel modules (optional)

/lib<qual> : Alternate format essential shared libraries (optional)

There may be one or more variants of the /lib directory on systems which
support more than one binary format requiring separate libraries.

This is commonly used for 64-bit or 32-bit support on systems which support
multiple binary formats, but require libraries of the same name. In this 
case, /lib32 and /lib64 might be the library directories, and /lib a symlink
to one of them.

If one or more of these directories exist, the requirements for their contents
are the same as the normal /lib directory, except that /lib<qual>/cpp is 
not required.

/lib<qual>/cpp is still permitted: this allows the case where /lib and 
/lib<qual> are the same (one is a symbolic link to the other).


1.10. /lost+found

正如先前在 FSSTND 概述中解释的那样,Linux 应该始终经过适当的关机程序。 有时您的系统可能会崩溃,或者电源故障可能会导致机器宕机。 无论哪种情况,在下次启动时,都会进行漫长的文件系统检查(此检查的速度取决于您实际使用的文件系统类型。例如,ext3 比 ext2 快,因为它是一个日志文件系统),使用 fsck 进行检查。 Fsck 将遍历系统并尝试恢复它找到的任何损坏的文件。 此恢复操作的结果将放置在此目录中。 恢复的文件不太可能是完整的或有意义的,但总有机会恢复一些有价值的东西。 每个分区都有自己的 lost+found 目录。 如果您在那里找到文件,请尝试将它们移回其原始位置。 如果您发现类似指向“file”的损坏的符号链接,则必须从相应的 RPM 重新安装文件,因为您的文件系统损坏得非常严重,以至于文件被破坏得面目全非。 下面是 /lost+found 目录的示例。 正如您所看到的,这里包含的绝大多数文件实际上是套接字。 至于其余文件,它们被发现是损坏的系统文件和个人文件。 这些文件无法恢复。

      total 368
      -rw-r--r-- 1 root root 110891 Oct 5 14:14 #388200
      -rw-r--r-- 1 root root 215 Oct 5 14:14 #388201
      -rw-r--r-- 1 root root 110303 Oct 6 23:09 #388813
      -rw-r--r-- 1 root root 141 Oct 6 23:09 #388814
      -rw-r--r-- 1 root root 110604 Oct 6 23:09 #388815a
      -rw-r--r-- 1 root root 194 Oct 6 23:09 #388816
      srwxr-xr-x 1 root root 0 Oct 6 13:00 #51430
      srwxr-xr-x 1 root root 0 Oct 6 00:23 #51433
      -rw------- 1 root root 63 Oct 6 00:23 #51434
      srwxr-xr-x 1 root root 0 Oct 6 13:00 #51436
      srwxrwxrwx 1 root root 0 Oct 6 00:23 #51437
      srwx------ 1 root root 0 Oct 6 00:23 #51438
      -rw------- 1 root root 63 Oct 6 13:00 #51439
      srwxrwxrwx 1 root root 0 Oct 6 13:00 #51440
      srwx------ 1 root root 0 Oct 6 13:00 #51442
      -rw------- 1 root root 63 Oct 6 23:09 #51443
      srwx------ 1 root root 0 Oct 6 10:40 #51445
      srwxrwxrwx 1 root root 0 Oct 6 23:09 #51446
      srwx------ 1 root root 0 Oct 6 23:09 #51448
      


1.11. /media

在系统和网络管理员的大量争议和惊愕中,现在创建了一个包含可移动媒体挂载点的目录。 有趣的是,它被命名为 /media。

This directory contains subdirectories which are used as mount points for
removeable media such as floppy disks, cdroms and zip disks.

The motivation for the creation of this directory has been that historically
there have been a number of other different places used to mount removeable
media such as /cdrom, /mnt or /mnt/cdrom. Placing the mount points for all 
removeable media directly in the root directory would potentially result in 
a large number of extra directories in /. Although the use of subdirectories
in /mnt as a mount point has recently been common, it conflicts with a much 
older tradition of using /mnt directly as a temporary mount point.

The following directories, or symbolic links to directories, must be in /media,
if the corresponding subsystem is installed:

floppy     Floppy drive (optional)
cdrom      CD-ROM drive (optional)
cdrecorder CD writer (optional)
zip        Zip drive (optional)

On systems where more than one device exists for mounting a certain type of
media, mount directories can be created by appending a digit to the name of
those available above starting with '0', but the unqualified name must also
exist.

A compliant implementation with two CDROM drives might have /media/cdrom0
and /media/cdrom1 with /media/cdrom a symlink to either of these.

请参阅关于 /mnt 目录的部分,以更好地理解挂载和卸载文件系统的过程。


1.12. /mnt

这是一个通用的挂载点,您可以在其下挂载文件系统或设备。 挂载是指使文件系统可供系统使用的过程。 挂载后,您可以通过挂载点访问您的文件。 此目录通常包含挂载点或子目录,您可以在其中挂载软盘和 CD。 如果您愿意,您也可以在此处创建其他挂载点。 标准挂载点将包括 /mnt/cdrom 和 /mnt/floppy。 在系统的任何位置创建挂载点都没有限制,但按照惯例和纯粹的实用性,请勿用挂载点塞满您的文件系统。 应该注意的是,某些发行版(如 Debian)将 /floppy 和 /cdrom 分配为挂载点,而 Redhat 和 Mandrake 分别将它们放在 /mnt/floppy 和 /mnt/cdrom 中。

但是,应该注意的是,自 FSSTND 2.3 版本起,此目录的用途已更改。

  This directory is provided so that the system administrator may temporarily
  mount a filesystem as needed. The content of this directory is a local issue
  and should not affect the manner in which any program is run.

  This directory must not be used by installation programs: a suitable temporary
  directory not in use by the system must be used instead.
  


1.12.1. 挂载和卸载

在使用文件系统之前,必须先挂载它。 然后操作系统会执行各种簿记操作,以确保一切正常运行。 由于 UNIX 中的所有文件都位于单个目录树中,因此挂载操作将使新文件系统的内容看起来像是某些已挂载文件系统中现有子目录的内容。

挂载可以像以下示例中那样完成

 
  $ mount /dev/hda2 /home 
  $ mount /dev/hda3 /usr
  $ 
  
mount 命令接受两个参数。 第一个参数是对应于包含文件系统的磁盘或分区​​的设备文件。 第二个参数是它将挂载在其下的目录。 在这些命令之后,两个文件系统的内容看起来就像/home/usr目录的内容一样。 然后人们会说“/dev/hda2 挂载在 /home”上,对于/usr也是如此。 要查看任何一个文件系统,人们都会查看它已挂载的目录的内容,就像它是任何其他目录一样。 请注意设备文件,/dev/hda2和已挂载目录,/home之间的区别。 设备文件提供对磁盘原始内容的访问,已挂载目录提供对磁盘上文件的访问。 已挂载目录称为挂载点

Linux 支持多种文件系统类型。 mount 尝试猜测文件系统的类型。 您也可以使用-t fstype选项直接指定类型; 这有时是必要的,因为 mount 使用的启发式方法并非总是有效。 例如,要挂载 MS-DOS 软盘,您可以使用以下命令

  $ mount -t msdos /dev/fd0 /floppy
   $
  

已挂载目录不必为空,尽管它必须存在。 但是,当文件系统挂载时,其中的任何文件都将无法按名称访问。 (任何已经打开的文件仍然可以访问。从其他目录具有硬链接的文件可以使用这些名称访问。) 这没有任何危害,甚至可能很有用。 例如,有些人喜欢让/tmp/var/tmp同义,并使/tmp成为/var/tmp的符号链接。 当系统启动时,在/var文件系统挂载之前,将使用位于根文件系统上的/var/tmp目录。 当/var挂载时,它将使根文件系统上的/var/tmp目录无法访问。 如果/var/tmp不存在于根文件系统上,则在挂载/var.

之前将无法使用临时文件。如果您不打算向文件系统写入任何内容,请使用 mount-r

开关执行只读挂载。 这将使内核停止任何写入文件系统的尝试,并且还将阻止内核更新 inode 中的文件访问时间。 只读挂载对于不可写介质(例如 CD-ROM)是必需的。

细心的读者已经注意到一个轻微的后勤问题。 第一个文件系统(称为根文件系统,因为它包含根目录)是如何挂载的?因为它显然不能挂载在另一个文件系统上? 好吧,答案是它是通过魔术完成的。

有关更多信息,请参阅内核源代码或《内核黑客指南》。

根文件系统在启动时神奇地挂载,并且可以依靠它始终处于挂载状态。 如果无法挂载根文件系统,则系统将无法启动。 神奇地挂载为根的文件系统的名称要么编译到内核中,要么使用 LILO 或 rdev 设置。

根文件系统通常首先以只读方式挂载。 启动脚本然后将运行 fsck 来验证其有效性,如果没有问题,它们将重新挂载它,以便也允许写入。 fsck 不得在已挂载的文件系统上运行,因为在 fsck 运行时对文件系统的任何更改都将引起麻烦。 由于根文件系统在检查时以只读方式挂载,因此 fsck 可以毫无顾虑地修复任何问题,因为重新挂载操作将刷新文件系统在内存中保留的任何元数据。/etc/fstab在许多系统上,还有其他文件系统也应在启动时自动挂载。 这些在

文件中指定; 有关格式的详细信息,请参见 fstab 手册页。 额外文件系统何时挂载的详细信息取决于许多因素,并且可以由每个管理员根据需要进行配置。

当不再需要挂载文件系统时,可以使用 umount 卸载它。

当然应该是 unmount,但 n 神秘地消失在 70 年代,并且自那以后就再也没有出现过。 如果您找到它,请将其退回给新泽西州贝尔实验室。

  $ umount /dev/hda2
  $ umount /usr
  $
  

umount 接受一个参数:设备文件或挂载点。 例如,要卸载上一个示例的目录,可以使用以下命令

有关如何使用该命令的更多说明,请参见手册页。 务必始终卸载已挂载的软盘。 不要只是弹出驱动器中的软盘! 由于磁盘缓存,数据不一定在您卸载软盘后才写入软盘,因此过早地从驱动器中取出软盘可能会导致内容变得混乱。 如果您仅从软盘读取,则这种情况不太可能发生,但是如果您写入(即使是意外写入),结果可能是灾难性的。挂载和卸载需要超级用户权限,即只有 root 用户才能执行此操作。 这样做的原因是,如果任何用户都可以在任何目录上挂载软盘,那么很容易创建一个带有特洛伊木马的软盘,伪装成/bin/sh

  • 或任何其他常用程序。 但是,通常有必要允许用户使用软盘,并且有几种方法可以做到这一点

  • 给用户 root 密码。 这显然安全性很差,但却是最简单的解决方案。 如果无论如何都不需要安全性,则效果很好,这在许多非联网的个人系统上都是如此。

  • 使用诸如 sudo 之类的程序来允许用户使用 mount。 这仍然安全性很差,但不会直接向所有人授予超级用户权限。 [1]

  • 让用户使用 mtools,这是一个用于操作 MS-DOS 文件系统的软件包,而无需挂载它们。 如果只需要 MS-DOS 软盘,这效果很好,但在其他情况下则相当笨拙。/etc/fstab.

/etc/fstab中列出软盘设备及其允许的挂载点以及合适的选项

  /dev/fd0 /floppy
  msdos user,noauto 0 0
  

最后一个替代方案可以通过在

文件中添加类似以下行的内容来实现列是:要挂载的设备文件,要挂载到的目录,文件系统类型,选项,备份频率(由 dump 使用)和 fsck 传递号(用于指定启动时应检查文件系统的顺序;0 表示不检查)。选项noauto阻止在系统启动时自动执行此挂载(即,它阻止 mount -a 挂载它)。

 
  $ mount /floppy
  $
  

选项

user/etc/fstab:

  /dev/fd0 /dosfloppy msdos user,noauto 0 0 /dev/fd0
  /ext2floppy ext2 user,noauto 0 0
  

允许任何用户挂载文件系统,并且出于安全原因,禁止从已挂载的文件系统执行程序(普通程序或 setuid 程序)和解释设备文件。 在此之后,任何用户都可以使用以下命令挂载带有 msdos 文件系统的软盘软盘可以(当然也需要)使用相应的 umount 命令卸载。, 如果您想提供对多种类型软盘的访问,则需要提供多个挂载点。 每个挂载点的设置可以不同。 例如,要提供对 MS-DOS 和 ext2 软盘的访问,您可以在中添加以下两行对于 MS-DOS 文件系统(不仅仅是软盘),您可能希望使用文件系统选项来限制对其的访问,这些选项在 mount 手册页上有详细描述。 如果您不小心,挂载 MS-DOS 文件系统会使每个人至少具有对其文件中文件的读取权限,这不是一个好主意。


1.13. /opt

此目录保留用于所有不属于默认安装的软件和附加软件包。 例如,StarOffice、Kylix、Netscape Communicator 和 WordPerfect 软件包通常在此处找到。 为了符合 FSSTND,所有第三方应用程序都应安装在此目录中。 任何要安装在此处的软件包都必须将其静态文件(即,额外的字体、剪贴画、数据库文件)放在单独的 /opt/'package' 或 /opt/'provider' 目录树中(类似于 Windows 将新软件安装到其自己的目录树 C:\Windows\Progam Files\"Program Name" 的方式),其中 'package' 是描述软件包的名称,'provider' 是提供商的 LANANA 注册名称。

尽管大多数发行版都忽略创建目录 /opt/bin、/opt/doc、/opt/include、/opt/info、/opt/lib 和 /opt/man,但它们保留供本地系统管理员使用。 软件包可以提供“前端”文件,这些文件旨在由系统管理员放置(通过链接或复制)到这些保留目录中,但在没有这些保留目录的情况下也必须正常运行。 用户要调用的程序位于目录 /opt/'package'/bin 中。 如果软件包包含 UNIX 手册页,则它们位于 /opt/'package'/man 中,并且必须使用与 /usr/share/man 相同的子结构。 软件包的可变文件必须安装在 /var/opt 中。 主机特定的配置文件安装在 /etc/opt 中。

在任何情况下,其他软件包文件都不得存在于 /opt、/var/opt 和 /etc/opt 层次结构之外,除非那些必须驻留在文件系统树中特定位置才能正常运行的软件包文件除外。 例如,/var/lock 中的设备锁定文件和 /dev 中的设备。 发行版可能会在 /opt 中安装软件,但未经本地系统管理员的同意,不得修改或删除本地系统管理员安装的软件。

/opt 用于附加软件的使用在 UNIX 社区中是一种行之有效的实践。 基于 System V 接口定义(第三版)和 Intel 二进制兼容性标准 v. 2 (iBCS2) 的 System V 应用程序二进制接口 [AT&T 1990] 提供了与此处定义的 /opt 结构非常相似的结构。

通常,支持系统上软件包所需的所有数据都必须存在于 /opt/'package' 中,包括旨在复制到 /etc/opt/'package' 和 /var/opt/'package' 以及 /opt 中保留目录的文件。 对使用 /opt 的发行版的次要限制是必要的,因为发行版安装的软件和本地安装的软件之间可能存在冲突,尤其是在某些二进制软件中找到的固定路径名的情况下。

/opt/'provider' 下的目录结构留给软件包的打包者决定,尽管建议将软件包安装在 /opt/'provider'/'package' 中,并遵循与 /opt/package 指南类似的结构。 背离此结构的合理理由是支持软件包,这些软件包可能在 /opt/ 'provider'/lib 或 /opt/'provider'/bin 中安装了文件。


1.14. /proc

/proc 非常特殊,因为它也是一个虚拟文件系统。 它有时被称为进程信息伪文件系统。 它不包含“真实”文件,而是运行时系统信息(例如,系统内存、已挂载的设备、硬件配置等)。 因此,它可以被视为内核的控制和信息中心。 实际上,很多系统实用程序只是对此目录中文件的调用。 例如,“lsmod”与“cat /proc/modules”相同,而“lspci”是“cat /proc/pci”的同义词。 通过更改位于此目录中的文件,您甚至可以在系统运行时读取/更改内核参数 (sysctl)。

此目录中文件最显着的特点是它们的文件大小都为 0,除了 kcore、mtrr 和 self。 目录列表如下所示

total 525256
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 1
dr-xr-xr-x    3 daemon   root            0 Jan 19 15:00 109
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 170
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 173
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 178
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 2
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 3
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 4
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 421
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 425
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 433
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 439
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 444
dr-xr-xr-x    3 daemon   daemon          0 Jan 19 15:00 446
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 449
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 453
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 456
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 458
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 462
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 463
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 464
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 465
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 466
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 467
dr-xr-xr-x    3 gdm      gdm             0 Jan 19 15:00 472
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 483
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 5
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 6
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 7
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 8
-r--r--r--    1 root     root            0 Jan 19 15:00 apm
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 bus
-r--r--r--    1 root     root            0 Jan 19 15:00 cmdline
-r--r--r--    1 root     root            0 Jan 19 15:00 cpuinfo
-r--r--r--    1 root     root            0 Jan 19 15:00 devices
-r--r--r--    1 root     root            0 Jan 19 15:00 dma
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 driver
-r--r--r--    1 root     root            0 Jan 19 15:00 execdomains
-r--r--r--    1 root     root            0 Jan 19 15:00 fb
-r--r--r--    1 root     root            0 Jan 19 15:00 filesystems
dr-xr-xr-x    2 root     root            0 Jan 19 15:00 fs
dr-xr-xr-x    4 root     root            0 Jan 19 15:00 ide
-r--r--r--    1 root     root            0 Jan 19 15:00 interrupts
-r--r--r--    1 root     root            0 Jan 19 15:00 iomem
-r--r--r--    1 root     root            0 Jan 19 15:00 ioports
dr-xr-xr-x   18 root     root            0 Jan 19 15:00 irq
-r--------    1 root     root     536809472 Jan 19 15:00 kcore
-r--------    1 root     root            0 Jan 19 14:58 kmsg
-r--r--r--    1 root     root            0 Jan 19 15:00 ksyms
-r--r--r--    1 root     root            0 Jan 19 15:00 loadavg
-r--r--r--    1 root     root            0 Jan 19 15:00 locks
-r--r--r--    1 root     root            0 Jan 19 15:00 mdstat
-r--r--r--    1 root     root            0 Jan 19 15:00 meminfo
-r--r--r--    1 root     root            0 Jan 19 15:00 misc
-r--r--r--    1 root     root            0 Jan 19 15:00 modules
-r--r--r--    1 root     root            0 Jan 19 15:00 mounts
-rw-r--r--    1 root     root          137 Jan 19 14:59 mtrr
dr-xr-xr-x    3 root     root            0 Jan 19 15:00 net
dr-xr-xr-x    2 root     root            0 Jan 19 15:00 nv
-r--r--r--    1 root     root            0 Jan 19 15:00 partitions
-r--r--r--    1 root     root            0 Jan 19 15:00 pci
dr-xr-xr-x    4 root     root            0 Jan 19 15:00 scsi
lrwxrwxrwx    1 root     root           64 Jan 19 14:58 self -> 483
-rw-r--r--    1 root     root            0 Jan 19 15:00 slabinfo
-r--r--r--    1 root     root            0 Jan 19 15:00 stat
-r--r--r--    1 root     root            0 Jan 19 15:00 swaps
dr-xr-xr-x   10 root     root            0 Jan 19 15:00 sys
dr-xr-xr-x    2 root     root            0 Jan 19 15:00 sysvipc
dr-xr-xr-x    4 root     root            0 Jan 19 15:00 tty
-r--r--r--    1 root     root            0 Jan 19 15:00 uptime
-r--r--r--    1 root     root            0 Jan 19 15:00 version

每个编号的目录都对应于一个实际的进程 ID。 查看进程表,您可以将进程与关联的进程 ID 匹配。 例如,进程表可能指示安全外壳服务器的以下内容

# ps ax | grep sshd
439 ? S 0:00 /usr/sbin/sshd

可以通过查看此进程的目录 /proc/460 中的关联文件来获得此进程的详细信息。 您可能想知道如何查看文件大小为 0 的进程的详细信息。 如果您将其视为进入内核的窗口,则更有意义。 该文件实际上不包含任何数据; 它只是充当指向实际进程信息所在位置的指针。 例如,/proc/460 目录中文件的列表如下所示

total 0
-r--r--r--    1 root     root            0 Jan 19 15:02 cmdline
lrwxrwxrwx    1 root     root            0 Jan 19 15:02 cwd -> /
-r--------    1 root     root            0 Jan 19 15:02 environ
lrwxrwxrwx    1 root     root            0 Jan 19 15:02 exe -> /usr/sbin/sshd
dr-x------    2 root     root            0 Jan 19 15:02 fd
-r--r--r--    1 root     root            0 Jan 19 15:02 maps
-rw-------    1 root     root            0 Jan 19 15:02 mem
lrwxrwxrwx    1 root     root            0 Jan 19 15:02 root -> /
-r--r--r--    1 root     root            0 Jan 19 15:02 stat
-r--r--r--    1 root     root            0 Jan 19 15:02 statm
-r--r--r--    1 root     root            0 Jan 19 15:02 status

下面解释了每个文件的用途和内容

/proc/PID/cmdline

命令行参数。

/proc/PID/cpu

当前和上次执行它的 CPU。

/proc/PID/cwd

指向当前工作目录的链接。

/proc/PID/environ

环境变量的值。

/proc/PID/exe

指向此进程的可执行文件的链接。

/proc/PID/fd

目录,其中包含所有文件描述符。

/proc/PID/maps

到可执行文件和库文件的内存映射。

/proc/PID/mem

此进程持有的内存。

/proc/PID/root

指向此进程的根目录的链接。

/proc/PID/stat

进程状态。

/proc/PID/statm

进程内存状态信息。

/proc/PID/status

人类可读形式的进程状态。

如果您想了解更多信息,proc 的手册页更详细地描述了与正在运行的进程 ID 关联的每个文件。

即使文件大小显示为 0,检查其内容也会发现并非如此

# cat status

Name: sshd
State: S (sleeping)
Tgid: 439
Pid: 439
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 32
Groups: 
VmSize:     2788 kB
VmLck:        0 kB
VmRSS:     1280 kB
VmData:      252 kB
VmStk:       16 kB
VmExe:      268 kB
VmLib:     2132 kB
SigPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 8000000000001000
SigCgt: 0000000000014005
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff

/proc 目录中的文件与进程 ID 子目录文件非常相似。 例如,检查 /proc/interrupts 文件的内容会显示如下内容

# cat interrupts

           CPU0       
  0:      32657          XT-PIC  timer
  1:       1063          XT-PIC  keyboard
  2:          0          XT-PIC  cascade
  8:          3          XT-PIC  rtc
  9:          0          XT-PIC  cmpci
 11:        332          XT-PIC  nvidia
 14:       5289          XT-PIC  ide0
 15:         13          XT-PIC  ide1
NMI:          0 
ERR:          0

左侧列中的每个数字代表正在使用的中断。 检查文件的内容会动态收集关联的数据并将其显示在屏幕上。 大多数 /proc 文件系统是只读的; 但是,某些文件允许更改内核变量。 这提供了一种机制,可以在不重新编译和重新启动的情况下实际调整内核。

procinfo 实用程序将 /proc 文件系统信息汇总到类似于以下的显示中

# /usr/bin/procinfo

Linux 2.4.18 (root@DEB) (gcc 2.95.4 20011002 ) #2 1CPU [DEB.(none)]

Memory:      Total        Used        Free      Shared     Buffers      Cached
Mem:        513908      107404      406504           0        2832       82180
Swap:       265032           0      265032

Bootup: Sun Jan 19 14:58:27 2003    Load average: 0.29 0.13 0.05 1/30 566

user  :       0:00:10.26   2.3%  page in :    74545  disk 1:     6459r     796w
nice  :       0:00:00.00   0.0%  page out:     9416  disk 2:       19r       0w
system:       0:00:19.55   4.5%  swap in :        1
idle  :       0:06:48.30  93.2%  swap out:        0
uptime:       0:07:18.11         context :    22059

irq  0:     43811 timer                 irq  9:         0 cmpci                
irq  1:      1427 keyboard              irq 11:       332 nvidia               
irq  2:         0 cascade [4]           irq 12:         2                      
irq  6:         2                       irq 14:      7251 ide0                 
irq  8:         3 rtc                   irq 15:        83 ide1                 

/proc/apm

高级电源管理信息。

/proc/bus

包含特定于总线信息的目录。

/proc/cmdline

内核命令行。

/proc/cpuinfo

有关处理器的信息,例如其类型、制造商、型号和性能。

/proc/devices

配置到当前正在运行的内核中的设备驱动程序列表(块设备和字符设备)。

/proc/dma

显示当前正在使用的 DMA 通道。

/proc/driver

此处分组的各种驱动程序,当前为 rtc

/proc/execdomains

与安全性相关的执行域。

/proc/fb

帧缓冲设备。

/proc/filesystems

内核配置/支持的文件系统。

/proc/fs

文件系统参数,当前为 nfs/exports。

/proc/ide

此子目录包含内核知道的所有 IDE 设备的信息。 每个 IDE 控制器都有一个子目录,文件 drivers 和每个 IDE 设备的链接,指向控制器特定的子树中的设备目录。 文件 drivers 包含有关用于 IDE 设备的驱动程序的常规信息。 更详细的信息可以在控制器特定的子目录中找到。 这些子目录名为 ide0、ide1 等。 这些目录中的每一个都包含此处显示的文件

/proc/ide/ide?/channel

IDE 通道(0 或 1)

/proc/ide/ide?/config

配置(仅适用于 PCI/IDE 桥接器)

/proc/ide/ide?/mate

Mate 名称(片上合作伙伴控制器)

/proc/ide/ide?/model

IDE 控制器的类型/芯片组

连接到控制器的每个设备在控制器目录中都有一个单独的子目录。 列出的以下文件包含在这些目录中

/proc/ide/ide?/model/cache

缓存。

/proc/ide/ide?/model/capacity

介质容量(以 512 字节块为单位)

/proc/ide/ide?/model/driver

驱动程序和版本

/proc/ide/ide?/model/geometry

物理和逻辑几何结构

/proc/ide/ide?/model/identify

设备标识块

/proc/ide/ide?/model/media

介质类型

/proc/ide/ide?/model/model

设备标识符

/proc/ide/ide?/model/settings

设备设置

/proc/ide/ide?/model/smart_thresholds

IDE 磁盘管理阈值

/proc/ide/ide?/model/smart_values

IDE 磁盘管理值

/proc/interrupts

显示正在使用的中断以及每个中断的数量。

例如,您可以通过查看文件 /proc/interrupts 来检查当前正在使用的中断以及它们用于什么

# cat /proc/interrupts

 
  CPU0 0: 8728810 
  XT-PIC timer 1: 895
  XT-PIC keyboard 2: 
  0 XT-PIC cascade 3: 531695 
  XT-PIC aha152x 4: 2014133
  XT-PIC serial 5: 44401 
  XT-PIC pcnet_cs 8: 2 
  XT-PIC rtc 11: 8 
  XT-PIC i82365 12: 182918 
  XT-PIC PS/2 Mouse 13: 1 
  XT-PIC fpu 14: 1232265 
  XT-PIC ide0 15: 7
  XT-PIC ide1 NMI: 0 
  

在基于 2.4 的内核中,在此文件中添加了几行 LOC & ERR(这是 SMP 机器的输出)

# cat /proc/interrupts

 
  CPU0 CPU1 
  0: 1243498 1214548 IO-APIC-edge timer 
  1: 8949 8958 IO-APIC-edge keyboard 
  2: 0 0 XT-PIC cascade 
  5: 11286 10161 IO-APIC-edge soundblaster 
  8: 1 0 IO-APIC-edge rtc 
  9: 27422 27407 IO-APIC-edge 3c503 
  12: 113645 113873 IO-APIC-edge PS/2 Mouse 
  13: 0 0 XT-PIC fpu 14: 22491 24012 IO-APIC-edge ide0 
  15: 2183 2415 IO-APIC-edge ide1 
  17: 30564 30414 IO-APIC-level eth0 
  18: 177 164 IO-APIC-level bttv NMI: 2457961 2457959 
              LOC: 2457882 2457881 ERR: 2155 
  

在这种情况下,NMI 会递增,因为每个定时器中断都会生成一个 NMI(不可屏蔽中断),NMI Watchdog 使用该中断来检测查找。

LOC 是每个 CPU 内部 APIC 的本地中断计数器。

ERR 在 IO-APIC 总线(连接 SMP 系统中 CPU 的总线)发生错误时递增。 这意味着已检测到错误,IO-APIC 会自动重试传输,因此这不应该是一个大问题,但您应该阅读 SMP-FAQ。

在这种情况下,值得注意的是 2.4 中的新 irq 目录。 它可以用于设置 IRQ 到 CPU 的亲和性,这意味着您可以将 IRQ “挂钩”到仅一个 CPU,或者排除 CPU 处理 IRQ。 irq 子目录的内容是每个 IRQ 的一个子目录和一个文件; prof_cpu_mask。 例如,

 
  # ls /proc/irq/ 0 10 12 14 16 18 2 4 6 8 prof_cpu_mask 
                  1 11 13 15 17 19 3 5 7 9
  

 
  # ls /proc/irq/0/ smp_affinity
  

默认情况下,prof_cpu_mask 文件和每个 IRQ 的每个 smp_affinity 文件的内容是相同的

  # cat /proc/irq/0/smp_affinity
  ffffffff 
  

它是一个位掩码,您可以在其中指定哪些 CPU 可以处理 IRQ,您可以通过执行

# echo 1 > /proc/irq/prof_cpu_mask

来设置它。 这意味着只有第一个 CPU 将处理 IRQ,但您也可以回显 5,这意味着只有第一个和第四个 CPU 可以处理 IRQ。 IRQ 的路由方式由 IO-APIC 处理,并且在其允许处理 IRQ 的所有 CPU 之间进行轮询。 像往常一样,内核比您拥有更多信息,并且比您做得更好,因此默认设置几乎是每个人的最佳选择。

/proc/iomem

内存映射。

/proc/ioports

当前正在使用的 I/O 端口。

/proc/irq

irq 到 cpu 亲和性的掩码。

/proc/isapnp

ISA PnP (即插即用) 信息。

/proc/kcore

系统物理内存的映像(可以是 ELF 或 A.OUT (在 2.4 中已弃用))。 这与您的物理内存大小完全相同,但实际上并没有占用那么多内存; 它是程序访问时动态生成的。 (请记住:除非您将其复制到其他位置,否则 /proc 下的任何内容都不会占用任何磁盘空间。)

/proc/kmsg

内核输出的消息。 这些消息也路由到 syslog。

/proc/ksyms

内核符号表。

/proc/loadavg

系统的“负载平均值”; 过去 1、5 和 15 分钟内系统完成的工作量的三个指标。

/proc/locks

内核锁。

/proc/meminfo

有关内存使用情况的信息,包括物理内存和交换空间。 连接此文件会产生与使用“free”或“top”的前几行类似的结果。

/proc/misc

各种信息片段。 这是用于在 proc 文件系统的其余部分中没有实际位置的信息。

/proc/modules

当前加载的内核模块。 通常,其输出与“lsmod”命令给出的输出相同。

/proc/mounts

已挂载的文件系统

/proc/mtrr

有关 mtrr 的信息。 (在 Intel P6 系列处理器(Pentium Pro、Pentium II 和更高版本)上,内存类型范围寄存器 (MTRR) 可用于控制处理器对内存范围的访问。 当您在 PCI 或 AGP 总线上安装了视频 (VGA) 卡时,这最有用。 启用写合并允许总线写入传输在通过 PCI/AGP 总线突发传输之前合并为更大的传输。 这可以将图像写入操作的性能提高 2.5 倍或更多。 Cyrix 6x86、6x86MX 和 M II 处理器具有地址范围寄存器 (ARR),它们提供与 MTRR 类似的功能。 对于这些处理器,ARR 用于模拟 MTRR。 AMD K6-2(步进 8 及更高版本)和 K6-3 处理器具有两个 MTRR。 这些都受支持。 AMD Athlon 系列提供 8 个 Intel 风格的 MTRR。 Centaur C6 (WinChip) 具有 8 个 MCR,允许写合并。 这些也受支持。 VIA Cyrix III 和 VIA C3 CPU 提供 8 个 Intel 风格的 MTRR。) 有关 mtrr 技术的更多详细信息,请参见 /usr/src/linux/Documentation/mtrr.txt。

/proc/net

有关网络协议的状态信息。

IPv6 信息

/proc/net/udp6

UDP 套接字 (IPv6)。

/proc/net/tcp6

TCP 套接字 (IPv6)。

/proc/net/raw6

原始设备统计信息 (IPv6)。

/proc/net/igmp6

此主机加入的 IP 组播地址 (IPv6)。

/proc/net/if_inet6

IPv6 接口地址列表。

/proc/net/ipv6_route

IPv6 的内核路由表。

/proc/net/rt6_stats

全局 IPv6 路由表统计信息。

/proc/net/sockstat6

套接字统计信息 (IPv6)。

/proc/net/snmp6

Snmp 数据 (IPv6)。

常规网络信息

/proc/net/arp

内核 ARP 表。

/proc/net/dev

带有统计信息的网络设备。

/proc/net/dev_mcast

设备正在侦听的 Layer2 组播组(接口索引、标签、引用数、绑定地址数)。

/proc/net/dev_stat

网络设备状态。

/proc/net/ip_fwchains

防火墙链链接。

/proc/net/ip_fwnames

防火墙链名称。

/proc/net/ip_masq

包含伪装表的目录。

/proc/net/ip_masquerade

主要伪装表。

/proc/net/netstat

网络统计信息。

/proc/net/raw

原始设备统计信息。

/proc/net/route

内核路由表。

/proc/net/rpc

包含 rpc 信息的目录。

/proc/net/rt_cache

路由缓存。

/proc/net/snmp

SNMP 数据。

/proc/net/sockstat

套接字统计信息。

/proc/net/tcp

TCP 套接字。

/proc/net/tr_rif

令牌环 RIF 路由表。

/proc/net/udp

UDP 套接字。

/proc/net/unix

UNIX 域套接字。

/proc/net/wireless

无线接口数据(Wavelan 等)。

/proc/net/igmp

此主机加入的 IP 组播地址。

/proc/net/psched

全局数据包调度程序参数。

/proc/net/netlink

PF_NETLINK 套接字列表。

/proc/net/ip_mr_vifs

组播虚拟接口列表。

/proc/net/ip_mr_cache

组播路由缓存列表。

您可以使用此信息来查看系统中可用的网络设备以及通过这些设备路由了多少流量。 此外,每个通道绑定接口都有自己的目录。 例如,bond0 设备将有一个名为 /proc/net/bond0/ 的目录。 它将包含特定于该绑定的信息,例如绑定的当前从属设备、从属设备的链接状态以及从属设备链接失败的次数。

/proc/parport

目录 /proc/parport 包含有关系统并行端口的信息。 它为每个端口都有一个子目录,以端口号命名(0,1,2,...)。

/proc/parport/autoprobe

已获取的任何 IEEE-1284 设备 ID 信息。

/proc/parport/devices

使用该端口的设备驱动程序列表。 当前正在使用该端口的设备名称旁边会出现一个 + 号(可能不会出现在任何设备旁边)。

/proc/parport/hardware

并行端口的基地址、IRQ 线和 DMA 通道。

/proc/parport/irq

parport 用于该端口的 IRQ。 这在一个单独的文件中,以便您可以通过写入新值(IRQ 号或 none)来更改它。

/proc/partitions

系统已知的分区表

/proc/pci, /proc/bus/pci

已弃用的 PCI 总线信息。

/proc/rtc

实时时钟

/proc/scsi

如果您的系统中有 SCSI 主机适配器,您将在 /proc/scsi 中找到一个以该适配器的驱动程序命名的子目录。 您还将在 /proc/scsi 中看到所有已识别的 SCSI 设备的列表。 以驱动程序命名的目录为系统中找到的每个适配器都有一个文件。 这些文件包含有关控制器的信息,包括使用的 IRQ 和 IO 地址范围。 显示的信息量取决于您使用的适配器。

/proc/self

指向正在查看 /proc 的程序的进程目录的符号链接。 当两个进程查看 /proc 时,它们会获得不同的链接。 这主要是为了方便程序更轻松地访问其进程目录。

/proc/slabinfo

slabinfo 文件提供有关 slab 级别的内存使用情况的信息。 Linux 在 2.2 版本中对页面级别以上的内存管理使用 slab 池。 常用对象有自己的 slab 池(例如网络缓冲区、目录缓存等)。

/proc/stat

有关系统的总体/各种统计信息,例如自系统启动以来发生的页面错误数。

/proc/swaps

交换空间利用率

/proc/sys

这不仅是信息的来源,还允许您在内核中更改参数,而无需重新编译甚至系统重启。 尝试这样做时请小心,因为它既可以优化您的系统,也可能使其崩溃。 建议在实际进行调整之前阅读文档和源代码。 /proc 中的条目可能在内核版本之间略有变化,因此如果有任何疑问,请查看目录 /usr/src/linux/Documentation 中的内核文档。 在某些情况下,一旦发生错误,您可能别无选择,只能重新启动计算机。 要更改值,只需将新值回显到文件中即可。 下面的文件系统数据部分给出了一个示例。 当然,您需要成为“root”用户才能执行任何这些操作。 您可以创建自己的启动脚本,以便在每次系统启动时执行此操作。

/proc/sys/fs

包含文件系统数据。 此子目录包含特定的文件系统、文件句柄、inode、dentry 和配额信息。

dentry-state

目录缓存的状态。 由于目录条目是动态分配和释放的,因此此文件指示当前状态。 它包含六个值,其中最后两个未使用,并且始终为零。 其他值如下所示

 
  File      Content 
  nr_dentry Almost always zero 
  nr_unused Number of unused cache entries 
  age_limit in seconds after the entry may be 
            reclaimed, when memory is short want_pages internally
  

dquot-max

文件 dquot-max 显示缓存的磁盘配额条目的最大数量。

dquot-nr

显示已分配的磁盘配额条目数和空闲磁盘配额条目数。 如果可用的缓存磁盘配额数量非常少,并且您有大量同时在线的系统用户,您可能需要提高限制。

file-nr 和 file-max

内核动态分配文件句柄,但此时不会再次释放它们。 file-max 中的值表示 Linux 内核将分配的最大文件句柄数。 当您收到大量关于文件句柄用完的错误消息时,您可能需要提高此限制。 默认值为 4096。 要更改它,只需将新数字写入文件

  # cat /proc/sys/fs/file-max
  4096
  # echo 8192 > /proc/sys/fs/file-max
  # cat /proc/sys/fs/file-max
  8192
  

这种修订方法对于内核的所有可自定义参数都很有用 - 只需将新值回显到相应的文件即可。

file-nr 中的三个值表示已分配的文件句柄数、已使用的文件句柄数和最大文件句柄数。 当已分配的文件句柄接近最大值,但实际使用的句柄数远远落后时,您已经遇到了文件句柄使用高峰,并且您不需要增加最大值。

inode-state、inode-nr 和 inode-max

与文件句柄一样,内核动态分配 inode 结构,但还无法释放它们。

inode-max 中的值表示 inode 处理程序的最大数量。 此值应比 file-max 中的值大 3 到 4 倍,因为 stdin、stdout 和网络套接字也需要 inode 结构来处理它们。 如果您经常用完 inode,则应增加此值。

文件 inode-nr 包含 inode-state 中的前两个项目,因此我们将跳到该文件...

inode-state 包含三个实际数字和四个虚拟值。这些数字依次是 nr_inodes、nr_free_inodes 和 preshrink。

nr_inodes

表示系统已分配的 inode 数量。这可能略高于 inode-max,因为 Linux 每次分配一个页面大小的 inode。

nr_free_inodes

表示空闲 inode 的数量,当 nr_inodes 大于 inode-max 且系统需要修剪 inode 列表而不是分配更多 inode 时,preshrink 为非零值。

super-nr 和 super-max

同样,超级块结构由内核分配,但不释放。文件 super-max 包含超级块句柄的最大数量,其中 super-nr 显示当前已分配的数量。每个挂载的文件系统都需要一个超级块,因此如果您计划挂载大量文件系统,您可能需要增加这些数字。

binfmt_misc

这处理内核对各种二进制格式的支持。 binfmt_misc 提供了向内核注册其他二进制格式的能力,而无需编译额外的模块/内核。因此,binfmt_misc 需要知道二进制文件开头或文件扩展名中的魔数。它的工作原理是维护一个结构体的链表,其中包含二进制格式的描述,包括带有大小(或文件扩展名)、偏移量和掩码的魔数,以及解释器名称。根据请求,它会使用原始程序作为参数调用给定的解释器,就像 binfmt_java、binfmt_em86 和 binfmt_mz 所做的那样。由于 binfmt_misc 没有定义任何默认的二进制格式,您必须注册一个额外的二进制格式。 binfmt_misc 中有两个通用文件,每个注册的格式都有一个文件。这两个通用文件是 register 和 status。要注册新的二进制格式,您必须发出命令 echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register,并带有适当的名称(/proc-dir 条目的名称)、偏移量(如果省略则默认为 0)、魔数、掩码(可以省略,默认为全 0xff)以及最后但并非最不重要的,要调用的解释器(例如和测试 /bin/echo)。 Type 可以是 M,表示常用的魔数匹配,也可以是 E,表示文件扩展名匹配(用扩展名代替魔数)。如果您在文件 /proc/sys/fs/binfmt_misc/status 上执行 cat 命令,您将获得 binfmt_misc 的当前状态(启用/禁用)。通过将 0(禁用)、1(启用)或 -1(警告:这将清除所有先前注册的二进制格式)回显到 status 来更改状态。例如,echo 0 > status 以禁用 binfmt_misc(临时)。每个注册的处理程序在 /proc/sys/fs/binfmt_misc 中都有一个条目。这些文件执行与 status 相同的功能,但其范围仅限于实际的二进制格式。通过 'cat' 此文件,您还可以收到有关 binfmt 的解释器/魔数的所有相关信息。以下是 binfmt_misc 用法示例(模拟 binfmt_java)

  cd /proc/sys/fs/binfmt_misc 
  echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' 
  > register 
  echo ':HTML:E::html::/usr/local/java/bin/appletviewer:'
  > register 
  echo ':Applet:M::<!--applet::/usr/local/java/bin/appletviewer:' >
  register 
  echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' < register
  

这四行代码添加了对 Java 可执行文件和 Java applet 的支持(类似于 binfmt_java,另外还识别 .html 扩展名,无需在每个 applet 文件中放置 <!--applet>)。您必须安装 JDK 和 shell 脚本 /usr/local/java/bin/javawrapper。它可以解决 Java 文件名处理的缺陷。要添加 Java 二进制文件,只需在路径中的某个位置创建指向 class 文件的链接即可。

/proc/sys/kernel

此目录反映了通用内核行为,内容将取决于您的配置。在这里,您将找到最重要的文件,以及关于它们的含义和使用方法的描述。

/proc/sys/kernel/acct

该文件包含三个值:highwater、lowwater 和 frequency。仅当启用 BSD 风格的进程记帐时才存在。这些值控制其行为。如果日志所在文件系统上的可用空间低于 lowwater 百分比,则记帐暂停。如果高于 highwater 百分比,则记帐恢复。 Frequency 确定您检查可用空间量的频率(值以秒为单位)。默认设置为:4、2 和 30。也就是说,如果可用空间少于 2%,则暂停记帐;如果值为 3% 或更高,则恢复记帐;认为关于可用空间量的信息在 30 秒内有效

/proc/sys/kernel/ctrl-alt-del

当此文件中的值为 0 时,ctrl-alt-del 将被捕获并发送到 init 程序以处理优雅重启。但是,当值大于零时,Linux 对此组合键的反应将是立即重启,而不会同步其脏缓冲区。应该注意的是,当程序(如 dosemu)的键盘处于原始模式时,ctrl-alt-del 会在到达内核 tty 层之前被程序拦截,并且由程序决定如何处理它。

/proc/sys/kernel/domainname, /proc/sys/kernel/hostname

可以控制这些文件来设置您的盒子的 NIS 域名和主机名。对于经典的 darkstar.frop.org,一个简单的操作:# echo "darkstar" > /proc/sys/kernel/hostname # echo "frop.org" > /proc/sys/kernel/domainname 就足以设置您的主机名和 NIS 域名。 /proc/sys/kernel/osrelease, /proc/sys/kernel/ostype, /proc/sys/kernel/version 这些名称使其非常清楚地表明这些字段包含的内容:# cat /proc/sys/kernel/osrelease 2.2.12 # cat /proc/sys/kernel/ostype Linux # cat /proc/sys/kernel/version #4 Fri Oct 1 12:41:14 PDT 1999 文件 osrelease 和 ostype 应该足够清楚了。 Version 需要更多澄清。 #4 表示这是从该源代码库构建的第 4 个内核,其后的日期表示内核构建的时间。调整这些值的唯一方法是重建内核。

/proc/sys/kernel/panic

此文件中的值表示内核在崩溃后等待重启的秒数。当您使用软件看门狗时,建议设置为 60。如果设置为 0,则禁用内核崩溃后的自动重启,这是默认设置。

/proc/sys/kernel/printk

printk 中的四个值分别表示 * console_loglevel、* default_message_loglevel、* minimum_console_level 和 * default_console_loglevel。这些值会影响 printk() 在打印或记录来自内核内部的错误消息时的行为。有关不同日志级别的更多信息,请参阅 syslog(2)。

/proc/sys/kernel/console_loglevel

优先级高于此级别的消息将打印到控制台。

/proc/sys/kernel/default_message_level

没有明确优先级的消息将以该优先级打印。

/proc/sys/kernel/minimum_console_loglevel

可以设置 console_loglevel 的最小值(最高值)。

/proc/sys/kernel/default_console_loglevel

console_loglevel 的默认值。

/proc/sys/kernel/sg-big-buff

此文件显示通用 SCSI (sg) 缓冲区的大小。目前,您还不能调整它,但您可以在编译时通过编辑 include/scsi/sg.h 并更改 SG_BIG_BUFF 的值来更改它。如果您使用带有 SANE (Scanner Access Now Easy) 的扫描仪,您可能希望将其设置为更高的值。请参阅有关此问题的 SANE 文档。

/proc/sys/kernel/modprobe

modprobe 二进制文件所在的位置。内核使用此程序按需加载模块。

/proc/sys/vm

此目录中的文件可用于调整 Linux 内核的虚拟内存 (VM) 子系统的操作。此外,其中一个文件 (bdflush) 对磁盘使用情况也有一定影响。

nfract

此参数控制缓冲区缓存中脏缓冲区的最大数量。脏意味着缓冲区的内容仍需要写入磁盘(与干净缓冲区相反,干净缓冲区可以被遗忘)。将其设置为更高的值意味着 Linux 可以长时间延迟磁盘写入,但也意味着当内存不足时,它将不得不一次执行大量 I/O。较低的值将更均匀地分散磁盘 I/O。

ndirty

Ndirty 给出了 bdflush 一次可以写入磁盘的最大脏缓冲区数。较高的值意味着延迟的突发 I/O,而较小的值可能导致 bdflush 没有足够频繁地唤醒时内存短缺。

nrefill

这是当调用 refill_freelist() 时 bdflush 将添加到空闲缓冲区列表的缓冲区数量。预先分配空闲缓冲区是必要的,因为缓冲区的大小通常与内存页面的大小不同,并且需要预先完成一些簿记工作。数字越高,浪费的内存就越多,并且 refill_freelist() 需要运行的次数就越少。

nref_dirt

当 refill_freelist() 遇到超过 nref_dirt 脏缓冲区时,它将唤醒 bdflush。

age_buffer, age_super

最后,age_buffer 和 age_super 参数控制 Linux 在将脏缓冲区写入磁盘之前等待的最长时间。该值以 jiffies(时钟滴答)表示,每秒的 jiffies 数为 100。 Age_buffer 是数据块的最大年龄,而 age_super 是文件系统元数据的最大年龄。

buffermem

此文件中的三个值控制应该为缓冲区内存使用多少内存。百分比计算为系统总内存的百分比。

这些值是

min_percent

这是应该用于缓冲区内存的最小内存百分比。

borrow_percent

当 Linux 内存不足,并且缓冲区缓存使用的内存超过了分配给它的内存时,内存管理 (MM) 子系统将比其他内存更重地修剪缓冲区缓存以进行补偿。

max_percent

这是可以用于缓冲区内存的最大内存量。

freepages

此文件包含三个值:min、low 和 high

min

当系统中的空闲页面数达到此数字时,只有内核可以分配更多内存。

low

如果空闲页面数降至此点以下,内核将开始积极交换。

high

内核尝试保持高达此数量的空闲内存;如果内存低于此点,内核将开始温和地交换,希望永远不必进行真正激进的交换。

kswapd

Kswapd 是内核交换守护进程。也就是说,kswapd 是内核中在内存碎片化或已满时释放内存的部分。由于每个系统都不同,您可能希望对系统的这一部分进行一些控制。

该文件包含三个数字

tries_base

kswapd 在一轮中尝试释放的最大页面数由此数字计算得出。通常,此数字将除以 4 或 8(请参阅 mm/vmscan.c),因此它并没有看起来那么大。当您需要增加与交换分区的带宽时,您需要增加此数字。

tries_min

这是 kswapd 每次被调用时尝试释放页面的最小次数。基本上,它只是为了确保 kswapd 即使在以最低优先级调用时也会释放一些页面。

swap_cluster

这可能是对系统性能影响最大的因素。 swap_cluster 是 kswapd 一次写入的页面数。您希望此值很大,以便 kswapd 以大块执行 I/O,并且磁盘不必经常寻道,但您不希望它太大,因为那样会淹没请求队列。

overcommit_memory

此文件包含一个值。以下算法用于确定是否有足够的内存:如果 overcommit_memory 的值为正,则始终有足够的内存。这是一个有用的功能,因为程序通常会 '以防万一' malloc() 大量的内存,而它们只使用其中的一小部分。将此值保留为 0 将导致此类大型 malloc() 失败,而实际上系统有足够的内存供程序运行。另一方面,启用此功能可能会导致您耗尽内存并使系统崩溃,因此大型和/或重要的服务器将希望将此值设置为 0。

pagecache

此文件执行与 buffermem 完全相同的工作,只是此文件控制允许用于内存映射和文件通用缓存的内存量。您不希望最小值太低,否则当内存紧张或碎片化严重时,您的系统可能会崩溃。

pagetable_cache

内核在每个处理器的缓存中保留一些页表(这在 SMP 系统上非常有帮助)。每个处理器的缓存大小将在低值和高值之间。在低内存、单 CPU 系统上,您可以安全地将这些值设置为 0,这样您就不会浪费内存。它在 SMP 系统上使用,以便系统可以执行快速页表分配,而无需获取内核内存锁。对于大型系统,设置可能很好。对于普通系统,它们不会造成任何损害。对于小型系统(小于 16MB 内存),将这两个值都设置为 0 可能是有利的。

swapctl

此文件包含不少于 8 个变量。所有这些值都由 kswapd 使用。前四个变量 sc_max_page_age、sc_page_advance、sc_page_decline 和 sc_page_initial_age 用于跟踪 Linux 的页面老化。页面老化是一种簿记方法,用于跟踪哪些内存页面经常使用,哪些页面可以交换出去而不会产生后果。

当页面被换入时,它从 sc_page_initial_age(默认值为 3)开始,当页面被 kswapd 扫描时,其年龄根据以下方案进行调整。

如果页面自上次扫描以来被使用过,则其年龄会增加 sc_page_advance(默认值为 3)。其中最大值由 sc_max_page_age(默认值为 20)给出。否则(意味着它未使用),其年龄会减少 sc_page_decline(默认值为 1)。

当页面的年龄达到 0 时,就可以交换出去了。

变量 sc_age_cluster_fract、sc_age_cluster_min、sc_pageout_weight 和 sc_bufferout_weight 可用于控制 kswapd 在交换页面时的激进程度。

Sc_age_cluster_fract 用于计算 kswapd 要扫描的进程中的页面数。使用的公式是

(sc_age_cluster_fract 除以 1024)乘以常驻集大小

因此,如果您希望 kswapd 扫描整个进程,则 sc_age_cluster_fract 需要具有值 1024。 kswapd 将扫描的最小页面数由 sc_age_cluster_min 表示,这样做是为了 kswapd 也将扫描小型进程。 sc_pageout_weight 和 sc_bufferout_weight 的值用于控制 kswapd 为了交换出一个页面/缓冲区而进行的尝试次数。这些值可用于微调用户页面和缓冲区/缓存内存之间的比率。当您发现您的 Linux 系统正在交换出过多的进程页面以满足缓冲区内存需求时,您可能希望增加 sc_bufferout_weight,或减小 sc_pageout_weight 的值。

/proc/sys/dev

设备特定参数。目前仅支持 CDROM 驱动器,对于 CD-ROM 驱动器,只有一个只读文件包含有关连接到系统的 CD-ROM 驱动器的信息:>cat /proc/sys/dev/cdrom/info CD-ROM 信息,Id: cdrom.c 2.55 1999/04/25 驱动器名称:sr0 hdb 驱动器速度:32 40 驱动器槽数:1 0 能否关闭托盘:1 1 能否打开托盘:1 1 能否锁定托盘:1 1 能否更改速度:1 1 能否选择光盘:0 1 能否读取多会话:1 1 能否读取 MCN:1 1 报告介质已更改:1 1 能否播放音频:1 1 您看到两个驱动器,sr0 和 hdb,以及它们的特性列表。

SUNRPC

/proc/sys/sunrpc

此目录包含四个文件,这些文件启用或禁用 RPC 函数 NFS、NFS-daemon、RPC 和 NLM 的调试。默认值为 0。可以将它们设置为 1 以启用调试。(每个的默认值均为 0)

/proc/sys/net

内核网络部分的接口位于 /proc/sys/net 中。下表显示了所有可能的子目录。您可能只会看到其中的一部分,具体取决于您的内核配置。我们的主要重点将放在 IP 网络上,因为 AX15、X.25 和 DEC Net 在 Linux 世界中只是次要角色。如果您希望查看在线文档和内核源代码以详细了解此处未涵盖的协议的参数。在本节中,我们将讨论上面列出的子目录。由于默认值适用于大多数需求,因此无需更改这些值。

通用参数

/proc/sys/net/core

网络核心选项

rmem_default

套接字接收缓冲区(以字节为单位)的默认设置。

rmem_max

最大接收套接字缓冲区大小(以字节为单位)。

wmem_default

套接字发送缓冲区(以字节为单位)的默认设置。

wmem_max

最大发送套接字缓冲区大小(以字节为单位)。

message_burst 和 message_cost

这些参数用于限制从网络代码写入内核日志的警告消息。它们强制执行速率限制,以使拒绝服务攻击成为不可能。较高的 message_cost 因子会导致写入的消息更少。 Message_burst 控制何时丢弃消息。默认设置将警告消息限制为每五秒一条。

netdev_max_backlog

当接口接收数据包的速度快于内核处理速度时,在 INPUT 侧排队的最大数据包数。

optmem_max

每个套接字允许的最大辅助缓冲区大小。辅助数据是结构 cmsghdr 结构及其附加数据的序列。

UNIX 域套接字

/proc/sys/net/unix

Unix 域套接字的参数

此子目录中只有两个文件。它们控制删除和销毁套接字描述符的延迟。

IPv4

/proc/sys/net/ipv4

IPV4 设置。 IP 版本 4 仍然是 Unix 网络中最常用的协议。它将在未来几年内被 IP 版本 6 取代,但目前它是互联网的事实标准,并在世界各地的大多数网络环境中使用。由于此协议的重要性,我们将更深入地了解控制 Linux 内核的 Ipv4 子系统行为的子树。

让我们从 /proc/sys/net/ipv4 中的条目开始。

ICMP 设置

icmp_echo_ignore_all 和 icmp_echo_ignore_broadcasts

打开 (1) 或关闭 (0),如果内核应忽略所有 ICMP ECHO 请求,或者仅忽略那些针对广播和多播地址的请求。

请注意,如果您接受目标地址为广播/多播的 ICMP 回显请求,您的网络可能会被用作拒绝服务数据包洪泛攻击其他主机的 Exploder。

icmp_destunreach_rate、icmp_echoreply_rate、icmp_paramprob_rate 和 icmp_timeexeed_rate

设置向特定目标发送 ICMP 数据包的限制。值为零表示禁用所有限制。任何正值都以百分之一秒为单位设置最大数据包速率(在 Intel 系统上)。

IP 设置

ip_autoconfig

如果主机通过 RARP、BOOTP、DHCP 或类似机制接收其 IP 配置,则此文件包含数字 1。否则为零。

ip_default_ttl

IPv4 接口的 TTL(生存时间)。这只是数据包可能传播的最大跳数。

ip_dynaddr

在接口地址更改时启用动态套接字地址重写。这对于具有更改 IP 地址的拨号接口很有用。

ip_forward

启用或禁用接口之间 IP 数据包的转发。更改此值会将所有其他参数重置为其默认值。如果内核配置为主机或路由器,则它们会有所不同。

ip_local_port_range

TCP 和 UDP 用于选择本地端口的端口范围。包含两个数字,第一个数字是最低端口,第二个数字是最高本地端口。默认值为 1024-4999。对于高使用率系统,应更改为 32768-61000。

ip_no_pmtu_disc

全局开关,用于关闭路径 MTU 发现。它也可以由应用程序按每个套接字设置,或按每个路由设置。

ip_masq_debug

启用/禁用 IP 伪装的调试。

IP 分片设置

ipfrag_high_trash 和 ipfrag_low_trash

用于重新组装 IP 片段的最大内存。当为此目的分配了 ipfrag_high_thrash 字节的内存时,片段处理程序将丢弃数据包,直到达到 ipfrag_low_thrash。

ipfrag_time

IP 片段在内存中保留的时间(以秒为单位)。

TCP 设置

tcp_ecn

此文件控制 IPv4 标头中 ECN 位的使用,这是一项关于显式拥塞通知的新功能,但某些路由器和防火墙会阻止设置了此位的流量,因此如果您想与这些站点通信,可能需要将 0 回显到 /proc/sys/net/ipv4/tcp_ecn。有关更多信息,您可以阅读 RFC2481。

tcp_retrans_collapse

与某些损坏的打印机的错误到错误的兼容性。在重新传输时,尝试发送更大的数据包以解决某些 TCP 堆栈中的错误。可以通过将其设置为零来关闭。

tcp_keepalive_probes

TCP 发送的保持活动探测的数量,直到它决定连接已断开。

tcp_keepalive_time

启用保持活动时,TCP 发送保持活动消息的频率。默认值为 2 小时。

tcp_syn_retries

TCP 连接尝试的初始 SYN 将被重新传输的次数。不应高于 255。这仅是传出连接的超时时间,对于传入连接,重新传输的次数由 tcp_retries1 定义。

tcp_sack

在 RFC2018 之后启用选择性确认。

tcp_timestamps

启用 RFC1323 中定义的时间戳。

tcp_stdurg

启用对 TCP 紧急指针字段的严格 RFC793 解释。默认值是使用 BSD 兼容的解释,将紧急指针指向紧急数据之后的第一个字节。 RFC793 解释是使其指向紧急数据的最后一个字节。启用此选项可能会导致互操作性问题。默认情况下禁用。

tcp_syncookies

仅当使用 CONFIG_SYNCOOKIES 编译内核时才有效。当套接字的 syn 后备队列溢出时,发送同步 Cookie。这是为了抵御常见的“syn 洪水攻击”。默认情况下禁用。请注意,套接字后备队列的概念已被放弃。这意味着对等方可能无法从启用了 syncookies 的过载服务器接收可靠的错误消息。

tcp_window_scaling

启用 RFC1323 中定义的窗口缩放。

tcp_fin_timeout

接收最终 FIN 之前套接字始终关闭的时间长度(以秒为单位)。这严格来说违反了 TCP 规范,但为了防止拒绝服务攻击而需要这样做。

tcp_max_ka_probes

指示每个慢速计时器运行发送多少保持活动探测。不应设置得太高以防止突发。

tcp_max_syn_backlog

每个套接字后备队列的长度。自 Linux 2.2 以来,listen(2) 中指定的后备队列仅指定已建立套接字的后备队列的长度。当更多连接请求到达时,Linux 开始丢弃数据包。当启用 syncookies 时,数据包仍然会被响应,并且实际上会忽略最大队列。

tcp_retries1

定义在放弃之前,对 TCP 连接请求的响应重新传输的频率。

tcp_retries2

定义在放弃之前,TCP 数据包重新传输的频率。

/proc/sys/net/ipv4/conf

在这里,您将找到系统了解的每个接口的子目录,以及一个名为 all 的目录。 all 子目录中的更改会影响所有接口,而其他子目录中的更改仅影响一个接口。所有目录都具有相同的条目

accept_redirects

此开关决定内核是否接受 ICMP 重定向消息。如果内核配置为常规主机,则默认值为“是”,对于路由器配置,则为“否”。

accept_source_route

是否应接受或拒绝源路由数据包。默认值取决于内核配置。对于路由器,它是“是”,对于主机,它是“否”。

bootp_relay

接受源地址为 0.b.c.d 且目标地址不是此主机的本地数据包。假定 BOOTP 中继守护程序将捕获并转发此类数据包。默认值为 0。

forwarding

在此接口上启用或禁用 IP 转发。

log_martians

记录源地址没有已知路由到内核日志的数据包。

mc_forwarding

执行多播路由。内核需要使用 CONFIG_MROUTE 编译,并且需要多播路由守护程序。

proxy_arp

是否 (1) 执行或不 (0) 执行代理 ARP。

rp_filter

整数值确定是否应进行源验证。 1 表示是,0 表示否。默认情况下禁用,但始终启用本地/广播地址欺骗。如果您在路由器上将此设置为 1,该路由器是网络连接到网络的唯一连接,则它可以防止针对您的内部网络的欺骗攻击(外部地址仍然可以被欺骗),而无需额外的防火墙规则。

secure_redirects

仅接受默认网关列表中列出的网关的 ICMP 重定向消息。默认情况下启用。

shared_media

如果未设置,则内核不假设此设备上的不同子网可以直接通信。默认设置为“是”。

send_redirects

确定是否向其他主机发送 ICMP 重定向。

路由设置

目录 /proc/sys/net/ipv4/route 包含几个文件来控制路由问题。

error_burst 和 error_cost

这些参数用于限制从路由代码写入内核日志的警告消息。 error_cost 因子越高,写入的消息就越少。 Error_burst 控制何时丢弃消息。默认设置将警告消息限制为每五秒一条。

flush

写入此文件会导致刷新路由缓存。

gc_elastic、gc_interval、gc_min_interval、gc_tresh、gc_timeout

用于控制路由缓存的垃圾收集算法的频率和行为的值。

max_size

路由缓存的最大大小。一旦缓存达到此大小,旧条目将被清除。

max_delay、min_delay

刷新路由缓存的延迟。

redirect_load、redirect_number

确定是否应向特定主机发送更多 ICPM 重定向的因素。一旦达到负载限制或最大重定向数,将不再发送重定向。

redirect_silence

重定向的超时时间。在此期间之后,即使由于达到负载或数量限制而停止了重定向,也会再次发送重定向。

/proc/sys/net/ipv4/neigh

网络邻居处理。它包含有关如何处理与直接邻居(连接到同一链接的节点)的连接的设置。正如我们在 conf 目录中看到的那样,有一个 default 子目录,其中保存了默认值,每个接口都有一个目录。目录的内容相同,唯一的例外是默认设置包含用于设置垃圾收集参数的附加选项。

在接口目录中,您将找到以下条目

base_reachable_time

用于计算 RFC2461 中指定的随机可达时间值的基值。

retrans_time

以 jiffies(1/100 秒)表示的时间,介于重新传输的邻居请求消息之间。用于地址解析并确定邻居是否不可达。

unres_qlen

挂起的 arp 请求的最大队列长度 - 当 ARP 地址仍在解析时,从其他层接受的数据包数。

anycast_delay

邻居请求消息的答案中的随机延迟的最大值,以 jiffies(1/100 秒)为单位。尚未实现(Linux 尚不支持任播)。

ucast_solicit

单播请求的最大重试次数。

mcast_solicit

多播请求的最大重试次数。

delay_first_probe_time

如果邻居可达,首次探测的延迟时间。(参见 gc_stale_time)

locktime

只有当旧的 ARP/邻居条目至少存在 locktime 时间后,才会被新的条目替换。这可以防止 ARP 缓存抖动。

proxy_delay

在响应我们拥有代理 ARP 条目的 ARP 请求之前,最大等待时间(实际时间在 [0..proxytime] 范围内随机)。在某些情况下,这用于防止网络泛洪。

proxy_qlen

延迟代理 ARP 定时器的最大队列长度。(参见 proxy_delay)。

app_solcit

确定要发送到用户级别 ARP 守护程序的请求数量。使用 0 关闭此功能。

gc_stale_time

确定检查过时 ARP 条目的频率。ARP 条目过期后,将再次解析(当 IP 地址迁移到另一台机器时很有用)。当 ucast_solicit 大于 0 时,它首先尝试直接向已知主机发送 ARP 数据包。如果失败且 mcast_solicit 大于 0,则会广播 ARP 请求。

APPLETALK

/proc/sys/net/appletalk

当加载 Appletalk 时,保存 Appletalk 配置数据。可配置的参数包括

aarp-expiry-time

我们在 ARP 条目过期之前保留它的时间量。用于老化旧主机。

aarp-resolve-time

我们将花费多少时间来尝试解析 Appletalk 地址。

aarp-retransmit-limit

在放弃之前,我们将重新传输查询的次数。

aarp-tick-time

控制检查过期的速率。

/proc/net/appletalk

保存机器上活动的 Appletalk 套接字列表。字段指示 DDP 类型、本地地址(network:node 格式)、远程地址、发送挂起队列的大小、接收队列的大小(等待应用程序读取的字节数)、状态以及拥有套接字的 uid。

/proc/net/atalk_iface

列出为 appletalk 配置的所有接口。它显示接口的名称、其 Appletalk 地址、该地址上的网络范围(或第 1 阶段网络的网络号)以及接口的状态。

/proc/net/atalk_route

列出每个已知的网络路由。它列出路由指向的目标(网络)、路由器(可能直接连接)、路由标志以及路由正在使用的设备。

IPX

IPX 协议在 proc/sys/net 中没有可调值,但它提供了 proc/net/ipx。这列出了每个 IPX 套接字,以 Novell 格式(即 network:node:port)给出本地和远程地址。按照 Novell 奇怪的传统,除了端口之外的所有内容都是十六进制的。对于未绑定到特定远程地址的套接字,显示 Not_Connected。Tx 和 Rx 队列大小指示等待发送和接收的字节数。状态指示套接字所处的状态,uid 是拥有套接字的 uid。

ipx_interface

列出所有 IPX 接口。对于每个接口,它给出网络号、节点号,并指示网络是否是主网络。它还指示它绑定到的设备(内部网络为 Internal)以及帧类型(如果适用)。Linux 支持 IPX 的 802.3、802.2、802.2 SNAP 和 DIX (Blue Book) 以太网帧格式。

ipx_route

保存 IPX 路由列表的表。对于每条路由,它给出目标网络、路由器节点(或 Directly)以及内部网络的路由器网络地址(或 Connected)。

/proc/sysvipc

SysVIPC 资源(msg、sem、shm)的信息 (2.4)

/proc/tty

有关可用和实际使用的 tty 的信息可以在 /proc/tty 目录中找到。您将在此目录中找到驱动程序和线路规程的条目。

/proc/tty/drivers

驱动程序列表及其使用情况。

/proc/tty/ldiscs

已注册的线路规程。

/proc/tty/driver/serial

单个 tty 线路的使用统计信息和状态。

要查看当前正在使用的 tty,您只需查看 /proc/tty/drivers 文件。

  # cat /proc/tty/drivers
  serial               /dev/cua        5  64-127 serial:callout
  serial               /dev/ttyS       4  64-127 serial
  pty_slave            /dev/pts      143   0-255 pty:slave
  pty_master           /dev/ptm      135   0-255 pty:master
  pty_slave            /dev/pts      142   0-255 pty:slave
  pty_master           /dev/ptm      134   0-255 pty:master
  pty_slave            /dev/pts      141   0-255 pty:slave
  pty_master           /dev/ptm      133   0-255 pty:master
  pty_slave            /dev/pts      140   0-255 pty:slave
  pty_master           /dev/ptm      132   0-255 pty:master
  pty_slave            /dev/pts      139   0-255 pty:slave
  pty_master           /dev/ptm      131   0-255 pty:master
  pty_slave            /dev/pts      138   0-255 pty:slave
  pty_master           /dev/ptm      130   0-255 pty:master
  pty_slave            /dev/pts      137   0-255 pty:slave
  pty_master           /dev/ptm      129   0-255 pty:master
  pty_slave            /dev/pts      136   0-255 pty:slave
  pty_master           /dev/ptm      128   0-255 pty:master
  pty_slave            /dev/ttyp       3   0-255 pty:slave
  pty_master           /dev/pty        2   0-255 pty:master
  /dev/vc/0            /dev/vc/0       4       0 system:vtmaster
  /dev/ptmx            /dev/ptmx       5       2 system
  /dev/console         /dev/console    5       1 system:console
  /dev/tty             /dev/tty        5       0 system:/dev/tty
  unknown              /dev/vc/%d      4    1-63 console
  

请注意,虽然上述文件往往是易于阅读的文本文件,但有时它们的格式可能不易理解。许多命令的作用仅仅是读取上述文件并对其进行格式化,以便于理解。例如,free 程序读取 /proc/meminfo 并将以字节为单位给出的量转换为千字节(并添加更多信息)。

/proc/uptime

系统已运行的时间。

/proc/version

内核版本。

/proc/video

视频资源的 BTTV 信息。


1.15. /root

这是系统管理员 'root' 的主目录。这可能会有些令人困惑('root on root'),但在过去,'/' 是 root 的主目录(因此得名管理员帐户)。为了保持整洁,'root' 有了自己的主目录。为什么不在 '/home' 中?因为 '/home' 通常位于不同的分区,甚至位于另一个系统上,因此当 - 由于某种原因 - 仅挂载 '/' 时,'root' 将无法访问。

FSSTND 仅声明这是 'root' 主目录的推荐位置。'root' 的主目录由最终用户决定。但是,FSSTND 也指出

	  
  If the home directory of the root account is not stored on the root
  partition it will be necessary to make certain it will default to 
  / if it can not be located.
  
  We recommend against using the root account for tasks that can be
  performed as an unprivileged user, and that it be used solely for 
  system administration. For this reason, we recommend that subdirectories
  for mail and other applications not appear in the root account's home
  directory, and that mail for administration roles such as root, postmaster,
  and webmaster be forwarded to an appropriate user.
  


1.16. /sbin

Linux 区分“普通”可执行文件和用于系统维护和/或管理任务的可执行文件。后者位于此处,或者 - 不太重要的 - 位于 /usr/sbin 中。本地安装的系统管理程序应放置在 /usr/local/sbin 中。

在已知 /usr 已挂载(没有问题时)之后执行的程序通常放置在 /usr/sbin 中。此目录包含对系统工作至关重要的二进制文件。这些文件包括系统管理以及维护和硬件配置程序。您可能会在此处找到 lilo、fdisk、init、ifconfig 等。

另一个包含系统二进制文件的目录是 /usr/sbin。此目录包含系统管理员使用的其他二进制文件。您将在此处找到系统的网络守护程序以及其他(通常)只有系统管理员才能访问的二进制文件,但这些文件不是系统维护和修复所必需的。通常,这些目录永远不是普通用户的 $PATH 的一部分,而只是 root 用户的 $PATH 的一部分(PATH 是一个环境变量,用于控制系统尝试查找命令的位置顺序)。

FSSTND 声明

	  
  /sbin should contain only binaries essential for booting, restoring,
  recovering, and/or repairing the system in addition to the binaries
  in /bin. 
  

Linux 文件系统层次结构的一个特殊怪癖是,最初 /sbin 二进制文件保存在 /etc 中。

  Deciding what things go into "sbin" directories is simple: if a normal
  (not a system administrator) user will ever run it directly, then it
  must be placed in one of the "bin" directories. Ordinary users should
  not have to place any of the sbin directories in their path.
  
  For example, files such as chfn which users only occasionally use must
  still be placed in /usr/bin. ping, although it is absolutely necessary
  for root (network recovery and diagnosis) is often used by users and
  must live in /bin for that reason.

  We recommend that users have read and execute permission for everything
  in /sbin except, perhaps, certain setuid and setgid programs. The
  division between /bin and /sbin was not created for security reasons or
  to prevent users from seeing the operating system, but to provide a
  good partition between binaries that everyone uses and ones that are
  primarily used for administration tasks. There is no inherent security
  advantage in making /sbin off-limits for users.
  

FSSTND 合规性要求 /sbin 中必须包含以下命令或命令的符号链接。

       shutdown Command to bring the system down.
       

如果安装了相应的子系统,则 /sbin 中必须包含以下文件或文件的符号链接

       fastboot   Reboot the system without checking the disks (optional)
       fasthalt   Stop the system without checking the disks (optional)
       fdisk      Partition table manipulator (optional)
       fsck       File system check and repair utility (optional)
       fsck.*     File system check and repair utility for a specific filesystem (optional)
       getty      The getty program (optional)
       halt       Command to stop the system (optional)
       ifconfig   Configure a network interface (optional)
       init       Initial process (optional)
       mkfs       Command to build a filesystem (optional)
       mkfs.*     Command to build a specific filesystem (optional)
       mkswap     Command to set up a swap area (optional)
       reboot     Command to reboot the system (optional)
       route      IP routing table utility (optional)
       swapon     Enable paging and swapping (optional)
       swapoff    Disable paging and swapping (optional)
       update     Daemon to periodically flush filesystem buffers (optional)
       


1.17. /usr

/usr 通常包含系统上绝大部分数据。因此,这是系统中最重要的目录之一,因为它包含所有用户二进制文件、它们的文档、库、头文件等。X 及其支持库可以在这里找到。telnet、ftp 等用户程序也放置在此处。在原始 Unix 实现中,/usr 是用户主目录的放置位置(也就是说,/usr/someone 是当时称为 /home/someone 的目录)。在当前的 Unix 系统中,/usr 是用户区程序和数据(相对于“系统区”程序和数据)所在的位置。名称没有改变,但它的含义已经从“所有与用户相关的内容”缩小和扩展到“用户可用的程序和数据”。因此,有些人现在可能将此目录称为“用户系统资源”,而不是最初预期的“用户”。

/usr is shareable, read-only data. That means that /usr should
be shareable between various FHS-compliant hosts and must not be written to.
Any information that is host-specific or varies with time is stored elsewhere.

Large software packages must not use a direct subdirectory under the /usr
hierarchy.

/usr/X11R6

另一个大型子目录结构从这里开始,包含有关 X Window 系统的库、可执行文件、文档、字体等等。它包含在此处有点不一致,'usr' 和 '/usr/X11R6' 目录之间的区别也是如此。人们会认为,仅在 X 上运行的程序将其文件放在 '/usr/X11R6' 层次结构中,而其他程序则使用 '/usr'。遗憾的是,事实并非如此。KDE 和 GNOME 将其文件放在 '/usr' 层次结构中,而窗口管理器 Window Maker 使用 '/usr/X11R6'。X11R6 的文档文件不在 '/usr/X11R6/doc' 中,而主要在 '/usr/X11R6/lib/X11/doc' 中。这种混乱是由于与其他操作系统相比,图形桌面不是系统不可或缺的一部分。Linux 主要仍用于服务器,在服务器上,图形系统没有意义。

此层次结构保留用于 X Window 系统,版本 11 发行版 6 以及相关文件。为了简化事情并使 XFree86 与其他系统上的 X Window 系统更加兼容,如果 /usr/X11R6 存在,则必须存在以下符号链接

  /usr/bin/X11 -> /usr/X11R6/bin
  /usr/lib/X11 -> /usr/X11R6/lib/X11
  /usr/include/X11 -> /usr/X11R6/include/X11

通常,不得通过上述符号链接安装或管理软件。它们仅供用户使用。困难与 X Window 系统的发布版本有关 - 在过渡时期,不可能知道正在使用的 X11 版本。

/usr/X11R6/bin

XFree86 系统二进制文件。这些对于 X 窗口系统的初始化、配置和运行是必需的。X、xf86config、xauth、xmodmap 甚至 xpenguin 都位于此处。

/usr/X11R6/include

XFree86 系统头文件。编译某些使用 X 工具包的应用程序时需要这些文件。

/usr/X11R6/lib

XFree86 系统库。

/usr/X11R6/lib/modules

XFree86 系统模块。这些是 X 在启动时加载的模块。没有这些模块,video4linux、DRI 和 GLX 扩展以及某些输入设备的驱动程序将停止工作。

/usr/X11R6/lib/X11/fonts

XFree86 系统字体。由 'xfs'(X 字体服务器)和同类程序使用的字体。

/usr/bin

此目录包含系统上的绝大多数二进制文件。此目录中的可执行文件种类繁多。例如,vi、gcc、gnome-session 和 mozilla 都可以在这里找到。

/usr/doc

中央文档目录。文档实际上位于 /usr/share/doc 中,并从此链接。

/usr/etc

理论上,那是另一个用于配置文件的目录。现在几乎未使用。

/usr/games

曾经,此目录包含网络游戏文件。现在很少使用。

/usr/include

用于编译用户空间源代码所需的“头文件”目录。

/usr/include/'package-name'

应用程序特定的头文件。

/usr/info

此目录曾经包含 info 文档系统的文件。现在它们位于 '/usr/share/info' 中。

/usr/lib

此目录包含程序库。库是常用程序例程的集合。

/usr/local

'/usr/local' 背后的最初想法是在每台机器上除了 '/usr' 之外,还有一个单独的(“本地”)'/usr' 目录,后者可能只是从其他地方以只读方式挂载。它复制了 '/usr' 的结构。如今,'/usr/local' 被广泛认为是保存自编译或第三方程序的好地方。/usr/local 层次结构供系统管理员在本地安装软件时使用。它需要防止在系统软件更新时被覆盖。它可用于在一组主机之间共享但在 /usr 中找不到的程序和数据。本地安装的软件必须放置在 /usr/local 而不是 /usr 中,除非它是为了替换或升级 /usr 中的软件而安装的。

/usr/man

它曾经保存 man 页面。它已移至 /usr/share/man。

/usr/sbin

此目录包含用于管理系统的程序,旨在由 'root' 运行。与 '/sbin' 一样,它不是用户 $PATH 的一部分。此处包含的二进制文件示例包括 chroot、useradd、in.tftpd 和 pppconfig。

/usr/share

此目录包含“可共享的”、与体系结构无关的文件(文档、图标、字体等)。但是请注意,'/usr/share' 通常不打算由不同的操作系统或同一操作系统的不同版本共享。任何包含或需要不需要修改的数据的程序或软件包都应将该数据存储在 '/usr/share'(或 '/usr/local/share',如果本地安装)中。建议为此目的在 /usr/share 中使用子目录。"

/usr/share/doc

软件包特定文档文件的位置。这些目录通常包含 man 页面中可能没有的有用信息。它们还可能包含某些实用程序的模板和配置文件,从而使配置更加容易。

/usr/share/info

'info' 页面的位置。这种文档风格现在似乎很大程度上被忽略了。手册页更受欢迎。

/usr/share/man

手册页。它们分为 8 个部分,将在下面解释。

man1: User programs
Manual pages that describe publicly accessible commands are contained 
in this chapter. Most program documentation that a user will need to 
use is located here.

man2: System calls
This section describes all of the system calls (requests for the kernel 
to perform operations).

man3: Library functions and subroutines 
Section 3 describes program library routines that are not direct calls 
to kernel services. This and chapter 2 are only really of interest to
programmers.

man4: Special files
Section 4 describes the special files, related driver functions, and 
networking support available in the system. Typically, this includes 
the device files found in /dev and the kernel interface to networking 
protocol support.

man5: File formats
The formats for many data files are documented in the section 5. This 
includes various include files, program output files, and system files.

man6: Games
This chapter documents games, demos, and generally trivial programs.
Different people have various notions about how essential this is.

man7: Miscellaneous Manual pages that are difficult to classify are 
designated as being section 7. The troff and other text processing 
macro packages are found here.

man8: System administration Programs used by system administrators
for system operation and maintenance are documented here. Some of
these programs are also occasionally useful for normal users.

/usr/src

'linux' 子目录保存 Linux 内核源代码、头文件和文档。

/usr/src/RPM

RPM 提供了一个子结构,用于从 SRPM 构建 RPM。此分支的组织结构相当合理,软件包根据软件包的体系结构进行组织。

/usr/src/RPM/BUILD

正在从源代码构建的 RPM 二进制文件的临时存储位置。

/usr/src/RPM/RPMS/athlon, /usr/src/RPM/RPMS/i386, /usr/src/RPM/RPMS/i486, /usr/src/RPM/RPMS/i586, /usr/src/RPM/RPMS/i686, /usr/src/RPM/RPMS/noarch

这些目录包含依赖于体系结构的 RPM 源文件。

/usr/src/RPM/SOURCES

此目录包含要打包的软件的源 TAR 文件、补丁和图标文件。

/usr/src/RPM/SPECS

RPM SPEC 文件。SPEC 文件是一个包含构建软件包所需的信息以及脚本的文件。

/usr/src/RPM/SRPMS

包含从构建产生的源 RPM 文件。

/usr/src/linux

包含 Linux 内核的源代码。

/usr/src/linux/.config

上次内核源配置。此文件通常在内核编译期间通过 'make config'、'make menuconfig' 或 'make xconfig' 步骤创建。

/usr/src/linux/.depend, /usr/src/linux/.hdepend

'make dep' 检查您在创建 .config 文件时所做的选择的依赖项。它确保可以找到所需的文件,并构建一个将在编译期间使用的列表。如果此过程成功,则会创建这两个文件。

/usr/src/linux/COPYING

GNU 许可证

/usr/src/linux/CREDITS

参与 Linux 项目的人员的部分贡献者文件。它按名称排序并格式化,以便于脚本进行 grepping 和美化。字段包括:姓名 (N)、电子邮件 (E)、网址 (W)、PGP 密钥 ID 和指纹 (P)、描述 (D) 以及蜗牛邮件地址 (S)。

/usr/src/linux/MAINTAINERS

维护者列表以及有关如何提交内核更改的详细信息。

/usr/src/linux/Makefile

包含编译工作内核所需的数据。它允许开发人员和最终用户通过几个简单的步骤(例如 make dep、make clean、make bzImage、make modules、make modules_install)编译内核,并且如果其中的一部分已经完成并且是最新的,则无需担心从头开始重新编译所有内容。

/usr/src/linux/README

这些是 Linux 2.4 版本的发行说明。请仔细阅读它们,因为它们会告诉您这一切是关于什么的,解释如何安装内核,以及如果出现问题该怎么办。

/usr/src/linux/REPORTING-BUGS

报告 Linux 错误的建议程序。您没有义务使用错误报告格式,它仅作为对开发人员有用的信息类型的指南 - 仅此而已。

/usr/src/linux/Rules.make

此文件包含在多个 Makefile 之间共享的规则。

/usr/src/linux/Documentation

包含重新编译内核可能需要的文档。但是,它也提供了有关您的 Linux 系统的一般信息。对于希望进一步了解此目录内容的人,您可以查阅 /usr/src/linux/Documentation/00-INDEX 文件。更详细的文档可以在 /usr/src/linux/Documentation/Docbook 中找到。当然,此目录的内容是用 Docbook 编写的,但可以使用 'pdfdocs'、'psdocs' 和 'htmldocs' 的 make 目标分别转换为 pdf、ps 或 html。

/usr/tmp

用户空间临时文件。在现代发行版中根本找不到此目录,并且很可能是作为 Linux UNIX 传统的后果而创建的。


1.18. /var

包含可变数据,如系统日志文件、邮件和打印机假脱机目录以及瞬态和临时文件。/var 的某些部分在不同系统之间不可共享。例如,/var/log、/var/lock 和 /var/run。其他部分可以共享,特别是 /var/mail、/var/cache/man、/var/cache/fonts 和 /var/spool/news。为什么不把它放在 /usr 中?因为在某些情况下,您可能希望将 /usr 挂载为只读,例如,如果它在 CD 上或另一台计算机上。'/var' 包含可变数据,即系统在运行期间必须能够写入的文件和目录,而 /usr 应该只包含静态数据。某些目录可以放在单独的分区或系统上,例如,为了更轻松地备份,由于网络拓扑或安全问题。其他目录必须位于根分区上,因为它们对于启动过程至关重要。“可挂载”目录包括:'/home'、'/mnt'、'/tmp'、'/usr' 和 '/var'。启动必不可少的目录包括:'/bin'、'/boot'、'/dev'、'/etc'、'/lib'、'/proc' 和 '/sbin'。

If /var cannot be made a separate partition, it is often preferable to move /
var out of the root partition and into the /usr partition. (This is sometimes
done to reduce the size of the root partition or when space runs low in the
root partition.) However, /var must not be linked to /usr because this makes
separation of /usr and /var more difficult and is likely to create a naming
conflict. Instead, link /var to /usr/var.
  
Applications must generally not add directories to the top level of /var. Such
directories should only be added if they have some system-wide implication, and
in consultation with the FHS mailing list.
  

/var/backups

包含各种关键系统文件(如 /etc/shadow、/etc/group、/etc/inetd.conf 和 dpkg.status)的备份的目录。它们通常被重命名为 dpkg.status.0、group.bak、gshadow.bak、inetd.conf.bak、passwd.bak、shadow.bak 等名称。

/var/cache

旨在用于来自应用程序的缓存数据。此类数据是在本地生成的,是耗时的 I/O 或计算的结果。通常可以重新生成或恢复此数据。与 /var/spool 不同,此处的文件可以删除而不会丢失数据。此数据在应用程序的调用之间和系统重启之间保持有效。用于缓存数据的单独目录的存在允许系统管理员设置与其他 /var 目录不同的磁盘和备份策略。

/var/cache/fonts

本地生成的字体。特别是,所有由 mktexpk 自动生成的字体都必须位于 /var/cache/fonts 的适当命名的子目录中。

/var/cache/man

按需格式化的 man 页面的缓存。手册页的源通常存储在 /usr/share/man/ 中;一些手册页可能带有预格式化版本,该版本存储在 /usr/share/man/cat* 中(现在这种情况相当罕见)。其他手册页需要在首次查看时进行格式化;然后将格式化版本存储在 /var/man 中,以便下一个查看同一页面的人不必等待其格式化(/var/catman 通常以与清理临时目录相同的方式清理)。

/var/cache/'package-name'

软件包特定的缓存数据。

/var/cache/www

WWW 代理或缓存数据。

/var/crash

此目录最终将保存系统崩溃转储。目前,Linux 不支持系统崩溃转储。但是,开发已经完成,正在等待统一到 Linux 内核中。

/var/db

数据库存储。

/var/games

/usr 中与游戏相关的任何可变数据都放在此处。它保存以前在 /usr 中找到的可变数据。静态数据(如帮助文本、关卡描述等)仍保留在其他位置,例如 /usr/share/games。如 FSSTND 1.2 版本中所述,/var/games 和 /var/lib 的分离允许本地控制备份策略、权限和磁盘使用情况,以及允许主机间共享并减少 /var/lib 中的混乱。此外,/var/games 是 BSD 传统上使用的路径。

/var/lib

保存动态数据库/文件,如 rpm/dpkg 数据库和游戏分数。此外,此层次结构保存与应用程序或系统相关的状态信息。状态信息是程序在运行时修改的数据,并且与一个特定主机相关。用户永远不应该需要修改 /var/lib 中的文件来配置软件包的操作。状态信息通常用于在应用程序的调用之间以及同一应用程序的不同实例之间保留应用程序(或一组相互关联的应用程序)的条件。应用程序(或一组相互关联的应用程序)使用 /var/lib 的子目录来存储其数据。有一个子目录 /var/lib/misc,用于不需要子目录的状态文件;只有在发行版中包含相关应用程序时,才应存在其他子目录。/var/lib/'name' 是必须用于所有发行版软件包支持的位置。当然,不同的发行版可以使用不同的名称。

/var/local

本地程序(即系统管理员安装在 /usr/local 中的程序)的可变数据(与远程挂载的 '/var' 分区相对)。请注意,即使是本地安装的程序,如果适用,也应使用其他 /var 目录,例如 /var/lock。

/var/lock

许多程序遵循约定在 /var/lock 中创建一个锁定文件,以指示它们正在使用特定的设备或文件。此目录保存这些锁定文件(对于某些设备),希望其他程序会注意到该锁定文件,并且不会尝试使用该设备或文件。

锁定文件应存储在 /var/lock 目录结构中。由多个应用程序共享的设备和其他资源的锁定文件(例如最初在 /usr/spool/locks 或 /usr/spool/uucp 中找到的串行设备锁定文件)现在必须存储在 /var/lock 中。必须使用的命名约定是 LCK.. 后跟设备文件的基本名称。例如,要锁定 /dev/ttyS0,将创建文件 LCK..ttyS0。用于此类锁定文件内容格式必须是 HDB UUCP 锁定文件格式。HDB 格式是将进程标识符 (PID) 存储为十字节 ASCII 十进制数,后跟一个换行符。例如,如果进程 1230 持有锁定文件,它将包含十一个字符:空格、空格、空格、空格、空格、空格、一、二、三、零和换行符。

/var/log

来自系统和各种程序/服务的日志文件,特别是登录 (/var/log/wtmp,它记录所有登录和注销到系统的操作) 和 syslog (/var/log/messages,通常存储所有内核和系统程序消息的地方)。/var/log 中的文件通常会无限增长,可能需要定期清理。现在通常通过日志轮换实用程序(如 'logrotate')来管理。此实用程序还允许自动轮换压缩、删除和邮寄日志文件。可以将 Logrotate 设置为每天、每周、每月或当日志文件达到特定大小时处理日志文件。通常,logrotate 作为每日 cron 作业运行。这是开始排除一般技术问题的好地方。

/var/log/auth.log

正常用户和系统进程的所有登录和注销记录。

/var/log/btmp

所有尝试不良登录到系统的日志。通过 lastb 命令访问。

/var/log/debug

来自各种软件包的调试输出。

/var/log/dmesg

内核环形缓冲区。此文件的内容由 dmesg 命令引用。

/var/log/gdm/

GDM 日志文件。通常是最后一个 X 日志文件的子集。有关模式详细信息,请参阅 /var/log/xdm.log。

/var/log/kdm.log

KDM 日志文件。通常是最后一个 X 日志文件的子集。有关更多详细信息,请参阅 /var/log/xdm.log。

/var/log/messages

系统日志。

/var/log/pacct

进程记帐是进程活动的簿记。进程活动的原始数据在此处维护。可以使用三个命令来访问此文件的内容:dump-acct、sa(进程记帐摘要)和 lastcomm(列出系统上执行的命令)。

/var/log/utmp

活动用户会话。这是一个数据文件,因此无法正常查看。可以通过 dump-utmp 命令或通过 w、who 或 users 命令创建人类可读的形式。

/var/log/wtmp

已登录和注销系统的所有用户的日志。last 命令可用于访问此文件的人类可读形式。它还列出了每个连接和运行级别更改。

/var/log/xdm.log

XDM 日志文件。通常是最后一个 X 启动日志的子集,并且鉴于 X 日志能够为我们提供的详细信息,它几乎毫无用处。仅当您有 XDM 特定问题时才查阅此文件,否则只需使用 X 日志文件即可。

/var/log/XFree86.0.log, /var/log/XFree86.?.log

X 启动日志文件。是发现 X 配置问题的绝佳资源。日志文件根据上次使用时间进行编号。例如,最后一个日志文件将存储在 /var/log/XFree86.0.log 中,下一个是 /var/log/XFree86.9.log,依此类推。

/var/log/syslog

“系统”日志文件。此文件的内容由 syslogd 守护程序管理,该守护程序通常负责大多数系统上的所有日志操作。

/var/mail

包含用户邮箱文件。邮件文件采用 /var/mail/'username' 的形式(请注意,/var/mail 可能是指向另一个目录的符号链接)。此位置的用户邮箱文件以标准 UNIX 邮箱格式存储。此目录位置的原因是为了使 FHS 与几乎每个 UNIX 实现保持一致(以前位于 /var/spool/mail 中)。此更改对于互操作性非常重要,因为单个 /var/mail 通常在多个主机和多个 UNIX 实现之间共享(尽管存在 NFS 锁定问题)。

/var/opt

/opt 中程序包的可变数据必须安装在 /var/opt/'package-name' 中,其中 'package-name' 是 /opt 中附加软件程序包的静态数据存储的子树的名称,除非被 /etc 中的另一个文件取代。/var/opt/'package-name' 的内部排列没有任何结构限制。

/var/run

包含系统服务的进程标识文件 (PID) 以及有关系统的其他信息,这些信息在系统下次启动之前有效。例如,/var/run/utmp 包含有关当前登录用户的信息。

/var/spool

保存假脱机文件,例如用于邮件、新闻和打印(lpd)以及其他排队的工作。假脱机文件存储要在当前占用设备的作业完成后或适当的 cron 作业启动后处理的数据。每个不同的假脱机在 /var/spool 下都有自己的子目录,例如,cron 表存储在 /var/spool/cron/crontabs 中。

/var/tmp

/var/tmp

大于 /tmp 允许的大小或需要存在时间比 /tmp 允许的时间更长的临时文件。(尽管系统管理员也可能不允许 /var/tmp 中存在非常旧的文件。)

/var/named

BIND 的数据库。Berkeley Internet Name Domain (BIND) 实现了 Internet 域名服务器。BIND 是 Internet 上使用最广泛的名称服务器软件,并由 Internet Software Consortium (www.isc.org) 支持。

/var/yp

NIS(网络信息服务)的数据库。NIS 主要用于让网络中的多台机器共享相同的帐户信息(例如 /etc/passwd)。NIS 以前称为 Yellow Pages (YP)。

  /var/cache	Application cache data
  /var/lib	Variable state information
  /var/local	Variable data for /usr/local
  /var/lock	Lock files
  /var/log	Log files and directories
  /var/opt	Variable data for /opt
  /var/run	Data relevant to running processes
  /var/spool	Application spool data
  /var/tmp	Temporary files preserved between system reboots
  

以下目录或目录的符号链接在 /var 中是 FSSTND 合规性所必需的

  /var/backups
  /var/cron
  /var/msgs
  /var/preserve
  

某些目录是“保留”的,因为它们不得被某些新应用程序随意使用,因为它们会与历史和/或本地惯例冲突。它们是

  account   Process accounting logs (optional)
  crash     System crash dumps (optional)
  games     Variable game data (optional)
  mail      User mailbox files (optional)
  yp        Network Information Service (NIS) database files (optional)
  


1.19. /srv

  /srv contains site-specific data which is served by this system.

  This main purpose of specifying this is so that users may find
  the location of the data files for particular service, and so that
  services which require a single tree for readonly data, writable data
  and scripts (such as cgi scripts) can be reasonably placed. Data that
  is only of interest to a specific user should go in that users'
  home directory.

  The methodology used to name subdirectories of /srv is unspecified as there
  is currently no consensus on how this should be done. One method for
  structuring data under /srv is by protocol, eg. ftp, rsync, www, and cvs.
  On large systems it can be useful to structure /srv by administrative
  context, such as /srv/physics/www, /srv/compsci/cvs, etc. This setup will
  differ from host to host. Therefore, no program should rely on a specific
  subdirectory structure of /srv existing or data necessarily being stored in
  /srv. However /srv should always exist on FHS compliant systems and should
  be used as the default location for such data.

  Distributions must take care not to remove locally placed files in these
  directories without administrator permission.

  This is particularly important as these areas will often contain both
  files initially installed by the distributor, and those added by the
  administrator.
  


1.20. /tmp

此目录主要包含临时需要的文件。许多程序使用它来创建锁定文件和临时存储数据。除非您确切知道自己在做什么,否则不要从此目录中删除文件!许多这些文件对于当前正在运行的程序很重要,删除它们可能会导致系统崩溃。通常,它无论如何都不会包含超过几 KB 的内容。在大多数系统上,此目录会在启动时或关机时由本地系统清除。这的基础是历史先例和常见做法。但是,这并未成为要求,因为系统管理不在 FSSTND 的范围内。因此,人和程序不得假定 /tmp 中的任何文件或目录在程序的调用之间得到保留。这背后的原因是符合 IEEE 标准 P1003.2 (POSIX,第 2 部分)。

词汇表

ARPA

美国国防部高级研究计划局。也称为 DARPA(“D”代表“国防”),它起源于 1960 年代后期和 1970 年代初期,提出了互联网的提案和标准。因此,互联网最初被称为 ARPANet,并将军事部门与美国各地的研究中心连接起来,旨在对核攻击具有高度的生存能力。

BASH

Bourne Again Shell,基于原始命令解释器 Bourne shell sh。

Bourne Shell

Bourne shell 是原始的 Unix shell(命令执行程序,通常称为命令解释器),由 AT&T 开发。Bourne shell 以其开发者 Stephen Bourne 的名字命名,也以其程序名 sh 而闻名。shell 提示符(显示的字符,指示已准备好输入)使用的符号是 $ 符号。Bourne shell 家族包括 Bourne、Korn shell、bash 和 zsh shell。Bourne Again Shell (bash) 是随 Linux 系统分发的 Bourne shell 的免费版本。Bash 与原始版本相似,但添加了诸如命令行编辑之类的功能。它的名称有时拼写为 Bourne Again SHell,大写的 Hell 指的是某些人使用它时遇到的困难。

CLI

CLI(命令行界面)是计算机操作系统或应用程序的用户界面,用户通过在指定行上键入命令来响应视觉提示,接收来自系统的响应,然后输入另一个命令,依此类推。Windows 操作系统中的 MS-DOS 提示符应用程序是提供命令行界面的一个示例。今天,大多数用户更喜欢 Windows、Mac OS、BeOS 等提供的图形用户界面 (GUI)。通常,当今大多数基于 Unix 的系统都提供命令行界面和图形用户界面。

core

当程序由于错误或违反操作系统或硬件的保护机制而意外终止时,会创建一个核心文件。操作系统会终止该程序并创建一个核心文件,程序员可以使用该文件来查明哪里出了问题。它包含程序崩溃时状态的详细描述。如果您想确定核心文件来自哪个程序,请使用 file 命令,如下所示:$ file core 这将告诉您生成核心转储的程序名称。您可能想写信给程序的维护者,告诉他们他们的程序发生了核心转储。要启用或禁用核心转储,您必须在 bash 中使用 ulimit 命令,在 tcsh 中使用 limit 命令,或者在 ksh 中使用 rlimit 命令。有关详细信息,请参阅相应的手册页。此设置会影响从 shell 运行的所有程序(直接或间接),而不是整个系统。如果您希望默认情况下为所有进程启用或禁用核心转储,您可以在 /usr/include/linux/sched.h 中更改默认设置。请参阅 INIT_TASK 的定义,并查看 /usr/include/linux/resource.h。PAM 支持优化系统环境,包括允许用户使用的内存量。在某些发行版中,此参数可在 /etc/security/limits.conf 文件中配置。有关更多信息,请参阅《Linux 管理员安全指南》。

守护进程

一个潜伏在后台的进程,通常不被注意,直到某些事情触发它采取行动。例如,\cmd{update} 守护进程大约每三十秒唤醒一次以刷新缓冲区缓存,而 \cmd{sendmail} 守护进程在有人发送邮件时唤醒。

DARPA

国防高级研究计划局是国防部 (DoD) 的中央研究和开发机构。它管理和指导国防部选定的基础和应用研究与开发项目,并从事风险和回报都很高,且成功可能为传统军事角色和任务提供巨大进步的研究和技术。

DHCP

动态主机控制协议,是一种类似于 BOOTP 的协议(实际上 dhcpd 包含 BOOTPD 的大部分功能)。它根据租用时间向客户端分配 IP 地址。DHCP 被 Microsoft 广泛使用,最近也被 Apple 广泛使用。它在任何多平台环境中都可能是必不可少的。

DNS

域名系统将 Internet 域名和主机名转换为 IP 地址。DNS 实施一个分布式数据库,用于存储网络上所有公共主机的名称和地址信息。DNS 假设 IP 地址不会更改(即,静态分配而不是动态分配)。DNS 数据库驻留在特殊用途服务器的层次结构中。当访问网站或网络上的其他设备时,一个名为 DNS 解析器(通常内置于网络操作系统中)的软件首先联系 DNS 服务器以确定服务器的 IP 地址。如果 DNS 服务器不包含所需的映射,它将依次将请求转发给层次结构中更高级别的 DNS 服务器。在 DNS 层次结构中发送了可能多次转发和委派消息后,给定主机的 IP 地址最终将传递给解析器。DNS 还包括对缓存请求和冗余的支持。大多数网络操作系统允许用户输入主 DNS 服务器、辅助 DNS 服务器和三级 DNS 服务器的 IP 地址,每个服务器都可以为来自客户端的初始请求提供服务。许多 ISP 维护自己的 DNS 服务器,并使用 DHCP 自动将这些服务器的地址分配给拨号客户端,因此大多数家庭用户无需了解 DNS 配置背后的详细信息。注册的域名和地址必须定期续订,如果两个当事方之间就给定名称的所有权(例如商标)发生争议,可以调用 ICANN 的统一域名争议解决政策。也称为域名系统、域名服务、域名服务器。

环境变量

shell 启动的任何程序都可以使用的变量。

ESD

Enlightened Sound Daemon(启迪声音守护进程)。此程序旨在将多个数字音频流混合在一起,以便单个设备播放。

文件系统

操作系统用于跟踪磁盘或分区上文件的方法和数据结构;文件在磁盘上的组织方式。也用于描述用于存储文件的分区或磁盘,或文件系统的类型。

FSSTND

通常,创建 Linux 文件系统结构文档的组或文档本身被称为“FSSTND”。这是“文件系统标准”的缩写。该文档已帮助标准化了各地 Linux 系统上的文件系统布局。自该标准的原始版本发布以来,大多数发行商已全部或部分地采用了它,这极大地造福了所有 Linux 用户。现在通常被称为 FHS(文件系统层次结构标准)文档,因为它已纳入 LSB(Linux 标准库)项目。

GUI

图形用户界面。使用图片而不是仅使用文字来表示程序的输入和输出。带有 GUI 的程序在某些窗口系统(例如 X Window 系统、Microsoft Windows、Acorn RISC OS、NEXTSTEP)下运行。该程序在其屏幕上的窗口中显示某些图标、按钮、对话框等,用户主要通过在屏幕上移动指针(通常由鼠标控制)并在指针指向它们时按下鼠标上的按钮来控制它。尽管 Apple Computer 公司希望声称他们使用其 Macintosh 操作系统发明了 GUI,但该概念起源于 1970 年代初期 Xerox 的 PARC 实验室。

硬链接

一个目录条目,它将文件名映射到 inode 号。一个文件可以有多个名称或硬链接。链接计数给出了可以访问文件的名称数量。硬链接不允许目录有多个名称,也不允许不同文件系统中有多个名称。

init

'init' 进程是内核启动的第一个用户级别进程。init 有许多重要的职责,例如启动 getty(以便用户可以登录)、实现运行级别以及处理孤立进程。本章解释了如何配置 init 以及如何使用不同的运行级别。init 是那些对 Linux 系统的运行绝对必要的程序之一,但您仍然可以基本上忽略它。通常,只有在连接串行终端、拨号(非拨出)调制解调器,或者想要更改默认运行级别时,才需要担心 init。当内核启动(已加载到内存中,已开始运行,并已初始化所有设备驱动程序和数据结构等)后,它通过启动用户级别程序 init 来完成其自身的引导过程。因此,init 始终是第一个进程(其进程号始终为 1)。内核在历史上用于 init 的几个位置查找 init,但它的正确位置是 /sbin/init。如果内核找不到 init,它会尝试运行 /bin/sh,如果也失败,则系统启动失败。当 init 启动时,它通过执行许多管理任务来完成引导过程,例如检查文件系统、清理 /tmp、启动各种服务,以及为每个终端和虚拟控制台启动 getty,用户应该能够在其中登录。在系统正确启动后,init 会在用户注销后为每个终端重新启动 getty(以便下一个用户可以登录)。init 还采用孤立进程:当一个进程启动一个子进程并在其子进程之前死亡时,该子进程立即成为 init 的子进程。这对于各种技术原因很重要,但了解它很好,因为它使理解进程列表和进程树图更容易。init 本身不允许死亡。即使使用 SIGKILL 也无法杀死 init。init 有几个变体可用。大多数 Linux 发行版使用 sysvinit(由 Miquel van Smoorenburg 编写),它基于 System V init 设计。Unix 的 BSD 版本有不同的 init。主要区别在于运行级别:System V 有运行级别,BSD 没有。

inode

inode 是磁盘块的地址。当您通过 ls 查看 inode 信息时,ls 会打印文件中第一个块的地址。您可以使用此信息来判断两个文件是否真的是具有不同名称(链接)的相同文件。一个文件有几个组成部分:名称、内容和管理信息,例如权限和修改时间。管理信息存储在 inode 中(多年来,“i-node”中的连字符已消失),以及重要的系统数据,例如它的长度、文件内容存储在磁盘上的位置等等。inode 中有三个时间:文件内容上次修改(写入)的时间;文件上次使用(读取或执行)的时间;以及 inode 本身上次更改的时间,例如设置权限。更改文件内容不会影响其使用时间,而更改权限只会影响 inode 更改时间。理解 inode 很重要,不仅是为了理解 ls 上的选项,而且因为从某种意义上说,inode 就是文件。所有目录层次结构所做的只是为文件提供方便的名称。系统的文件内部名称是其 i-number:保存文件信息的 inode 的编号。

内核

操作系统的一部分,它实现与硬件的交互以及资源共享。

可执行文件不应有未定义的符号,只应有有用的符号;所有有用的程序都引用它们未定义的符号(例如 printf 或 write)。这些引用通过将库中的目标文件拉入可执行文件来解析。

链接

符号链接(MacOS 中的别名和 Windows 下的快捷方式)是一个指向另一个文件的文件;这是一个常用的工具。硬链接很少由用户创建,它是一个文件名,指向一个也具有多个其他文件名的数据块。

手册页

每个版本的 UNIX 都附带了大量的在线帮助页面集合,称为手册页(manual pages 的缩写)。手册页是关于您的 UNIX 系统的权威文档。它们包含关于内核和所有实用程序的完整信息。

MTA

邮件传输代理。与 Web 一起,邮件是 Internet 流行的首要原因。电子邮件是一种廉价且快速的时移消息传递方法,它与 Web 非常相似,实际上是基于发送和接收纯文本文件。使用的协议称为简单邮件传输协议 (SMTP)。实现 SMTP 以将邮件从一个服务器移动到另一个服务器的服务器程序称为 MTA。曾经用户必须 Telnet 进入 SMTP 服务器并使用命令行邮件程序(如“mutt”或“pine”)来检查他们的邮件。现在,基于 GUI 的电子邮件客户端(如 Mozilla、Kmail 和 Outlook)允许用户从本地 SMTP 服务器检查他们的电子邮件。SMTP 服务器和桌面邮件客户端之间使用 POP3 和 IMAP4 等附加协议,以允许客户端操作文件并在其本地邮件服务器上下载文件。实现 POP3 和 IMAP4 的程序称为邮件传递代理 (MDA)。它们通常与 MTA 分开。

NFS

网络文件系统,是 UNIX 相当于服务器消息块 (SMB)。它是不同机器之间相互导入和导出本地文件的一种方式。与 SMB 一样,NFS 发送的信息(包括用户密码)是未加密的,因此最好将其使用限制在您的本地网络内。

操作系统

在用户和他们运行的应用程序程序之间共享计算机系统资源(处理器、内存、磁盘空间、网络带宽等)的软件。控制对系统的访问以提供安全性。

PAM

可插拔身份验证模块。一组共享库,用于确定用户如何进行身份验证。例如,按照惯例,UNIX 用户通过在登录提示符处键入他们的姓名后,在密码提示符处提供密码来验证自己的身份。在许多情况下,例如对工作站的内部访问,这种简单的身份验证形式被认为是足够的。在其他情况下,需要更多信息。如果用户想从外部来源(如 Internet)登录到内部系统,则可能需要更多或替代信息 - 也许是一次性密码。PAM 提供了这种类型的能力以及更多功能。最重要的是,PAM 模块允许您使用必要的安全级别配置您的环境。

PATH

shell 在存储在 PATH 环境变量中的文件路径列表中查找命令和程序。环境变量将信息存储在其他程序和命令可以访问的位置。环境变量存储诸如您正在使用的 shell、您的登录名和您当前的工作目录等信息。要查看当前定义的所有环境变量的列表;在提示符下键入“set”。当您在 shell 提示符下键入命令时,shell 将按顺序在 PATH 变量中列出的每个目录中查找该命令的程序文件。将运行找到的与您键入的命令匹配的第一个程序。如果命令的程序文件不在 PATH 环境变量中列出的目录中,则 shell 返回“命令未找到”错误。默认情况下,shell 不会在您当前的工作目录或您的主目录中查找命令。这实际上是一种安全机制,因此您不会意外执行程序。如果恶意用户在您的主目录中放置了一个名为 ls 的有害程序会怎样?如果您键入 ls 并且 shell 在 /bin 目录中的真实程序之前在您的主目录中查找伪造的程序,您认为会发生什么?如果您认为会发生糟糕的事情,那么您就走对了。由于您的 PATH 没有将当前目录作为其搜索位置之一,因此必须使用绝对路径或指定为 './program-name' 的相对路径来调用当前目录中的程序。要查看哪些目录是您的 PATH 的一部分,请输入此命令:# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

管道和套接字

程序用来相互通信的特殊文件。它们很少见,但您可能能够在 /dev/ 目录中看到一两个套接字。

进程标识符

在 ps 命令的标题中显示为 PID。分配给系统中运行的每个进程的唯一编号。

rpc

远程过程调用。它使系统能够透明地跨网络调用 NFS 等程序,从而使每个系统都将调用解释为本地调用。在这种情况下,它会使导出的文件系统看起来像是本地文件系统。

设置组 ID (SGID)

SGID 权限使脚本以其组设置为脚本的组而不是启动它的用户的组运行。通常认为以这种方式运行程序是非常糟糕的做法,因为它会带来许多安全问题。更高版本的 Linux 内核甚至会禁止运行设置了此属性的 shell 脚本。

设置用户 ID (SUID)

SUID 权限使脚本以脚本的所有者(而不是启动它的用户)的身份运行。通常认为以这种方式运行程序是非常糟糕的做法,因为它会带来许多安全问题。更高版本的 Linux 内核甚至会禁止运行设置了此属性的 shell 脚本。

信号

发送到程序的软件中断,指示发生了重要事件。事件范围可以从用户请求到非法内存访问错误。某些信号(如中断信号)指示用户已要求程序执行某些不在正常控制流程中的操作。

SSH

安全外壳,或 SSH,提供了一种通过加密连接运行命令行和图形应用程序以及传输文件的方式,所有可见的都将是乱码。它既是一个协议,也是一套小型命令行应用程序,可用于各种功能。SSH 取代了旧的 Telnet 应用程序,可用于跨 Internet 安全地远程管理机器。但是,它还有其他功能。SSH 通过自动设置 X 权限来提高远程运行应用程序的简易性。如果您可以登录到一台机器,它允许您在其上运行图形应用程序,这与 Telnet 不同,Telnet 要求用户了解通过 xauth 和 xhost 命令操作的 X 身份验证机制。SSH 还具有内置压缩功能,这使得您的图形应用程序可以通过网络更快地运行。SCP(安全复制)和 SFTP(安全 FTP)允许通过远程链接传输文件,可以通过 SSH 自己的命令行实用程序或 Gnome 的 GFTP 等图形工具进行传输。与 Telnet 一样,SSH 是跨平台的。您可以找到适用于 Linux、Unix 和所有 Windows 版本、BeOS、PalmOS、Java 和路由器中使用的嵌入式操作系统的 SSH 服务器和客户端。

STDERR

标准错误。用于错误消息的特殊类型的输出。STDERR 的文件描述符为 2。

STDIN

标准输入。用户输入从 STDIN 读取。STDIN 的文件描述符为 0。

STDOUT

标准输出。脚本的输出通常是 STDOUT。STDOUT 的文件描述符为 1。

符号表

对象表的给出每个符号的值(通常作为节名称和偏移量)的部分称为符号表。可执行文件也可能有一个符号表,该符号表给出符号的最终值。调试器使用符号表以符号形式而不是数字形式向用户呈现地址。可以从可执行文件中剥离符号表,从而产生较小的可执行文件,但这会阻止有意义的调试。

符号链接或软链接

一种特殊的文件类型,它是一个小的指针文件,允许同一文件有多个名称。与硬链接不同,符号链接可以为目录创建,也可以跨文件系统创建。访问所指向文件的命令被称为跟随符号链接。访问链接本身的命令不跟随符号链接。

系统调用

内核为应用程序程序提供的服务,以及调用它们的方式。请参阅手册页的第 2 节。

系统程序

实现操作系统高级功能的程序,即不直接依赖于硬件的东西。有时可能需要特殊权限才能运行(例如,用于传递电子邮件),但通常只被普遍认为是系统的一部分(例如,编译器)。

tcp-wrappers

通过 inetd 提供的几乎所有服务都通过 tcp-wrappers 守护进程 tcpd 通过 tcp-wrappers 调用。tcp-wrappers 机制为它包装的所有服务请求提供访问控制列表限制和日志记录。只要服务通过中央守护进程(如 inetd)调用,它就可以用于 TCP 或 TCP 服务。这些程序记录传入的 telnet、ftp、rsh、rlogin、finger 等... 请求的客户端主机名。安全选项是每个主机、域和/或服务的访问控制;检测主机名欺骗或主机地址欺骗;用于实施早期预警系统的陷阱。

ZSH

Zsh 由 Paul Falstad 开发,旨在替代 Bourne shell 和 C shell。它融合了所有其他 shell 的功能(例如文件名补全和历史记录机制)以及新功能。Zsh 被认为类似于 Korn shell。Falstad 旨在在 zsh 中创建一个 shell,它可以完成程序员可能合理期望它做的任何事情。Zsh 在高级用户中很受欢迎。与 Korn shell 和 C shell 一起,Bourne shell 仍然是使用最广泛的三种 shell 之一,并且包含在所有 UNIX 系统中。Bourne shell 通常被认为是开发脚本的最佳 shell。


附录 A. UNIX System V 信号

Symbol     Number   Action       Meaning
SIGHUP     1        exit         Hangs up.
SIGINT     2        exit         Interrupts.
SIGQUIT    3        core dump    Quits.
SIGILL     4        core dump    Illegal instruction.
SIGTRAP    5        core dump    Trace trap.
SIGIOT     6        core dump    IOT instruction.
SIGEMT     7        core dump    MT instruction.
SIGFPE     8        core dump    Floating point exception.
SIGKILL    9        exit         Kills (cannot be caught or ignored).
SIGBUS     10       core dump    Bus error.
SIGSEGV    11       core dump    Segmentation violation.
SIGSYS     12       core dump    Bad argument to system call.
SIGPIPE    13       exit         Writes on a pipe with no one to read it.
SIGALRM    14       exit         Alarm clock.
SIGTERM    15       exit         Software termination signal.


附录 B. 来源


附录 C. 关于作者

Binh Nguyen 出生于 1983 年 3 月 26 日,澳大利亚维多利亚州墨尔本。他曾在北菲茨罗伊的圣约瑟夫马力斯特兄弟学院学习,直到 1998 年获得圣凯文学院(图拉克)的奖学金。

他目前是墨尔本大学的一名大学本科生,学习计算机科学和物理学。他在每个领域的主要兴趣分别是操作系统和量子力学。

他的背景强烈偏向科学和数学。尽管如此,他对艺术、人文和体育也有所欣赏。作为一名相当熟练的音乐家(长笛),他目前正在考虑是否应该完成他的音乐学业以获得文凭,以便他可以教书。在高中时,他是田径、篮球、足球、板球和游泳队的成员。他主要说英语,但也能用越南语和法语交流。年轻时,他还具备用中文和意大利语交流的能力。

虽然他从小信奉佛教,一生都在天主教/基督教学校学习,并在高中最后一年学习经文,但他认为自己是无神论者。

目前,他兼职担任 Linux 相关项目的(商业)研究员/开发人员,他目前的重点是软件分发机制。

他的两份技术文档已纳入 Linux 文档项目(“Linux 字典”和“Linux 文件系统层次结构”, www.tldp.org/guides.html)。此外,它们还在全球至少十所大学(澳大利亚南昆士兰大学、墨西哥米却肯大学、香港理工大学、巴西圣保罗大学、美国南加州大学、英国威尔士斯旺西大学、爱尔兰阿尔斯特大学、德国杜伊斯堡-埃森大学、西班牙胡安卡洛斯国王大学、葡萄牙米格尔托尔加高等学院和马来西亚马来西亚理科大学)被用作参考书。除此之外,他还是“计算机字典项目”的开发主管和项目管理员 http://computerdictionary.tsf.org.za/dictionary/index.html,该项目正在获得 Shuttleworth 基金会的支持。

他曾在 linux.com、linmagau.org、desktoplinux.com、newsforge.com、linuxtoday.com、linux.org、pclinuxonline.com、tuxreports.com 等网站上发表文章……并且对科学和技术的最新创新有着浓厚的兴趣。

作者的主页是 http://geocities.com/linuxfilesystem/


附录 D. 贡献者

作者要感谢 MLUG http://www.mlug.org.au 的一组(希望保持匿名)成员,他们抽出时间和耐心在本文档出版前帮助校对。


附录 E. 免责声明

对于本文档的内容,不承担任何责任。使用本文档中的概念、示例和其他内容,风险自负。由于这是本文档的新版本,因此可能存在错误和不准确之处,这些错误和不准确之处当然可能会损害您的系统。请谨慎操作,尽管这种情况极不可能发生,但作者不承担任何因本文档中包含的信息而直接或间接导致的系统损坏的责任。

提及特定产品或品牌不应被视为认可。强烈建议您在进行重大安装之前备份您的系统,并坚持定期备份的做法。


附录 F. 捐赠

如果您想为本项目捐款,请使用 Paypal,https://www.paypal.com


附录 G. 反馈

本文档的进一步修订将取决于用户的响应。欢迎对本文档内容提出任何反馈意见。已尽一切努力确保本文档中的说明和信息准确可靠。请将意见、更正、建议和问题发送给作者 Binh Nguyen,linuxfilesystem(at)yahoo(dot)com(dot)au,主题标题为 LHFS。但是,不保证回复。

除非另有说明,否则所有商标和版权均为其各自所有者的财产。本文档中术语的使用不应被视为影响任何商标或服务标记的有效性。

作者将感谢并认为通知任何和所有修改、翻译和印刷版本是礼貌的。


附录 H. GNU 自由文档许可证

版本 1.2,2002 年 11 月

版权所有 (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 允许任何人复制和分发本许可证文档的完整副本,但不允许更改它。


H.1. 序言

本许可证的目的是使手册、教科书或其他功能性和有用的文档在自由的意义上“自由”:确保每个人都拥有复制和再分发它的有效自由,无论是否进行修改,无论商业与否。其次,本许可证为作者和出版商保留了一种为其工作获得荣誉的方式,同时不被视为对他人所做的修改负责。

本许可证是一种“copyleft”,这意味着文档的衍生作品本身必须在相同的意义上是自由的。它补充了 GNU 通用公共许可证,后者是为自由软件设计的 copyleft 许可证。

我们设计本许可证是为了将其用于自由软件的手册,因为自由软件需要自由文档:自由程序应附带提供与软件相同自由的手册。但本许可证不仅限于软件手册;它可用于任何文本作品,无论主题或是否以印刷书籍形式出版。我们主要推荐本许可证用于以指导或参考为目的的作品。


H.2. 适用性和定义

本许可证适用于任何手册或其他作品,以任何媒介形式,其中包含版权持有者放置的声明,表明它可以根据本许可证的条款分发。此类声明授予在全球范围内、免版税的许可,无限期地根据此处规定的条件使用该作品。“文档”(下文)是指任何此类手册或作品。任何公众成员都是被许可人,并被称为“您”。如果您以需要版权法许可的方式复制、修改或分发该作品,则您接受该许可。

“文档的修改版本”是指包含文档或其一部分的任何作品,无论是完全照搬,还是经过修改和/或翻译成另一种语言。

“次要章节”是指文档中已命名的附录或前言部分,其专门处理文档的出版者或作者与文档的总体主题(或相关事项)的关系,并且不包含任何可以直接归入该总体主题的内容。(因此,如果文档部分是数学教科书,则次要章节不得解释任何数学知识。)这种关系可以是与主题或相关事项的历史联系,也可以是关于它们的法律、商业、哲学、伦理或政治立场。

“不变章节”是指某些次要章节,其标题在声明文档根据本许可证发布的通知中被指定为不变章节。如果某个章节不符合上述次要章节的定义,则不允许将其指定为不变章节。文档可能包含零个不变章节。如果文档未标识任何不变章节,则不存在不变章节。

“封面文字”是指某些简短的文本段落,它们在声明文档根据本许可证发布的通知中被列为封面文字或封底文字。封面文字最多可以有 5 个单词,封底文字最多可以有 25 个单词。

文档的“透明”副本是指机器可读的副本,以规范对公众开放的格式表示,该副本适合使用通用文本编辑器(对于像素组成的图像,则使用通用绘画程序;对于绘图,则使用一些广泛可用的绘图编辑器)直接修改文档,并且适合输入到文本格式化程序或自动翻译成各种适合输入到文本格式化程序的格式。“透明”文件格式的副本,如果其标记或缺少标记的目的是为了阻止或劝阻读者后续修改,则该副本不是透明的。如果图像格式用于大量文本,则该图像格式不是透明的。不“透明”的副本称为“不透明”副本。

透明副本的合适格式示例包括不带标记的纯 ASCII、Texinfo 输入格式、LaTeX 输入格式、使用公开可用的 DTD 的 SGML 或 XML,以及符合标准的简单 HTML、PostScript 或为人工修改而设计的 PDF。透明图像格式的示例包括 PNG、XCF 和 JPG。不透明格式包括只能由专有文字处理器读取和编辑的专有格式,DTD 和/或处理工具通常不可用的 SGML 或 XML,以及某些文字处理器仅为输出目的而生成的机器生成的 HTML、PostScript 或 PDF。

对于印刷书籍,“标题页”是指标题页本身,以及为清晰地容纳本许可证要求出现在标题页上的材料所需的后续页面。对于没有标题页的格式的作品,“标题页”是指最突出的作品标题附近的文本,位于正文文本的开头之前。

“名为 XYZ 的”章节是指文档中已命名的子单元,其标题恰好是 XYZ,或者在翻译 XYZ 为另一种语言的文本之后的括号中包含 XYZ。(此处 XYZ 代表下面提到的特定章节名称,例如“致谢”、“献词”、“背书”或“历史”。)当您修改文档时,“保留”此类章节的“标题”意味着它仍然是根据本定义“名为 XYZ 的”章节。

文档可能在声明本许可证适用于文档的通知旁边包含担保免责声明。这些担保免责声明被认为通过引用包含在本许可证中,但仅限于免除担保:这些担保免责声明可能具有的任何其他暗示均无效,并且对本许可证的含义没有影响。


H.3. 逐字复制

您可以在任何媒介中复制和分发文档,无论是商业用途还是非商业用途,前提是所有副本中都复制了本许可证、版权声明以及声明本许可证适用于文档的许可证声明,并且您没有在本许可证的条款之外添加任何其他条件。您不得使用技术措施来阻碍或控制您制作或分发的副本的阅读或进一步复制。但是,您可以接受报酬以换取副本。如果您分发足够大量的副本,您还必须遵守第 3 节中的条件。

您也可以在上述相同条件下借出副本,并且您可以公开展示副本。


H.4. 大量复制

如果您出版印刷版副本(或通常带有印刷封面的媒体副本)的文档,数量超过 100 份,并且文档的许可证声明要求封面文字,则您必须将副本封装在封面上,这些封面清晰且清晰可辨地印有所有这些封面文字:正面封面的封面文字和背面封面的封底文字。两个封面还必须清晰且清晰可辨地标识您为这些副本的出版商。封面必须以同等突出和可见的方式呈现完整标题的所有单词。您可以在封面上添加其他材料。仅限于封面的更改的复制,只要它们保留文档的标题并满足这些条件,在其他方面可以被视为逐字复制。

如果任何一个封面的所需文字过多而无法清晰地容纳,您应该将列出的第一个文字(尽可能多地容纳)放在实际封面上,并将其余部分继续放在相邻的页面上。

如果您出版或分发超过 100 份文档的不透明副本,您必须随每个不透明副本附带一份机器可读的透明副本,或者在每个不透明副本中或随附声明计算机网络位置,公众可以通过该位置使用公共标准网络协议下载文档的完整透明副本,且不包含添加的材料。如果您使用后一种选择,则在您开始大量分发不透明副本时,您必须采取合理谨慎的步骤,以确保该透明副本在该声明的位置保持可访问状态,直到您向公众分发该版本的最后一个不透明副本(直接或通过您的代理商或零售商)至少一年后为止。

建议(但不是必需的)您在重新分发大量副本之前充分联系文档的作者,让他们有机会向您提供文档的更新版本。


H.5. 修改

您可以根据上述第 2 节和第 3 节的条件复制和分发文档的修改版本,前提是您根据完全相同的本许可证发布修改版本,修改版本充当文档的角色,从而将修改版本的发行和修改许可给拥有其副本的任何人。此外,您必须在修改版本中执行以下操作:

  1. 在标题页(以及封面上,如果有)中使用与文档标题不同的标题,以及与先前版本标题不同的标题(如果存在任何先前版本,则应在文档的“历史”章节中列出)。如果先前版本的原始出版商给予许可,您可以使用与先前版本相同的标题。

  2. 在标题页上,列出作为作者的一个或多个人员或实体,他们负责修改版本的修改工作,以及至少五位文档的主要作者(如果文档的主要作者少于五位,则列出所有主要作者),除非他们免除您的此项要求。

  3. 在标题页上,声明修改版本的出版商的名称,作为出版商。

  4. 保留文档的所有版权声明。

  5. 在其他版权声明旁边添加适用于您的修改的适当版权声明。

  6. 在版权声明之后立即包含许可证声明,允许公众根据本许可证的条款使用修改版本,格式如下文 附录 所示。

  7. 在许可证声明中保留文档许可证声明中给出的不变章节和要求的封面文字的完整列表。

  8. 包含本许可证的未更改副本。

  9. 保留名为“历史”的章节,保留其标题,并在其中添加一项,至少说明标题页上给出的修改版本的标题、年份、新作者和出版商。如果文档中没有名为“历史”的章节,则创建一个名为“历史”的章节,说明标题页上给出的文档的标题、年份、作者和出版商,然后添加一项,描述上一句中所述的修改版本。

  10. 保留文档中给出的任何网络位置,以便公众访问文档的透明副本,并同样保留文档中给出的基于先前版本的网络位置。这些可以放在“历史”章节中。您可以省略在文档本身至少四年前发布的作品的网络位置,或者如果它引用的版本的原始出版商给予许可。

  11. 对于任何名为“致谢”或“献词”的章节,保留该章节的标题,并在该章节中保留其中给出的每位贡献者致谢和/或献词的所有实质内容和语气。

  12. 保留文档的所有不变章节,其文本和标题均不得更改。章节编号或等效内容不被视为章节标题的一部分。

  13. 删除任何名为“背书”的章节。此类章节不得包含在修改版本中。

  14. 不要将任何现有章节重命名为名为“背书”或在标题上与任何不变章节冲突。

  15. 保留任何担保免责声明。

如果修改版本包含符合次要章节条件的新前言章节或附录,并且不包含从文档复制的材料,您可以选择将其中一些或全部章节指定为不变章节。为此,请将它们的标题添加到修改版本的许可证声明中的不变章节列表中。这些标题必须与任何其他章节标题不同。

您可以添加一个名为“背书”的章节,前提是它仅包含各方对您的修改版本的背书,例如,同行评审声明或文本已被某个组织批准为标准的权威定义。

您可以添加一段最多五个单词的文字作为封面文字,以及一段最多 25 个单词的文字作为封底文字,添加到修改版本中封面文字列表的末尾。任何一个实体(或通过其安排)最多可以添加一段封面文字和一段封底文字。如果文档已经包含同一封面的封面文字,该文字 ранее 由您或由您代表的同一实体安排添加,则您不得添加另一个;但是,您可以替换旧的封面文字,但需要获得添加旧封面文字的先前出版商的明确许可。

文档的作者和出版商不通过本许可证授予使用其姓名进行宣传或声明或暗示认可任何修改版本的许可。


H.6. 合并文档

您可以将文档与其他根据本许可证发布的文档合并,根据上述 第 4 节 中针对修改版本的条款,前提是您在合并中包含所有原始文档的所有不变章节,且未经修改,并在其许可证声明中将它们全部列为合并作品的不变章节,并且您保留其所有担保免责声明。

合并的作品只需要包含本许可证的一个副本,并且多个相同的不变章节可以用单个副本替换。如果存在多个名称相同但内容不同的不变章节,则通过在其末尾括号中添加该章节的原始作者或出版商的名称(如果已知),或者添加唯一编号,使每个此类章节的标题都是唯一的。对合并作品的许可证声明中不变章节列表中的章节标题进行相同的调整。

在合并中,您必须合并各个原始文档中名为“历史”的任何章节,形成一个名为“历史”的章节;同样合并任何名为“致谢”的章节,以及任何名为“献词”的章节。您必须删除所有名为“背书”的章节。


H.7. 文档集合

您可以创建一个由文档和其他根据本许可证发布的文档组成的集合,并将各个文档中本许可证的单独副本替换为包含在集合中的单个副本,前提是您在所有其他方面都遵循本许可证关于逐字复制每个文档的规则。

您可以从此类集合中提取单个文档,并根据本许可证单独分发,前提是您在提取的文档中插入本许可证的副本,并在关于该文档的逐字复制的所有其他方面都遵循本许可证。


H.8. 与独立作品的聚合

文档或其衍生作品与其他单独且独立的文档或作品在存储或分发介质的卷中的汇编称为“聚合”,如果汇编产生的版权不用于限制汇编用户的合法权利超出各个作品允许的范围。当文档包含在聚合中时,本许可证不适用于聚合中不是文档衍生作品的其他作品。

如果第 3 节的封面文字要求适用于文档的这些副本,那么如果文档小于整个聚合的一半,则文档的封面文字可以放在括起聚合中文档的封面上,或者如果文档是电子形式,则放在封面的电子等效物上。否则,它们必须出现在括起整个聚合的印刷封面上。


H.9. 翻译

翻译被认为是一种修改,因此您可以根据第 4 节的条款分发文档的翻译版本。用翻译版本替换不变章节需要获得其版权持有者的特别许可,但您可以包含一些或全部不变章节的翻译版本,以及这些不变章节的原始版本。您可以包含本许可证的翻译版本,以及文档中的所有许可证声明和任何担保免责声明,前提是您还包含本许可证的原始英文版本以及这些声明和免责声明的原始版本。如果本许可证或声明或免责声明的翻译版本与原始版本之间存在分歧,则以原始版本为准。

如果文档中的某个章节名为“致谢”、“献词”或“历史”,则保留其标题(第 4 节)的要求(第 1 节)通常需要更改实际标题。


H.10. 终止

除非本许可证明确规定,否则您不得复制、修改、再许可或分发文档。任何其他复制、修改、再许可或分发文档的尝试均无效,并将自动终止您在本许可证下的权利。但是,根据本许可证从您那里收到副本或权利的各方,只要这些各方保持完全合规,其许可证就不会终止。


H.11. 本许可证的未来修订版

自由软件基金会可能会不时发布 GNU 自由文档许可证的新修订版。此类新版本在精神上将与当前版本相似,但在细节上可能有所不同,以解决新的问题或疑虑。请参阅 https://gnu.ac.cn/copyleft/。

许可证的每个版本都给出了一个区分版本号。如果文档指定本许可证的特定编号版本“或任何后续版本”适用于它,您可以选择遵循该指定版本或自由软件基金会已发布的任何后续版本(非草案)的条款和条件。如果文档未指定本许可证的版本号,您可以选择自由软件基金会发布的任何版本(非草案)。


H.12. 附录:如何在您的文档中使用本许可证

要在您编写的文档中使用本许可证,请在文档中包含本许可证的副本,并在标题页之后放置以下版权和许可证声明:

版权所有 (c) 年份 您的姓名。 允许根据 GNU 自由文档许可证 1.2 版或自由软件基金会发布的任何后续版本的条款复制、分发和/或修改本文档; 无不变章节,无封面文字,无封底文字。 许可证的副本包含在名为“GNU 自由文档许可证”的章节中。

如果您有不变章节、封面文字和封底文字,请将“无...文字”行替换为:

不变章节为 列表其标题,封面文字为 列表,封底文字为 列表。

如果您有不变章节但没有封面文字,或者三者的其他组合,请合并这两种备选方案以适应具体情况。

如果您的文档包含重要的程序代码示例,我们建议根据您选择的自由软件许可证(例如 GNU 通用公共许可证)并行发布这些示例,以允许在自由软件中使用它们。

注释

[1]

这需要用户进行几秒钟的认真思考。此外,可以配置 sudo 以仅允许用户执行某些命令。请参阅 sudo(8)、sudoers(5) 和 visudo(8) 手册页。