理解linux的配置文件
本文说明了 Linux 系统的配置文件,在多用户、多任务环境中,配置文件控制用户权限、系统应用程序、守护进程、服务和其它管理任务。这些任务包括管理用户帐号、分配磁盘配额、管理电子邮件和新闻组,以及配置内核参数。本文还根据配置文件的使用和其所影响的服务的情况对目前 Red Hat Linux 系统中的配置文件进行了分类。介绍
每个 Linux 程序都是一个可执行文件,它含有操作码列表,CPU 将执行这些操作码来完成特定的操作。例如,ls 命令是由 /bin/ls 文件提供的,该文件含有机器指令的列表,在屏幕上显示当前目录中文件的列表时需要使用这些机器指令。几乎每个程序的行为都可以通过修改其配置文件来按照您的偏好或需要去定制。
Linux 中有没有一个标准的配置文件格式?
一句话,没有。不熟悉 Linux 的用户(一定)会感到沮丧,因为每个配置文件看起来都象是一个要迎接的新挑战。在 Linux 中,每个程序员都可以自由选择他或她喜欢的配置文件格式。可以选择的格式很多,从 /etc/shells 文件(它包含被一个换行符分开的 shell 的列表),到 Apache 的复杂的 /etc/httpd.conf 文件。
什么是系统配置文件?
内核本身也可以看成是一个“程序”。为什么内核需要配置文件?内核需要了解系统中用户和组的列表,进而管理文件权限(即根据权限判定特定用户(UNIX_USERS)是否可以打开某个文件)。注意,这些文件不是明确地由程序读取的,而是由系统库所提供的一个函数读取,并被内核使用。例如,程序需要某个用户的(加密过的)密码时不应该打开 /etc/passwd 文件。相反,程序应该调用系统库的 getpw() 函数。这种函数也被称为系统调用。打开 /etc/passwd 文件和之后查找那个被请求的用户的密码都是由内核(通过系统库)决定的。
除非另行指定,Red Hat Linux 系统中大多数配置文件都在 /etc 目录中。配置文件可以大致分为下面几类:
访问文件
/etc/host.conf | 告诉网络域名服务器如何查找主机名。(通常是 /etc/hosts,然后就是名称服务器;可通过 netconf 对其进行更改) |
/etc/hosts | 包含(本地网络中)已知主机的一个列表。如果系统的 IP 不是动态生成,就可以使用它。对于简单的主机名解析(点分表示法),在请求 DNS 或 NIS 网络名称服务器之前,/etc/hosts.conf 通常会告诉解析程序先查看这里。 |
/etc/hosts.allow | 请参阅 hosts_access 的联机帮助页。至少由 tcpd 读取。 |
/etc/hosts.deny | 请参阅 hosts_access 的联机帮助页。至少由 tcpd 读取。 |
引导和登录/注销
/etc/issue & /etc/issue.net | 这些文件由 mingetty(和类似的程序)读取,用来向从终端(issue)或通过 telnet 会话(issue.net)连接的用户显示一个“welcome”字符串。它们包括几行声明 Red Hat 版本号、名称和内核 ID 的信息。它们由 rc.local 使用。 |
/etc/redhat-release | 包括一行声明 Red Hat 版本号和名称的信息。由 rc.local 使用。 |
/etc/rc.d/rc | 通常在所有运行级别运行,级别作为参数传送。例如,要以图形(Graphics)模式(X-Server)引导机器,请在命令行运行下面的命令: init 5 。运行级别 5 表示以图形模式引导系统。 |
/etc/rc.d/rc.local | 非正式的。可以从 rc、rc.sysinit 或 /etc/inittab 调用。 |
/etc/rc.d/rc.sysinit | 通常是所有运行级别的第一个脚本。 |
/etc/rc.d/rc/rcX.d | 从 rc 运行的脚本( X 表示 1 到 5 之间的任意数字)。这些目录是特定“运行级别”的目录。当系统启动时,它会识别要启动的运行级别,然后调用该运行级别的特定目录中存在的所有启动脚本。例如,系统启动时通常会在引导消息之后显示“entering run-level 3”的消息;这意味着 /etc/rc.d/rc3.d/ 目录中的所有初始化脚本都将被调用。 |
文件系统
内核提供了一个接口,用来显示一些它的数据结构,这些数据结构对于决定诸如使用的中断、初始化的设备和内存统计信息之类的系统参数可能很有用。这个接口是作为一个独立但虚拟的文件系统提供的,称为 /proc 文件系统。很多系统实用程序都使用这个文件系统中存在的值来显示系统统计信息。例如,/proc/modules 文件列举系统中当前加载的模块。lsmod 命令读取此信息,然后将其以人们可以看懂的格式显示出来。下面表格中指定的 mtab 文件以同样的方式读取包含当前安装的文件系统的 /proc/mount 文件。
/etc/mtab | 这将随着 /proc/mount 文件的改变而不断改变。换句话说,文件系统被安装和卸载时,改变会立即反映到此文件中。 |
/etc/fstab | 列举计算机当前“可以安装”的文件系统。这非常重要,因为计算机引导时将运行 mount -a 命令,该命令负责安装 fstab 的倒数第二列中带有“1”标记的每一个文件系统。 |
/etc/mtools.conf | DOS 类型的文件系统上所有操作(创建目录、复制、格式化等等)的配置。 |
系统管理
/etc/group | 包含有效的组名称和指定组中包括的用户。单一用户如果执行多个任务,可以存在于多个组中。例如,如果一个“用户”是“project 1”工程组的成员,同时也是管理员,那么在 group 文件中他的条目看起来就会是这样的: user: * : group-id : project1 |
/etc/nologin | 如果有 /etc/nologin 文件存在,login(1) 将只允许 root 用户进行访问。它将对其它用户显示此文件的内容并拒绝其登录。 |
etc/passwd | 请参阅“man passwd”。它包含一些用户帐号信息,包括密码(如果未被 shadow 程序加密过)。 |
/etc/rpmrc | rpm 命令配置。所有的 rpm 命令行选项都可以在这个文件中一起设置,这样,当任何 rpm 命令在该系统中运行时,所有的选项都会全局适用。 |
/etc/securetty | 包含设备名称,由 tty 行组成(每行一个名称,不包括前面的 /dev/),root 用户在这里被允许登录。 |
/etc/usertty /etc/shadow | 包含加密后的用户帐号密码信息,还可以包括密码时效信息。包括的字段有:
|
/etc/shells | 包含系统可用的可能的“shell”的列表。 |
/etc/motd | 每日消息;在管理员希望向 Linux 服务器的所有用户传达某个消息时使用。 |
联网
/etc/gated.conf | gated 的配置。只能被 gated 守护进程所使用。 |
/etc/gated.version | 包含 gated 守护进程的版本号。 |
/etc/gateway | 由 routed 守护进程可选地使用。 |
/etc/networks | 列举从机器所连接的网络可以访问的网络名和网络地址。通过路由命令使用。允许使用网络名称。 |
/etc/protocols | 列举当前可用的协议。请参阅 NAG(网络管理员指南,Network Administrators Guide)和联机帮助页。 C 接口是 getprotoent。绝不能更改。 |
/etc/resolv.conf | 在程序请求“解析”一个 IP 地址时告诉内核应该查询哪个名称服务器。 |
/etc/rpc | 包含 RPC 指令/规则,这些指令/规则可以在 NFS 调用、远程文件系统安装等中使用。 |
/etc/exports | 要导出的文件系统(NFS)和对它的权限。 |
/etc/services | 将网络服务名转换为端口号/协议。由 inetd、telnet、tcpdump 和一些其它程序读取。有一些 C 访问例程。 |
/etc/inetd.conf | inetd 的配置文件。请参阅 inetd 联机帮助页。包含每个网络服务的条目,inetd 必须为这些网络服务控制守护进程或其它服务。注意,服务将会运行,但在 /etc/services 中将它们注释掉了,这样即使这些服务在运行也将不可用。格式为:<service_name> <sock_type> <proto> <flags> <user> <server_path> <args> |
/etc/sendmail.cf | 邮件程序 sendmail 的配置文件。比较隐晦,很难理解。 |
/etc/sysconfig/network | 指出 NETWORKING=yes 或 no。至少由 rc.sysinit 读取。 |
/etc/sysconfig/network-scripts/if* | Red Hat 网络配置脚本。 |
系统命令
系统命令要独占地控制系统,并让一切正常工作。所有如 login(完成控制台用户身份验证阶段)或 bash(提供用户和计算机之间