F.2.4. /sbin/init 程序


/sbin/init 程序(也称作 init)协调余下的引导过程并为用户配置环境。
init 命令启动时,它成为系统里所有自动启动程序的父程序或者祖父(grandparent)程序。首先,它运行 /etc/rc.d/rc.sysinit 脚本设置环境路径、启动 swap、检查文件系统并执行所有系统初始化所需的其他步骤。例如,多数系统会使用时钟,因此 rc.sysinit 读取 /etc/sysconfig/clock 配置文件来初始化硬件时钟。另外一个示例是,如果有必须初始化的特殊串口程序,rc.sysinit 会执行 /etc/rc.serial 脚本。
然后 init 命令处理 /etc/event.d 目录中的任务,这些任务描述了在每个SysV 初始化运行级别中应该如何设置系统。运行级别(runlevel)是一个状态或者模式,它由 SysV /etc/rc.d/rc<x>.d/ 目录中列出的服务定义,其中 <x> 是运行级别号。有关 SysV init 运行级别的详情,请参考 第 F.4 节 “SysV Init 运行级别”
接下来 init 命令为系统设置源功能库,/etc/rc.d/init.d/functions,它可配置如何启动、杀死程序以及确定程序的程序号(PID)。
init 通过在正确 rc 目录中查找 /etc/inittab 中指定的运行级别启动所有后台进程。对 rc 目录编号对应其代表的运行级别。例如:/etc/rc.d/rc5.d/ 是代表运行级别 5 的目录。
当引导至运行级别 5 时,init 程序会在 /etc/rc.d/rc5.d/ 目录中查看并确定要启动和停止的进程。
下面是 /etc/rc.d/rc5.d/ 目录内容的示例:
K05innd -> ../init.d/innd
K05saslauthd -> ../init.d/saslauthd
K10dc_server -> ../init.d/dc_server
K10psacct -> ../init.d/psacct
K10radiusd -> ../init.d/radiusd
K12dc_client -> ../init.d/dc_client
K12FreeWnn -> ../init.d/FreeWnn
K12mailman -> ../init.d/mailman
K12mysqld -> ../init.d/mysqld
K15httpd -> ../init.d/httpd
K20netdump-server -> ../init.d/netdump-server
K20rstatd -> ../init.d/rstatd
K20rusersd -> ../init.d/rusersd
K20rwhod -> ../init.d/rwhod
K24irda -> ../init.d/irda
K25squid -> ../init.d/squid
K28amd -> ../init.d/amd
K30spamassassin -> ../init.d/spamassassin
K34dhcrelay -> ../init.d/dhcrelay
K34yppasswdd -> ../init.d/yppasswdd
K35dhcpd -> ../init.d/dhcpd
K35smb -> ../init.d/smb
K35vncserver -> ../init.d/vncserver
K36lisa -> ../init.d/lisa
K45arpwatch -> ../init.d/arpwatch
K45named -> ../init.d/named
K46radvd -> ../init.d/radvd
K50netdump -> ../init.d/netdump
K50snmpd -> ../init.d/snmpd
K50snmptrapd -> ../init.d/snmptrapd
K50tux -> ../init.d/tux
K50vsftpd -> ../init.d/vsftpd
K54dovecot -> ../init.d/dovecot
K61ldap -> ../init.d/ldap
K65kadmin -> ../init.d/kadmin
K65kprop -> ../init.d/kprop
K65krb524 -> ../init.d/krb524
K65krb5kdc -> ../init.d/krb5kdc
K70aep1000 -> ../init.d/aep1000
K70bcm5820 -> ../init.d/bcm5820
K74ypserv -> ../init.d/ypserv
K74ypxfrd -> ../init.d/ypxfrd
K85mdmpd -> ../init.d/mdmpd
K89netplugd -> ../init.d/netplugd
K99microcode_ctl -> ../init.d/microcode_ctl
S04readahead_early -> ../init.d/readahead_early
S05kudzu -> ../init.d/kudzu
S06cpuspeed -> ../init.d/cpuspeed
S08ip6tables -> ../init.d/ip6tables
S08iptables -> ../init.d/iptables
S09isdn -> ../init.d/isdn
S10network -> ../init.d/network
S12syslog -> ../init.d/syslog
S13irqbalance -> ../init.d/irqbalance
S13portmap -> ../init.d/portmap
S15mdmonitor -> ../init.d/mdmonitor
S15zebra -> ../init.d/zebra
S16bgpd -> ../init.d/bgpd
S16ospf6d -> ../init.d/ospf6d
S16ospfd -> ../init.d/ospfd
S16ripd -> ../init.d/ripd
S16ripngd -> ../init.d/ripngd
S20random -> ../init.d/random
S24pcmcia -> ../init.d/pcmcia
S25netfs -> ../init.d/netfs
S26apmd -> ../init.d/apmd
S27ypbind -> ../init.d/ypbind
S28autofs -> ../init.d/autofs
S40smartd -> ../init.d/smartd
S44acpid -> ../init.d/acpid
S54hpoj -> ../init.d/hpoj
S55cups -> ../init.d/cups
S55sshd -> ../init.d/sshd
S56rawdevices -> ../init.d/rawdevices
S56xinetd -> ../init.d/xinetd
S58ntpd -> ../init.d/ntpd
S75postgresql -> ../init.d/postgresql
S80sendmail -> ../init.d/sendmail
S85gpm -> ../init.d/gpm
S87iiim -> ../init.d/iiim
S90canna -> ../init.d/canna
S90crond -> ../init.d/crond
S90xfs -> ../init.d/xfs
S95atd -> ../init.d/atd
S96readahead -> ../init.d/readahead
S97messagebus -> ../init.d/messagebus
S97rhnsd -> ../init.d/rhnsd
S99local -> ../rc.local
Copy to Clipboard Toggle word wrap
如这个列表所示,所有真正启动和停止服务的脚本都不在 /etc/rc.d/rc5.d/ 目录中。相反,/etc/rc.d/rc5.d/ 中的所有文件都是指向 /etc/rc.d/init.d/ 中的脚本的符号链接。在 rc 里使用符号链接以便在不影响其参考的脚本的情况下,通过重新创建、修改和删除这些符号链接重新配置运行级别。
每个符号链接的名字都以 K 或者 S 开头。以 K 开头的链接是在这个运行级别需要杀死的程序,而以 S 开头的链接是需要启动的程序。
首先,init 命令通过 /etc/rc.d/init.d/<command> stop 命令来停止目录中的所有 K 符号链接,其中 <command> 是需要杀死的程序名。然后,它他通过 /etc/rc.d/init.d/<command> start 启动所有 S 符号链接。

