Linux系统启动过程
BIOS --> MBR --> GURB --> Kernel --> Init --> Runlevel
- BIOS(Basic Input/Output System):基本输入输出系统
- MBR(Master Boot Record):主引导记录
- GRUB(Grand Unified Bootloader):多系统启动程序
- Kernel:内核
- Init:初始进程
- Runlevel:运行级别
BIOS
BIOS主要是进行开机自检,检查一些硬件,比如运算器、存储器等,再去找MBR信息。
MBR
主引导记录(MBR),是计算机开机以后访问硬盘时所必须要读取的第一个扇区,大小为512字节,包含最多446字节的启动代码、4个硬盘分区表项(每个表项16字节,共64字节)、2个签名字节(0x55,0xAA)。
GRUB
GRUB是多操作系统启动程序,用于引导不同的系统。grub的配置文件为/etc/default/grub
加载内核
当电脑通电之后,首先是BIOS开机自检,检查计算机的硬件,操作系统接管硬件之后,首先读入 /boot 目录下的内核文件。
启动init
init进程是Linux系统中所有进程的起点。init进程会读取配置文件来确定系统的运行级别。
运行级别
许多程序需要开机自动,这些程序需要init进程去开启,但是不同场景需要启动不同的程序,这些场景就是指运行级别,init进程会根据运行级别去启动不同的程序,一共分为7个运行级别:
- 0: 系统停机状态,也就是关闭计算机,系统默认运行级别不能设为0,否则无法正常启动
- 1: 单用户模式,仅root用户,也就是所谓救援模式
- 2: 无网络多用户模式
- 3: 有网络多用户模式
- 4: 保留作自定义,否则同运行级 3
- 5: 一般用于图形界面(GUI)登录(如 X的 xdm 或 KDE的 kdm)
- 6: 重启动计算机,系统默认运行级别不能设置为6,否则无法正常启动
系统一般默认的运行级别是5
可以使用 runlevel
命令查看当前的运行级别
runlevel
N 5
init 命令可以用于切换当前系统的运行级别
init 0 // 关机
init 1 // 进入单用户模式
init 3 // 切换当多用户级别
init 5 // 切换到图形界面级别
init 6 // 重启
系统初始化
系统初始化这一步主要是执行一些脚本。会根据运行级别去选择 /etc/rc[0,1,2,3,4,5,6].d其中一个目录,并执行选择的目录中的脚本。
用户登录
用户登录分为三种方式:
- 命令行登录
- ssh登录
- 图形界面登录
图形模式与文字模式的切换方式
Linux预设提供了六个命令窗口终端机让我们来登录。
这个六个窗口分别为tty1、tty2、tty3、tty4、tty5、tty6、tty7。默认登录的是第一个窗口,也就是tty1,tty1是图形界面。其他都是命令行登录。按下Ctrl + Alt + F1 ~ F6 可以在这六个窗口之间切换。
/etc/rc[n].d中的脚本介绍
一共分为7个目录,每一个目录分别对应着一个运行级别,在系统开机或关机时会自动执行对应级别的脚本。分别有: rc0.d、rc1.d、rc2.d、rc3.d、rc4.d、rc5.d、rc6.d、rcS.d
查看/etc/rc5.d
中的内容,里面都是一些软链接,所有的软链接都是指向 /etc/init.d
中的脚本文件,命令规范如下:
[K|S][number][name] --> ../init.d/name
- S 表示系统启动时需要执行的脚本
- K 表示系统关闭时需要执行的脚本
- [number] 表示脚本的运行优先级,number越小,优先级越高
- [name] 脚本名称,一般以服务的名称命名
如果想让自己写的脚本开机就自动执行,可以把脚本按规范放到那7目录中。
一些自启脚本说明
脚本 | 说明 |
---|---|
/etc/profile | 此文件为系统的每个用户设置环境信息,当用户第一次登录时 |
/etc/bash.bashrc | 为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。 |
~/.bash_profile | 用户专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的 .bashrc文件。 |
~/.bashrc | 该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该文件被读取。 |
~/.profile | 在 Debian 中使用 .profile 文件代替 .bash_profile 文件 .profile(由Bourne Shell和Korn Shell使用)和 .login(由C Shell使用)两个文件是 .bash_profile 的同义词,目的是为了兼容其它 Shell。 |
~/.bash_logout | 当每次退出系统(退出bash shell)时,执行该文件。 |