操作系统如何知道传递给/etc/init.d/的参数?

我一直在使用Linux一段时间,但以一个相当简单的方式。

我知道init.d中的脚本是在os启动的时候执行的,但是它究竟是如何工作的呢?

操作系统如何知道哪个parameter passing给脚本?

启动apache我会做sudo /etc/init.d/apache2 start。 如果我运行sudo /etc/init.d/apache2,没有启动就无法运行。 os如何开始到脚本?

根据您的Linux发行版和版本,最终sysvinit脚本( /etc/init.d/那些脚本)通常由/etc/init.d/rc存在于/etc/rc[0-6S].d的符号链接运行/etc/init.d/rc

在Ubuntu下,你要么使用旧式的sysvinit ,要么是最近的upstart 。 在新贵的pipe理目录( /etc/events.d/ )下,你会发现一个遗留模式,它回退到/etc/init.d/rc调用。 否则,通过/etc/inittab为每个运行级别调用/etc/init.d/rc

如果您检查/etc/init.d/rc的逻辑,您会发现它根据运行级别( 0S无条件停止)或脚本前缀( S[0-9][0-9]*脚本开始, K[0-9][0-9]* (杀死)脚本停止)。 运行级别目录(例如: /etc/rc1.d/ )中脚本的编号决定脚本停止或启动的顺序。 杀死脚本首先运行,然后启动脚本。

更多关于这个,研究sysvinit和新贵。

我build议你阅读一些关于如何运行级别和初始化脚本工作的教程 – http://www.debian-administration.org/article/212/An_introduction_to_run-levels似乎是很容易理解的。

简而言之,脚本不是直接调用,而是通过/etc/rc.d目录中的符号链接(其中n = runlevel)来调用。 符号链接的名称格式如下:

 [K | S] + nn + [string] 

其中nn是标记脚本运行顺序的数字(较低的数字在前),K或S决定是否使用“stop”或“start”参数运行脚本。