注意

在系统完成引导后,也可以 root 用户登录,并执行这些同样的脚本启动和停止服务。例如,/etc/rc.d/init.d/httpd stop 可用来停止 Apache HTTP 服务器。
为每个符号链接编号来指定启动顺序。可以更改这个数字可改变服务启动或停止的顺序。数字越小,就越早启动。有着相同数字的符号链接则按字母顺序启动。

注意

init 程序最后执行的是 /etc/rc.d/rc.local 文件。这个文件对于自定义系统很有用。有关使用 rc.local 文件的详情请参考 第 F.3 节 “在引导时运行附加程序”
After the init command has progressed through the appropriate rc directory for the runlevel, Upstart forks an /sbin/mingetty process for each virtual console (login prompt) allocated to the runlevel by the job definition in the /etc/event.d directory. Runlevels 2 through 5 have all six virtual consoles, while runlevel 1 (single user mode) has one, and runlevels 0 and 6 have none. The /sbin/mingetty process opens communication pathways to tty devices[18], sets their modes, prints the login prompt, accepts the user's username and password, and initiates the login process.
In runlevel 5, Upstart runs a script called /etc/X11/prefdm. The prefdm script executes the preferred X display manager[19]gdm, kdm, or xdm, depending on the contents of the /etc/sysconfig/desktop file.
完成后,系统将在运行级别 5 中运行并显示登录屏幕。


[18] Refer to the Red Hat Enterprise Linux Deployment Guide for more information about tty devices.
[19] Refer to the Red Hat Enterprise Linux Deployment Guide for more information about display managers.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat