linux的运行级别及自启动程序

Linux运行级别:

Linux运行级别有七种:

1
2
3
4
5
6
7
0 - 停机(千万不能把initdefault 设置为0
1 - 单用户模式
2 - 多用户,没有 NFS
3 - 完全多用户模式(标准的运行级)
4 - 没有用到
5 - X11 (xwindow)
6 - 重新启动 (千万不要把initdefault 设置为6

默认的运行级别在/etc/inittab文件中进行设置。

加载开机启动程序

Linux系统启动确定运行级别后,加载运行级别下的自启动程序。

那么不同运行级别的,自启动程序不同,对应的启动程序目录也不同。如果需要查看3级别用户的启动程序,可以通过/etc/rc3.d 目录来查看。

目录名中的”rc”,表示run command(运行程序),最后的d表示directory(目录)。
下面让我们看看 /etc/rc3.d, 目录中到底指定了哪些程序

1
2
3
4
[root@dbserver etc]# ls /etc/rc3.d/
K01numad K01smartd K02oddjobd
S01sysstat S02lvm2-monitor S08iptables
...

从目录名,我们可以看出,目录均是以“字母K或S+2位数字+程序名”的形式。
字母K表示:kill,从其他运行级别切换到这一级别时,需要关闭的程序。
字母S表示:start,需要启动的程序。
数字表示:表示处理顺序,数字越小,处理得越早。数字相同时,按照程序首字母顺序启动。

前面提到,不同运行级别的,自启动程序不同,对应的启动程序目录也不同。不难想到,如果多个”运行级别”需要启动同一个程序,那么这个程序的启动脚本,就会在每一个目录里都有一个拷贝。

这样会造成管理上的困扰:如果要修改启动脚本,岂不是每个目录都要改一遍?

Linux的解决办法,就是七个 /etc/rcN.d 目录里列出的程序,都设为链接文件,指向另外一个目录 /etc/init.d ,真正的启动脚本都统一放在这个目录中。init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。

1
2
3
4
5
6
7
8
9
[root@dbserver rc3.d]# ll /etc/rc3.d/
总用量 0
lrwxrwxrwx. 1 root root 15 325 17:30 K01numad -> ../init.d/numad
lrwxrwxrwx. 1 root root 16 325 17:30 K01smartd -> ../init.d/smartd
lrwxrwxrwx. 1 root root 17 325 17:27 K02oddjobd -> ../init.d/oddjobd
lrwxrwxrwx. 1 root root 16 325 17:31 K10psacct -> ../init.d/psacct
lrwxrwxrwx. 1 root root 19 325 17:27 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx. 1 root root 20 325 17:25 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 13 325 17:26 K60nfs -> ../init.d/nfs

再看看链接指向的init.d文件,发现还是一个链接文件。所以最终的脚本文件在/etc/rc.d/init.d

1
2
[root@dbserver etc]# ll /etc/init.d
lrwxrwxrwx. 1 root root 11 325 17:15 init.d -> rc.d/init.d

链接文件目录:/etc/rcN.d
程序脚本文件目录:/etc/rc.d/init.d
用户自定义脚本:/etc/rc.d/init.d/rc.local

Shell配置文件

Shell的配置文件有如下五个:

1
2
3
4
5
/etc/profile
/etc/bashrc
~/.bash_profile
~/.bash_loginout
~/.bashrc

他们之间的区别:
/etc/profile 这是对所有用户都有效的配置,文件修改后,需要source生效重启;
~/.bash_profile 这是对当前用户有效的配置,文件修改后,需要source生效或重启;
/etc/bashrc 桌面状态下,打开一个不需要登陆的Shell时调用,对所有用户都有效,文件修改后,重新打开一个Shell就生效;
~/.bashrc 桌面状态下,打开一个不需要登陆的Shell时调用,对当前用户有效,文件修改后,重新打开一个Shell就生效;
~/.bash_loginout 当每次退出系统(退出bash shell)时,执行该文件。

参考
linux /etc/rc.d/init.d自启动程序说明
Linux系统的启动流程
系统运行级别(/etc/inittab)