Linux系统启动过程及用户登录过程原理分析(参考自鸟哥的私房菜)

本文详细介绍了Linux系统从BIOS启动到systemd的整个过程,涉及BIOS硬件检测、MBR加载、内核加载、systemd服务启动等多个阶段。在系统启动过程中,bootloader如GRUB负责加载内核,内核初始化硬件并挂载根文件系统,然后systemd接管启动服务,完成多用户目标及图形界面的启动。这一系列复杂步骤确保了Linux系统的正常运行。
摘要由CSDN通过智能技术生成

linux系统启动过程:

大概流程:BIOS->MBR->boot loader->内核->systemd(centos 7)->登陆界面

1、加载BIOS的硬件信息及进行自检,根据设定获取第一个可启动的设备(通常是硬盘)

按下开机电源键,系统先去加载BIOS,并通过BIOS程序去加载CMOS,获取CMOS内设置的值取得主机的各项硬件配置信息,如硬盘、系统时间,CPU与接口设备的沟通频率,设备启动顺序,各周边总线的是否启动PnP(即插即用)等信息,取得这些信息后BIOS会进行开机自检,然后开始执行硬件检测的初始化,并配置PnP设备,之后再定义出设备的启动顺序,接下来就会开始进行启动设备的数据读取了(MBR相关)。

2、读取主引导记录(MBR,Master Boot Record)

读取并执行第一个可开机启动设备内MBR的boot loader。loader的主要功能是识别操作系统的文件格式并将其加载到主存储器中去执行,不同的操作系统的文件格式不一样,所以每种操作系统都有自己的boot loader,每个文件系统都会保留一块启动扇区(boot sector)供操作系统安装boot loader,而通常系统默认都会安装一份loader到它根目录所在的文件系统的启动扇区上。BIOS通过硬件的INT 13中断功能来读取MBR.
在硬盘上第0柱面0磁道1扇区前446字节被称为MBR。系统找到BIOS所指定的硬盘的MBR后,会将其复制到0x7c00地址所在的物理内存中,被复制到物理内存的内容就是boot loader,linux系统就是grub。

3、依据boot loader的设定加载内核(Kernel)

当通过boot loader的管理而开始读取内核文件后,linux会将内核解压到内存中,然后利用内核的功能测试与取得各个周边设备,包括存储设备、cpu、声卡、网卡等。并且内核会以自己的功能重新检测一次硬件,而不一定使用BIOS检测到的硬件信息。到这里内核才开始接管BIOS后的工作,内核文件放在/boot里以vmlinuz开头。
Linux内核是可以通过动态加载内核模块的,内核模块放置在/lib/modules/内,由于模块放在磁盘根目录内,所以在开机过程中内核必须要挂载根目录,才能读取内核模块提供加载驱动程序的功能,在开机过程中根目录是以只读方式来挂载的,因为担心会影响到磁盘内的文件系统。
现在的磁盘大多使用SATA,内核需要加载STAT磁盘驱动程序才能挂载根目录,而SATA的驱动程序在/lib/modules内,这就有点踢皮球的感觉了,于是有了虚拟文件系统(initial RAM Filesystem),一般在/boot/目录下以initramfs开头,这个文件能通过boot loader加载到内存中,解压成一个仿真的根目录,而且这个根目录在内存当中的文件系统能够提供一支可执行的程序,通过该程序加载开机过程中所需要的核心模块,载入完成后,就开始运行systemd了。

4、内核调用systemd程序,以default.target流程开机

Centos7后init程序被systemd取代,systemd是内核加载完、重新检测硬件与驱动程序加载后启动的第一个程序,进程号为1,主要功能是准备软件的执行环境。所有的动作都会通过systemd的默认启动服务集合。
dufault.target是默认目标(systemd使用target而不是runlevels)的链接(graphical是图形化界面):
在这里插入图片描述

当取得了/etc/systemd/system/default.target这个默认目标的设定后,系统会链接到/usr/lib/systemd/system/目录下去取得链接对应的目标,7种目标如图:
在这里插入图片描述

通过查看/usr/lib/systemd/system/graphical.target跟muti-user.target两个文件的内容,可以知道graphical.target必须要完成muti-user.target之后才能运行,因为运行级别是graphical,还要display-manager.service才行,而muti-user.target必须要完成basic.target等。

使用命令“systemctl list-dependencies graphical.target”,列出系统相关服务的启动流程。
在这里插入图片描述1、 systemd启动sysinit.target初始化及basic.target准备操作系统。sysinit.target初始化要启动的服务大概:文件系统挂载、设备管理器的启动、随机数生成器种子设置、设定终端机(console)字形、日志式登陆文件的使用
、加载额外的核心参数设定、开机过程的讯息传递与动画执行、特殊文件系统的启用。
之后是basic.target,主要工作是启动各种可执行文件的目录路径、通信sockets、定时器等。

2、 systemd启动multi-user.target下各种主机服务以及提供服务器功能的网络服务,在/etc/systemd/system/muti-user.target.wants/目录下可以看到预设要被启动的服务。

3、systemd启动multi-user.target下的/etc/rc.d/rc.local文件,这是在一切初始化工作完成后,Linux系统留给用户进自定义的地方,可以把你想设置和启动的东西的绝对路径放到这里。现在强烈建议创建自己的systemd服务或udev规则。

4、systemd启动multi-user.target下的getty.target及登陆服务。

5、systemd启动graphical.target需要的服务。加载用户管理服务与图形界面管理员,让用户以图形界面登入系统。

登陆过程:

1、在登陆界面输入账号密码回车后,系统会先在/etc/passwd文件内查找是否有所输入的账号,有的话会将账号对应的UID跟GID读取出来,而且该账号的家目录跟shell设置也一并读出。
2、接下来核对存放在/etc/shadow文件中的密码,此文件只有root才有权限打开,而/etc/passwd文件所有人都能读取,不安全,所以将密码存放到shadow文件。在shadow文件内查找对应账号跟UID,核对刚刚输入的密码,正确则进入login shell,读入/etc/profile的配置,执行/.bash_profile、/.bashrc、/etc/bashrc。

提示:密码加密方式:$id$盐值$加密方法,根据id决定使用的加密方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值