刚入门的小伙伴们是不是还在迷惑到底系统从我们按下电源键的那一刻,是如何进行一步一步运行的,知道我们输入用户名和密码进入系统,来操作电脑,今天我们就来写一下开机的启动过程以及相关服务的控制。
一. 系统引导流程:
1 . 开机加电,BIOS对硬件加电自检
加电自检,检测硬件设备,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等
2 . 检查启动顺序,从硬盘引导,读取MBR(446字节)
硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,主引导程序的任务就是查找并且加载处在硬盘分区上的次引导程序。通过分区表查找活动分区,并将处在活动分区的次引导加载程序读取到内存里面运行。
3 . 读取GRUB的引导
次引导加载程序得主要的功能就是加载linux内核,次引导程序(boot loader)会引导操作系统。当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节(主引导记录,即master boot record,MBR)。在单一的MBR中只能存储一个操作系统的引导记录,所以当需要多个操作系统时就会出现问题,因此需要更灵活的引导加载程序
次引导加载程序就会在内存运行起来。系统读取内存中的grub配置信息(一般为menu.lst或grub.lst)就会出现GRUB图形界面,让用户选择加载什么样的内核并依照此配置信息来启动不同的操作系统。
如何查看你MBR的内容,那么你可以使用以下命令来查看:
[root@localhost ~]# dd if=/dev/sda of=mbr.bin bs=512 count=1 #此处的/dev/sda为你的硬盘的类型,本次我们使用的为scsi,表示为/dev/sda
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000280189 s, 1.8 MB/s
[root@localhost ~]# od -xa mbr.bin #此处必须root身份运行的dd命令,读取你的第一个集成电子驱动器或者IDE驱动器的前512字节,并将他们写入
mbr.bim文件.od命令则是以十六进制和ASCII码形式打印出这个二进制文件
4 . 加载内核文件 (/boot目录下)
用户选择要加载的内核之后,次引导加载程序(GRUB)就会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核。
5 . 运行init进程,永远是第一个进程
- A.读取/etc/inittab配置文件
内核被加载后,第一个运行的程序便是/sbin/init(变成一个用户进程),该程序会读取/etc/inittab配置文件,init根据/etc/inittab配置文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等.其实/etc/inittab文件最主要的作用就是设定Linux的运行等级。
【Linux下运行级别设定:】
0 - halt (Do NOT set initdefault to this) #关机
1 - Single user mode #单用户模式
2 - Multiuser, without NFS (The same as 3, if you do not have networking) #字符界面,多用户,无网络模式
3 - Full multiuser mode #字符界面,多用户模式
4 - unused #保留,暂时没有被使用
5 - X11 #图形界面,多用户模式
6 - reboot (Do NOT set initdefault to this) #重新启动
设定形式是“:id:3:initdefault:”,表明Linux运行在等级3上
- B.做系统初始化/etc/rc.d/rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。
- C.控制启动哪些程序和服务/etc/rc.d/rc,依据运行级别决定,按照当前的运行级别,执行相应的运行脚本。
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务
- D. 最后运行一个脚本/etc/rc.d/rc.local(让管理员自定义启动命令)
rc.local配置文件就是在一切初始化工作后,Linux留给用户进行个性化的地方,你可以进行一些开机加载的自定义设置,只限制于当前登录的用的个人设置。
- E.执行/bin/login程序,进入登录状态
到了加载此步骤的时候,那么系统已经运行到提醒用户进行用户名和密码输入登陆系统的过程了,到此为止,那么一系列的从你把主机的电源打开一直到你输入用户名和密码登陆系统之间全部启动过程。
二. 服务的控制和优化:
- 服务的分类:
类别 | 特点 |
独立运行的服务 | 响应快,但是占系统资源多 |
依赖xinetd服务运行的服务 | 响应慢些,但是占资源少 |
- 系统服务控制
1 . 常用方式:
- service 服务名称 控制类型
- /etc/rc.d/init.d服务名称 控制类型
[root@localhost ~]# /etc/init.d/vsftpd status
vsftpd is stopped
[root@localhost ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
2 . 控制类型
- start:启动
- stop:停止
- restart:重新启动
- reload:重新加载
- status:查看服务状态
- Linux系统的运行级别
1 . 查看运行级别
[root@localhost ~]# runlevel
5 3
使用runlevel命令,分别显示:
5:切换前的运行级别、3:当前运行级别
2 . 临时切换运行级别
[root@localhost ~]# init 5
[root@localhost ~]# runlevel
3 5
使用init命令结合0-6运行级别参数
- 优化启动过程
1 . 系统服务管理工具
a) ntsysv工具
特点:
提供一个交互式、可视化窗口
可以在字符终端运行
便于集中管理多个服务
用法:
ntsysv --level 级别列表
[root@localhost ~]# ntsysv --level 3 #此处表示以级别3设置所有服务
- b) chkconfig工具
特点:
不提供交互式、可视化窗口
管理单个服务效率更高
用法:
查看系统服务的启动状态
格式:chkconfig --list 服务名称
[root@localhost ~]# chkconfig --list vsftpd #查看vsftpd服务开机是否启动
vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off #此处的6个状态就是linux的运行状态 【off表示不启动 on表示启动】
----------
设置系统服务的启动状态
格式:chkconfig --level 级别列表 服务名 on|off
[root@localhost ~]# chkconfig --level 3 vsftpd on
[root@localhost ~]# chkconfig --list vsftpd
vsftpd 0:off 1:off 2:off 3:on 4:off 5:off 6:off
----------
服务脚本位置:/etc/init.d ----》/etc/rc.d/init.d
到此为止,小伙伴是否了解了系统是如何进行启动的以及启动时加载所需的配置文件的顺序,对于系统的启动过程来说是我们入IT这一行的所要必须掌握的。掌握了此启动过程,当系统出毛病的时候,我们才能根据启动顺序来进行分析并解决问题。