同所有的 Unix 一样, Debian 启动时要执行 init 程序. init 的配置文件(/etc/inittab)中指定的第一个执行脚本应该是 /etc/init.d/rcS. 该脚本执行 /etc/rcS.d/ 目录中各脚本的扩展名指定或衍生进程完成诸如检查并挂载文件系, 装载内核模块, 启动网络服务, 设定时钟等系统初始化工作. 接着, 为了兼容性考虑, 它运行 /etc/rc.boot/ 目录下的文件(除了那些文件名中包含 `.' 的文件), 目录中的脚本通常是供系统管理员使用的, 用于有兼容性问题的软件包.
完成系统启动进程后, init 执行默认运行级别(该运行级别由 /etc/inittab 中的 id 给出)指定的所有的启动脚本. 同大多数 System V 兼 容Unix 一样, Linux 有 7 个运行级别:
0 (关闭系统),
1 (单用户模式),
2 到 5 (各种多用户模式), 以及
6 (重启系统).
Debian 系统运行 id=2, 它表示进入多用户模式时默认运行级别为 '2', 所以将运行 /etc/rc2.d/ 中的脚本.
实际上, 任意目录 /etc/rcN.d/ 中的脚本都是指向 /etc/init.d/ 的符号链接(软件链接#ln -s 源文件 目标文件名). 然而, 每个 /etc/rcN.d/ 目录中文件的名称用来指定 /etc/init.d相应脚本的运行方式. 特别是, 在进入任何运行级别之前, 所有名称以 'K' 打头的脚本均被运行, 这些脚本的工作是中止进程. 然后, 所有名称以 'S' 打头的脚本被运行, 这些脚本的工作是启动进程. 名称中跟在 'K' 或 'S' 后的两位数规定了脚本运行的先后次序, 数字小的脚本先运行.
采用这种工作方式是因为 /etc/init.d/ 中的脚本均有一个参数规定脚本`start', `stop', `reload', `restart' 或 `force-reload', 脚本按各自参数的赋值执行任务. 这些脚本甚至可以在系统启动后, 用来控制各种进程.
例如, 使用带 `reload' 参数的命令
/etc/init.d/sendmail reload
发给 sendmail daemon 进程一个信号, 要它重读配置文件。
我们可在rc.local文件中添加开机要启动的项目,就可以达到开机自动启动的效果。因为rc.local在/etc/init.d/下。rc.local又默认符号链接到debian开机启动脚本rc2.d下。或者可直接在/etc/init.d下创建一个可执行的脚本,直接在rc2.d中做一个符号链接。如:在init.d下创建了一个firewall的脚本,在rc2.d下一个符号链接#ln -s /etc/init.d/firewall S20firewall