一、简单介绍RHEL开机时的先后顺序BIOS—MBR—Kernel—init1、当电脑一打开电源时电脑就会进入BIOS(BIOS的工作主要是检测一些硬件设备);2、检测完后会进入MBR也就是bootloader(MBR位于硬盘的第一个扇区总共512bytes,其中前446bytes里面的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载入系统的Kernel(核心),在Kernel里主要是载入电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读方式来挂载根目录,也就是一开始只能读取到根目录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个目录必须同根目录在一个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第一个执行的程序;init这个程序会根据Runlevel来执行以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界面管理程序二、BIOS初始化时主要的三个任务BIOS(BasicInput/OutputSystem)1、电脑周边设备的检测,加电自检POST(Poweronselftest);2、BIOS会选择要由哪一个设备来开机,例如:软盘启动、光盘启动、网络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR引导扇区;三、介绍BootLoader中的主要工作1、BootLoader可以安装在两个地方:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占用就可以将BootLoader安装在硬盘中的其中一个分区的引导扇区上,;2、BootLoader的程序码分为两个阶段:(1)BootLoader第一阶段的程序码非常小,只有446bytes,可以存入在MBR或是某一个分区的引导扇区里,(2)BootLoader第一阶段的程序码是从boot分区来载入的,就是说BootLoader第二阶段程序码存放在/boot这个分区中;3、下面来看三个BootLoader的开机流程范例,如在一块硬盘中安装了两个系统分别为:windows2003和Redhatlinux当电脑开机后,会先载入MBR通过第一阶段程序码来载入第二阶段程序码,进入GRUB开机菜单这里选择哪个系统就会载入相应的核心;四、介绍GRUB和grub.conf这个配置文件的内容其实从MBR载入BootLoader开始,载入Kernel,载入init这些程序之间都是由GRUB这个多重开机管理程序所负责的。1、GRUB(GRandUnifiedBootloader)拥有以下特性:·GRUB的开机管理程序可以在开机提示字元的界面下输入指令;例如在GRUB界面下可以按C键就会来到以grub开头的提示符来输入据指令;·GRUB的开机管理程序可以支持以下几种文件系统:ext2/ext3、ReiserFS、JFS、FAT、minix、FFS等等;·支持MD5的密码来保护GRUB的配置文件;2、/boot/grub/grub.conf这个配置文件是GRUB的配置文件,在做修改前推荐先做好备份下面来介绍这个配置文件的内容以及里面的语法:·以#开头的行为注解执行时不会使用;·可以以title开头的一行为准,分为上下两部分:(1)基本设定:default=0指预设使用第一组title的系统记录开机,如果有多个title表示有多重启动,如果预设要使用第二组系统开机就将此值设为1timeout=5指进入GRUB的界面后,会有5秒时间让使用者选择要启动的系统,如果未选择自动使用上面的default设定的值;splashimage=(hd0,0)/grub/splash.xpm.gz开机时使用的背景图案,这里的(hd0,0)意思为(硬盘编号,分区编号)hiddenmenu隐藏开机的菜单(2)用于区分多个系统的设定,如果这台主机中还安装了其它系统并设定了多重启动,在这里还可以看到其它系统的设定;titleRedHatEnterpriseLinuxAS(2.6.9-11.EL)在GRUB开机菜单中所显示的开机的系统名称root(hd0,0)指定下面的档案位于哪个目录中,这个hd0,0同样指的是用于指引导的目录,通常指/boot目录kernel/vmlinuz-2.6.9-11.ELroroot=LABEL=/rhgbquiet设定kernel镜像的存放位置,这个位置相对于上面root那一行所指定的位置的相对位置,roroot=LABEL=/是设定/在根目录的位置,ro是只读的意思,也就是以只读方式挂载根目录,也可以使用root=/dev/hda2类似于这种形式来挂载根目录;rhgb意思是以图形界面显示开机过程,去掉则以文字界面显示;quiet意思是设定开机过程中不显示错误信息;initrd/initrd-2.6.9-11.EL.img将这个指定的文件载入到内存中,这个文件里都是存放一些驱动程序;3、如果我们修改完grub.conf这个配置文件后,设定为立即生效;4、另外,如果硬盘上的MBR被清除掉了,可使用下面的指令来重新安装bootloader到MBR中:/sbin/grub-install/dev/hda5、介绍进入GRUB的开机管理程式可以做哪些动作(开机前改Kernel的参数)(1)开机后在进入GRUB界面后,先选择要使用的系统(这里选择Linux)(2)按下a键,可以在开机修改Kernel的参数,也就是可以传一个参数给Kernel;这时可以看到下面这个界面(3)上图中root=LABEL=/这部分不可以动,将后面的都去掉后,先输入一个空格再输入一个1,如下图:这个1就是附加的一个参数,表示要进入单用户模式,不需要输入root密码就可以以root身份登录;(4)当进入到#提示字元时,就可以设定root密码了。这时会发现一个问题任何人到主机前都可以通过这种方式修改ROOT密码是很不安全的。6、为GRUB进入单用户模式设定密码及加密方法:在GRUB的设定档中设定密码,以防止非法者以单用户模式进入。(1)编辑grub.conf配置文件,在基本设定的部分里,插入一行password123456来设定密码,这里是将密码设定为123456。(2)当重新开机后,在GRUB的菜单中,需要输入P,再输入密码才可以进行下一步,选择其它的模式。(3)可以发现上面设定的密码是明文的,在GRUB中是可以对这个密码进行加密的,如下图:注:grub-md5-crypt这个指令在设定一个加密的密码的时候,就算每次输入的密码相同经加密后也是不同的,所以上面的几组密码都不一样,grub-md5-crypt/boot/grub/grub.conf这行指令在执行后不会你上面那样会提示出输入两次密码,虽然没有提示但还是可以输入的,每输入一次密码按一次回车,等设定好密码后,再打开grub.conf文件时,就会发现经过加密的密码就追加到了grub.conf文件中去了,将追加文件中的前二行去掉,第三行就是要使用的密码了,然后就像上图中那样进行设定,等上面的设定好后,一定要删除掉最后三行的内容,不然会出错的。password–-md5这里面的md5表示后面使用的密码是经过md5加密的。7、在进入系统前,按E键进入命令编辑模式,来修改引导配置文件在GRUB菜单选择时,按e键,就可以看到所对应系统的三行grub.conf中的配置参数,选择有错误的一行,再按e键,可修改这一行:如下图:选择了第二行,按E键,就可以修改这行内容了,这里只是未了举例子,将正常启动的一行改为了要使用单用户模式启动,修改完成后按回车,返回上一界面,再按b键,使用编辑后的设定开机。五、介绍Kernel初始化时所做的工作Kernel在开机时,有以下四项工作:1、检测电脑上的硬件设备;2、将检测到的硬件驱动程序载入Kernel;3、如果必要的驱动载入后Kernel将根目录以只读方式挂载进来;4、Kernel载入第一个程序init这个程序;六、介绍init这个程序在初始化时做了哪些工作init程序读取的是/etc/inittab这个配置文件来决定要做哪些操作1、决定预设要使用哪个RunLevel下面介绍几个常用的(RunLevel将在下节做详细介绍)RunLevel可以从0到6分为7种·runlevel1:单用户模式,主要用来维护系统,这在前面已经使用过了;·runlevel3:会启用完整的服务但登录后进入文字模式;·runlevel5:启用完整的服务登录后进入图形界面模式;注:在inittab的配置文件里id:5:initdefault:这项initdefault的前面设定为5表示预设会用runlevel5,也就是默认启用完整服务并进入图形界面模式。2、init会执行初始作业系统的程序3、init会根据执行的runlevel来执行runlevel对应目录里面的程序,如果inittab配置文件里预设的runlevel是5,那么就会把5的参数传给/etc/rc.d/rc这个程序执行,在/etc/rc.d目录下就可以看到rc0.d至rc6.d七个目录runlevel所对应的目录,所以init程序会根据执行的runlevel来执行runlevel对应目录里面的程序,来决定要启用哪些服务。4、设某个组合键,如下图:定义快捷键,按这三个组合键3秒后重启系统6、在定义UPS不断电系统,当电源发生问题时,以及电源恢复时都要执行哪些程序。6、产生六个virtualconsoles(虚拟控制台)(tty1~tty6)7、如果启动的是runlevel5,初始化工作就会启动X11(图形界面)七、iniit初始化流程图以下小节将依据上面的流程图为准逐一介绍八、介绍RunLevel(init初始化流程第一步)其中在RunLevel里除了0~6这七种外,还有S和emergency这两种RunLevel功能0用来做关机用的(不可以设在initdefault里)1,S,emergency单用户模式(只允许root帐号登录,主要是用来做维护系统工作)2可以允许所有使用者登录,但不启用网络功能3允许所有使用者登录,拥有完整的功能,但是以文字模式进入系统4用户可自定义的,预设下与Runlevel3是相同的5与Runlevel3功能是一样的,允许所有使用者登录,拥有完整功能,以图形界面模式进入系统6用于重启主机(不可以设在initdefault里)RunLevel1,S,emergency这三种执行时的主要差别在于执行程序的多少:·1:执行init程序后,会接着执行/etc/rc.sysinit程序来初始化系统,再执行/etc/rc1.d/目录下的所有程序;·S:执行init程序后,只会执行/etc/rc.sysinit程序来初始化系统;·emergency:执行init程序后,只会执行/etc/rc.sysinit程序中某些必要的程序,并不会全部执行;1、介绍一些Runlevel的特性Runlevel是使用init这个指令来定义要使用哪个runlevel。2、下面有三种方式可以选择要使用哪个Runlevel(1)在开机时,预设runlevel会设定在/etc/inittab这个文件中,例如:initdefault前面的值;(2)可以从bootloader传一个参数给kernel(例如:在GRUB的引导菜单按“a”键,在开机前可以给kernel传一个参数以单用户模式登录系统)(3)在开机进入Linux系统后,可以使用init指令,再输入要进入哪个runlevel;(例如:init5进入runlevel5)3、使用runlevel指令执行后,就可以在下面显示当前在哪个级别下;/sbin/runlevel九、介绍/etc/rc.d/rc.sysinit这个程序主要做哪些工作(init初始化流程第二步)rc.sysinit这个文件是一个脚本文件,主要是一些判断程序,还有一些设