共 1 篇文章

标签:Linux启动代码详解:从开机到登录的完整流程 (linux启动代码)

Linux启动代码详解:从开机到登录的完整流程 (linux启动代码)

作为一个开源的操作系统,Linux因其高度的可定制性和优秀的性能表现而备受欢迎。Linux的开机启动过程是其功能的基石。而想要深入了解Linux的开机过程,就需要理解它的启动代码。本文将会详细解析Linux的启动代码,介绍从开机到登录的完整流程。 一、BIOS 当计算机启动时,硬件会首先执行系统上的基本输入/输出系统(BIOS)。BIOS主要任务是初始化硬件并引导操作系统启动。BIOS包括ROM芯片,可以在操作系统及其驱动程序之前运行。 二、引导加载程序 BIOS执行后,会进入引导加载程序(bootloader)。引导加载程序会在硬盘上搜索并加载Linux内核,然后将内核文件从硬盘传送到内存中。 引导加载程序有很多种,大部分情况下是使用GRUB。GRUB(GRand Unified Bootloader)是一种常用的多操作系统引导管理器,支持在多种操作系统间切换。它位于硬盘的Master Boot Record(MBR)中,并维护一个称为GRUB Stage 1.5的小型文件系统。这个文件系统允许它找到并加载内核镜像文件和其他启动信息。 三、内核初始化 正如先前提到的,引导加载程序会将内核文件从硬盘传送到内存中。内核初始化然后开始,需要在系统中创建内核空间(内核数据结构和内核代码)并设置系统中的各种硬件。 内核的初始化包括以下步骤: 1. 内存管理初始化:内存管理初始化会创建内存管理结构,并在系统上保留必要的内存。 2. 进程初始化:初始化进程管理系统。 3. 初始化输入/输出子系统:键盘、鼠标、网络和其他输入/输出设备将被初始化。 4. 文件系统初始化:内核对文件系统进行初始化,此时可以对根文件系统进行挂载。 5. 设备驱动程序初始化:初始化各种硬件设备驱动程序。 6. 网络初始化:初始化网络子系统,包括设置网络接口和访问网络协议栈。 7. 初始化用户模式和用户模式程序:启动getty和login等程序。 四、用户模式初始化 用户模式初始化可以开始几秒钟后,在启动到这一步之前计算机是处于内核模式运行状态,除了Kernel Mode之外任何用户模式程序都没有运行。这时,内核将开启一个进程(init进程),进入用户模式。用户模式会加载Linux发行版的一些程序,并转移到之一条运行级别的配置脚本。 Linux中的6个运行级别: 0 – 关闭系统 1 – 单用户模式 2 – 基于文本的多用户模式 3 – 基于文本的多用户模式,与2不同之处在于支持多个网络服务。 4 – 系统级别没有任何规定。可以自由更改,不影响系统功能。 5 – 基于图形的多用户模式,类似于Windows下的GUI。 典型的系统只用到0-5级运行级别。在不同的运行级别,Linux内核会启动执行不同的用户空间程序,并关闭不需要的服务。 五、登录 用户启动提交用户名和密码后,系统会进行身份验证,如果身份验证成功,用户就会登录到系统。 在Linux启动流程中,BIOS、引导加载程序、内核初始化、用户模式初始化和登录过程都是不可或缺的环节。用户最终将会登录到一个完全初始化且运行良好的系统中,可以在其中尽情地进行其所有需要的操作。 本文详细解析了Linux启动代码的过程,并从技术层面细致地介绍了从开机到登录的完整流程。对于系统调试和管理人员来说,理解这些过程是非常有用和必要的。它们可以使操作系统管理员了解Linux内部故障排除和优化的工作方式,以及如何使其更高效、更灵活。 相关问题拓展阅读: 如何查看和停止Linux启动的服务 linux开机启动脚本 如何查看和停止Linux启动的服务 你好, 1. 查看Linux启动的服务 . 代码如下: chkconfig –list 查询出所有当前运行的服务 chkconfig –list atd 查询atd服务的当前状态 2.停止所有服务或毁胡并且在下次系统启动时不再启动,如下余蔽所示: . 代码如下: chkconfig –levelsNetworkManager off 如果想查看当前处于运行状态的服务,用如下衫拦语句过滤即可 . 代码如下: chkconfig –list |grep on 3.如果只是想当前的设置状态有效,在系统重启动后即不生效的话,可以用如下命令停止服务 . 代码如下: service sshd stop linux开机启动脚本 需要自己写一个脚本 脚本内容是 一个死循环,里面包含查询进程的命令ps,让后grep出你的进程 如果发现你的进程就认为启动成功,没发现就一直等待。 脚本例子,监控mysql s_port=`netstat -na|grep “LISTEN”|grep “3306”|awk -F+ ‘{print $5}’` if ; then echo ” mysql is running “ echo $s_logfie else echo ” mysql is...

技术分享