Linux启动过程概述

   摘要:简单描述了Linux机器启动的过程。提到的几个重要内容包括/etc/inittab文件、/etc/rc.d或者/etc/init.d目录下的文件、/etc/sysconfig目录下的文件。

   机器启动时第一个读取的地方是BIOS(Basic I/O System),BIOS里记录了硬件的相关信息。读取了BIOS的内容后,会根据BIOS的内容对硬件加电自检(POST)。POST通过之后会根据BIOS里设置的启动设备顺序搜索启动设备。
    硬盘的第一个区域称为MBR(master boot record),MBR中安装了引导加载程序。现时主流的Linux引导加载程序是GRUB,它可以识别Linux的核心文件和Windows的核心文件。所以安装时要先安装Windows后安装Linux,因为Windows的引导加载程序无法识别Linux的核心文件。
    引导加载程序会去读取核心文件,读取之后Linux会将核心文件解压缩到内存中。加载核心文件的时候只会载入根目录/,并且是以只读的方式载入。
     核心加载结束之后就开始执行程序。第一个被执行的程序是init,利用ps aux | more 命令可以看到第一行显示的内容即是init,它的PID是1.
    Init程序做的工作很多。首先就会去读取/etc/inittab文件获取runlevel,获取到runlevel之后,就会根据相关runlevel的设置启动其他程序。在启动有关服务之前,init程序需要设置好整个系统环境。在SuSE中,是根据/etc/init.d/boot脚本文件和/etc/init.d/rc脚本文件来设置系统环境的。(RedHat系统中是根据/etc/rc.d/rc.sysinit脚本文件来设置系统环境的)。所谓系统环境主要包括,获取网络设置、检测usb设备、用户自定义模块加载、系统时间设置等等。
    很多系统设置都是保存在/etc/sysconfig目录下面。所以这个目录的内容要好好了解。比如说网络的设置(ip地址等等),就在/etc/sysconfig/network目录内。比如需要修改网卡的ip的话,就可以到这里直接修改配置文件的内容,然后再重启网络服务。(当然也可以通过ifconfig命令修改,但它的修改最终还是反映到这个文件上的)
    Init程序设置好系统环境后就要根据/etc/ininttab文件中指定的运行级别,启动相关的服务了。Linux定义了好几个运行级别:0是系统直接关机;1是单用户模式,用于系统出问题后的维护;2是多用户模式,但是没有nfs服务;3是命令行的多用户模式;4是预留的,未使用;5是带图形界面的多用户模式;6是重启系统。我们日常使用的运行级别多为3或者5.可以使用命令runlevel来查看系统当前的运行级别。要切换到其他运行级别,可以使用命令init x (x为运行级别的数字),比如要直接关闭系统可以输入命令init 0
    每个运行级别的区别在于它们会启动的服务有所不同。不同的运行级别要启动哪些服务是由/etc/rc.d/rcx.d目录内的内容决定的。比如在/etc/rc.d/rc3.d目录内就有在运行级别3下面要启动的服务的内容。(在SuSE下,/etc/rc.d下面的内容和/etc/init.d下的内容是一样的,是不是为了兼容其他Linux发行版的习惯啊?)
    rc3.d目录下的文件都是链接文件,文件都是以Kxx或者Sxx开头的,xx代表的两位数字是指启动的顺序,首先启动01,然后是02等等。S开头的文件表示开机时需要启动的服务,手工启动时使用“文件名 start”来启动该服务,K开头的文件表示关机时需要关闭的服务,手工关闭时使用“文件名 stop”来关闭。大部分的服务也支持“文件名 restart”的方式重启服务。比如要重启网络服务,可以使用"/etc/init.d/network restart”的方式来执行。(在SuSE下也可以执行"/etc/init.d/network restart”,效果一样。之所以是init.d或者rc.d下的network是因为在rc3.d目录下的network文件是链接文件,它指到了这两个位置中的一个。)这里提到的文件都是shell脚本文件,为了方便起见,将一些服务的启动关闭要做的事情写成一个脚本,通过执行脚本的方式来控制这些服务的启动关闭。

你可能感兴趣的:(linux,windows,redhat,脚本,SuSE)