扒掉linux的外衣,让我们看清Linux系统初始化的那些破事儿(一)

前面的文章谈了Grub(瓜逼)引导相关的一些问题。正常引导内核并加载后,即进入操作系统的系统初始化阶段。这篇文章浅谈一下linux系统初始化过程。

由于篇幅比较长,为方便大家在零碎时间能够一口气看完并理解,我将这个题目分成了2篇文章来写。

内核被引导后,会创建系统的第一个进程:init进程,init进程再通过读取该进程的配置文件,或者我们手动传递过来的一些参数(交互式启动),配置相应的初始化环境和服务等。

init进程是操作系统的第一个进程,也叫祖先进程,它的PID永远是1,其余的所有进程都是它的子孙进程,在Linux系统中,如果父进程关闭,那么其子进程也随之关闭,因此,这个进程如果被枪毙了,那么所有的进程也就自动退出了,该进程的配置文件为/etc/inittab(其实不同的linux系统位置是有可能不一样的,但文件名和原理是一样的),我们来看看这个配置文件的内容:

id:5:initdefault: #数字5表示启动的级别,5表示图形界面启动;

10:0:wait: /etc/rc.d/rc 0

……

16:6:wait : /etc/rc.d/rc 6 # 启动级别为6时,传递给rc程序的参数为6,则启动/etc/rc.d/rc6.d中的服务;

ca::ctrlaltdel : /sbin/shutdown -t3 -r now # 同时按下ctrl+alt+del后,等待3秒重启;

pf::powerfail : /sbin/shutdown -f -h +2 #UPS供电不足时,自动关机;

pr: 12345: powerokwait: /sbin/shutdown -c # UPS供电恢复后,取消自动关机(排除电源不稳情况);

1:2345:respawn: /sbin/mingetty tty1

……

6:2345: respawn: /sbin/mingetty tty6 # 这几行用于启动6个字符终端;

x: 5: respawn: /etc/x11/prefdm -nodaemon #如果启动的级别为5,则启动xwindows图形界面。

由/etc/inittab这个配置文件可知,操作系统的启动级别在这里被定义了,如果在系统启动时不传参数给内核,则系统根据该文件的配置作为启动级别的依据;但如果在系统刚刚被引导时,我们传递了启动参数给内核,那么将以传递的参数为准。

init进程被创建之后,将执行/etc/rc.d/rc.sysinit这个程序,实际上,rc.sysinit这个程序我们可以用less、more、cat等命令来查看就可知,它实际上是一个shell脚本,在这个脚本中,定义了系统启动时的一些必要的服务,待该程序执行完毕后,再根据/etc/inittab(或者传递的参数)定义的启动级别,执行对应的文件夹下的额外服务。例如:如果启动级别为5,则执行/etc/rc.d/rc5.d这个目录下的一系列服务,即假设启动级别为N,那么就会执行/etc/rc.d/rcN.d目录下定义的服务。

我们用ls -l这个命令来看看/etc/rc.d/rc5.d这个目录里面的服务是怎么样的。可以看见该目录下列出了一个一个的文件名,其名字定义如下:

S10network------>/etc/rc.d/init.d/network

其名字分为3段,第一段为一个字母K或者S,其中K表示Kill,即结束这个服务,S表示Start,即启动这个服务;后面是1-99之间的一个整数,这个数字代表了启动的顺序,数字越小越先启动;最后一串字母是实际服务的名字,如network表示网络服务的名字。所有的文件类型都是l软链接文件,其实际指向的位置都在/etc/rc.d/init.d这个目录里面。需要注意的是,在rcN.d目录里,先执行K的服务,再执行S的服务,即先复原,再启动服务。

由此,我们可以得出一些结论,限于篇幅问题,我将在下一篇文章中载出,也算卖个小关子吧。

哈哈哈,你懂的。

扒掉linux的外衣,让我们看清Linux系统初始化的那些破事儿(一)

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: