Total Pageviews

Thursday, 5 April 2012

/etc/init.d和/etc/rc.d/init.d的关系


这两个其实是同一个东西,/etc/init.d是/etc/rc.d/init.d的软链接。并且这个东西只有在 fedora下面有,ubuntu下面没有/etc/rc.d/这个目录,只有/etc/init.d,openSUSE下面有/etc/rc.d,直接 链接的/etc/init.d。
并且有时候可以看到rc0.d/这样的目录,查看这些目录里的文件,ls -l,发现都是软链接。
要想搞明白这里面的关系就要搞明白Linux的运行级。打开/etc/inittab,里面应该有注释,
# 0 – 停机(千万别把initdefault设置为0,否则系统永远无法启动)
# 1 – 单用户模式
# 2 – 多用户,没有 NFS
# 3 – 完全多用户模式(标准的运行级)
# 4 – 系统保留的
# 5 – X11 (x window)
# 6 – 重新启动 (千万不要把initdefault 设置为6,否则将一直在重启 )
不同的运行级,开机启动的时候会开启不同的服务,所以当开机以后执行init(pdi为1,是开机后执行的第一个进程,所有其他进程都是这个进程的后代)这个进程,就会根据不同的运行级开启不同的默认服务(fedora下是读取rc.sysinit)。
可以看到rc0.d/这样的目录下的脚本前面都带有S或者K,s就是start,k就是kill。比如说当你从运行级5到3切换的时候,可能就会关掉有些服务,这时候就会执行k开头的脚本。
并且字母后面会接着数字,表示的是脚本执行的先后顺序,数字越小越早执行,很多时候这些执行顺序是很重要的,比如要启动Apache服务,就必须先配置网络接口,不然一个没有IP的机子来启动http服务那岂不是很搞笑…

总结的说,/etc/init.d这个目录是所有服务的脚本,可以通过执行脚本并且加上参数,开启关闭或者重启对应的服务,/etc/rc.d/这个目录的放置的应该就是开机就默认开启的服务,并且根据不同的运行级别划分了不同的rc0.d/这样的目录,ubuntu下面的rc0.d/这样的目录都是直接放在 /etc/下面的。
跟以上这些发行版不同的是,archlinux用的是类似BSD的方式,所有的服务脚本放在/etc/rc.d目录下(没有init.d这个目录 了),放在这个目录下并不意味之开机就会默认开启,开机要想默认开启某项服务,要自己把要开启的服务添加到/etc/rc.conf的DAEMONS里 面,不过这样的话就没有运行级这个概念了,不管系统是哪个运行级起来的,这些服务默认都会开机启动。

No comments:

Post a Comment