第十单元 系统的初始化和服务
1. Linux系统引导的顺序
最初始阶段
当我们打开计算机电源,计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序。这一程序通常知道一些直接连接在主板上的硬件(硬盘,网络接口,键盘,串口,并口)。现在大部分的BIOS允许你从软盘、光盘或者硬盘中选择一个来启动计算机。
下一步,计算机将从你所选择的存储设备中读取起始的512 bytes(比如光盘一开是的512 bytes,如果我们从光盘启动的话)。这512 bytes叫做主引导记录MBR (master boot record)。MBR会告诉电脑从该设备的某一个分区(partition)来装载引导加载程序(boot loader)。Boot loader储存有操作系统(OS)的相关信息,比如操作系统名称,操作系统内核 (kernel)所在位置等。常用的boot loader有GRUB和LILO。
随后,boot loader会帮助我们加载kernel。kernel实际上是一个用来操作计算机的程序,它是计算机操作系统的内核,主要的任务是管理计算机的硬件资源,充当软件和硬件的接口。操作系统上的任何操作都要通过kernel传达给硬件。Windows和Linux各自有自己kernel。狭义的操作系统就是指kernel,广义的操作系统包括kernel以及kernel之上的各种应用。
(Linus Torvalds与其说是Linux之父,不如说是Linux kernel之父。他依然负责Linux kernel的开发和维护。至于Ubuntu, Red Hat, 它们都是基于相同的kernel之上,囊括了不同的应用和界面构成的一个更加完整的操作系统版本。)
实际上,我们可以在多个分区安装boot loader,每个boot loader对应不同的操作系统,在读取MBR的时候选择我们想要启动的boot loader。这就是多操作系统的原理。
小结:BIOS -> MBR -> boot loader -> kernel
kernel
如果我们加载的是Linux kernel,Linux kernel开始工作。kernel会首先预留自己运行所需的内存空间,然后通过驱动程序(driver)检测计算机硬件。这样,操作系统就可以知道自己有哪些硬件可用。随后,kernel会启动一个init进程。它是Linux系统中的1号进程(Linux系统没有0号进程)。到此,kernel就完成了在计算机启动阶段的工作,交接给init来管理。
小结: kernel -> init process
init process
(根据boot loader的选项,Linux此时可以进入单用户模式(single user mode)。在此模式下,初始脚本还没有开始执行,我们可以检测并修复计算机可能存在的错误)
随后,init会运行一系列的初始脚本(startup scripts),这些脚本是Linux中常见的shell scripts。这些脚本执行如下功能:
设置计算机名称,时区,检测文件系统,挂载硬盘,清空临时文件,设置网络……
当这些初始脚本,操作系统已经完全准备好了,只是,还没有人可以登录!!!init会给出登录(login)对话框,或者是图形化的登录界面。输入用户名(比如说vamei)和密码,DONE!
在此后的过程中,你将以用户(user)vamei的身份操作电脑。此外,根据你创建用户时的设定,Linux还会将你归到某个组(group)中,比如可以是stupid组,或者是vamei组。
所以你将是用户vamei, 同时是vamei组的组员。(注意,组vamei和用户vamei只是重名而已,就好想你可以叫Dell, 同时还是Dell公司的老板一样。你完全也可以是用户vamei,同时为stupid组的组员)
总结
BIOS -> MBR -> boot loader-> kernel -> init process -> login用户,组
boot loader把系统引导出来(装载内核)。操作系统有7个启动级别
init:
0:关机
1:单用户,就是以root身份进入,加载一部分内容。eg:登录windows系统的用户密码忘记了,单用户可以不用登录密码登录
2:多用户
3:表示命令行界面,如果没有网络功能的话2模式跟3一样
4:没有使用的级别,留给测试人员使用
5:图形界面级别
6:重启
runlevel显示上一次登录级别和下一次登录的级别是什么。功能增多负担也会增多。
linux操作系统是一个模块化设计:1、模块指特定的功能,这个特定的功能必须依赖于操作系统才能实现。2、用的时候可以加载不用的时候可以卸载
其中,BIOS的工作是检查计算机的硬件设备,如CPU、内存和风扇速度等;
MBR会在启动盘的第1个块中,大小为512B。其中前446中的程序代码是用来选择boot partition(分区),也就是由哪个分区来装入开机用的代码,紧接着64为分区信息,最后2为标志位。446+64+2=512.
在内核部分主要是装机计算机设备的驱动程序以便操作系统可以控制计算机上的设备。并且以只读的方式挂载/(根)文件系统,也就是此时的操作系统只能读到根文件系统(目录)所在的分区;
init程序的进程id为1,即Linux操作系统第1个执行的程序。
1. BOIS的初始化和引导加载程序
1) 掌握BIOS的定义:BIOS(Basic Input/Output System)(基本输入/输出系统的缩写),它是硬件与软件之间的接口,而且是非常基本的接口。
2. GRUB程序和grub.conf文件
1) 掌握GRUB的定义:GRUB是Grand Unified Bootloader(多重操作系统启动管理器)的缩写。
2) 掌握grub的配置文件为:grub.conf
设置grub Md5加密命令 grub-MD5-crypt
Password = 明文或 password --md5 密文(编辑grub配置文件的密码)
Title red hat 标题
Password = 明文或 password --md5 密文(加载内核系统引导必须的密码)
3. 内核的初始化和init的初始化
1) 掌握init的配置文件为:/etc/inittab
2) 了解init程序要做的工作:
a) 决定预设(默认)要使用哪个run levels(运行级别)。
b) 执行一些系统初始化的脚本(程序)来初始化操作系统。
c) 根据run level的设置来执行所对应目录中的程序,以决定要启动哪些服务。
d) 设定某些组合键。
e) 定义UPS不间断电源系统,即当电源出现问题时或电源恢复时要执行哪些程序。
f) 产生6个virtual consoles,也就是tty1~tty6。
4. run levels(运行级别)
1) 掌握所有的运行级别及每一个运行级别对应的功能:
5. 关闭系统及重启系统
1) 掌握常用的可以关闭系统的命令:
shutdown -h now
halt
poweroff
init 0
2) 掌握常用的可以重启系统的命令:
shutdown -r now
reboot
init 6
Ctrl+Alt+Delete键
6. 掌握单用户模式修改用户的密码
7. 掌握救援模式
下面说一下,没有完全的安全:系统设了密码,可以进入GRUB进行修改,GRUB设了密码可以进入BIOS进行修改,BIOS设了密码。重点来了,主板上的电池拿下来,放一会儿电,主板BIOS就会回复默认。