菜鸟科技网

Linux启动到命令行,关键步骤是哪些?

Linux系统从开机到命令行界面的启动过程是一个涉及多个阶段和组件的复杂流程,理解这一过程有助于排查系统启动问题、优化启动性能或进行系统定制,整个过程大致可分为硬件初始化、引导加载、内核启动、初始化系统以及用户登录这几个主要阶段,每个阶段都有特定的任务和参与的组件。

Linux启动到命令行,关键步骤是哪些?-图1
(图片来源网络,侵删)

当计算机电源接通后,BIOS(基本输入输出系统)或UEFI(统一可扩展固件接口)会首先执行,这是固化在主板上的固件,负责进行硬件自检(POST),检查CPU、内存、硬盘、键盘等关键外设是否正常工作,如果硬件检测通过,BIOS/UEFI会根据预设的启动顺序(如硬盘、U盘、网络等)查找可引导的设备,在传统BIOS系统中,它会查找硬盘的主引导记录(MBR);而在UEFI系统中,则会查找GPT分区表中的EFI系统分区(ESP)中的引导加载程序,这一阶段是硬件与软件交互的起点,确保后续的软件加载有可靠的硬件基础。

接下来是引导加载程序阶段,引导加载程序是负责加载操作系统内核到内存并执行它的第一个软件,在Linux系统中,最常用的引导加载程序是GRand Unified Bootloader(GRUB),当BIOS/UEFI找到引导设备后,会加载GRUB的第一阶段(stage1),然后由它加载第二阶段(stage2)和配置文件(grub.cfg),GRUB的配置文件中定义了可启动的操作系统选项、内核参数、初始内存盘(initrd)等信息,用户可以在GRUB菜单中选择启动哪个系统、进入恢复模式或修改内核参数,选定后,GRUB会将内核文件(如vmlinuz)和initrd文件加载到内存中,然后将控制权交给内核。

内核启动是Linux启动过程的核心,当内核被加载到内存后,它会进行初始化操作,包括设置CPU寄存器、初始化内存管理、加载必要的设备驱动程序(如磁盘、网卡等),内核会挂载根文件系统(root filesystem),这个根文件系统可以是initrd中包含的临时文件系统,也可以是硬盘上的实际文件系统,挂载根文件系统后,内核会在其中寻找初始化进程(通常是init或systemd)并执行它,内核启动的最后一步是启动第一个用户空间进程,PID为1,这个进程是所有其他用户空间进程的祖先,负责系统的初始化和服务管理。

然后是初始化系统阶段,现代Linux发行版大多采用systemd作为默认的初始化系统,取代了传统的SysVinit,systemd以并行化的方式启动系统服务,大大提高了启动速度,当内核启动systemd进程(PID为1)后,systemd会读取其配置文件(如default.target)来确定系统的运行级别(如多用户命令行模式或图形模式),在命令行启动模式下,systemd会挂载必要的文件系统(如/proc、/sys、/dev等),激活交换分区,然后启动各种系统服务,如网络服务、日志服务、安全服务(如SELinux)、硬件检测服务等,systemd还会根据依赖关系图来管理服务的启动顺序,确保关键服务(如磁盘挂载、网络连接)优先启动,systemd还会执行开机自启动程序(如/etc/rc.local中的脚本)和用户定义的单元文件(.service、.target等),这一阶段完成后,系统就基本准备就绪,等待用户登录。

Linux启动到命令行,关键步骤是哪些?-图2
(图片来源网络,侵删)

用户登录阶段,当初始化系统完成后,系统会显示登录提示符(在文本模式下是login:,在图形模式下则是登录界面),用户输入用户名和密码后,登录程序(如bash、zsh等shell)会被启动,登录成功后,用户就可以输入命令来操作系统了,从用户输入第一个命令开始,就进入了交互式的命令行界面,用户可以运行程序、管理文件、配置系统等。

在整个启动过程中,每个阶段都可能发生错误,导致启动失败,BIOS/UEFI无法找到引导设备、GRUB配置错误、内核文件损坏、initrd无法加载驱动、systemd服务启动失败等,为了排查问题,可以通过查看启动日志(如dmesg命令显示的内核日志,journalctl命令显示的systemd日志)来定位具体的错误环节。

以下是Linux启动到命令行主要阶段及关键组件的简要总结:

阶段 主要任务 关键组件/文件
硬件初始化 硬件自检(POST),查找引导设备 BIOS/UEFI, MBR/GPT
引导加载 加载内核和initrd,提供启动菜单 GRUB (stage1, stage2, grub.cfg)
内核启动 初始化硬件,挂载根文件系统,启动init进程 Linux内核 (vmlinuz), initrd, init (PID=1)
初始化系统 挂载文件系统,启动系统服务,设置运行级别 systemd, SysVinit, /etc/systemd/system/
用户登录 验证用户身份,启动shell,进入命令行 login, bash, zsh, /etc/passwd

相关问答FAQs:

Linux启动到命令行,关键步骤是哪些?-图3
(图片来源网络,侵删)
  1. 问:如果Linux系统启动时卡在GRUB菜单界面,无法进入系统,可能是什么原因?如何解决? 答:可能的原因包括GRUB配置文件损坏、引导分区文件丢失、硬盘分区表错误等,解决方法:首先尝试进入GRUB编辑模式,选择正确的启动项并修改内核参数(如添加init=/bin/bash以进入紧急shell),或使用GRUB的恢复模式,如果无法修复,可使用Live USB启动盘进入系统,尝试重新安装GRUB(grub-install命令)或修复引导分区,若配置文件损坏,可从备份恢复或重新生成grub.cfg

  2. 问:Linux启动后直接进入命令行,没有图形界面,如何切换到图形界面? 答:这通常是因为系统默认启动目标是命令行模式(如multi-user.target),可通过以下方法切换:使用systemctl set-default graphical.target命令将默认启动目标设置为图形模式,然后重启系统;或临时切换到图形模式,运行startx命令(需安装X Window系统),如果无法启动图形界面,可能是显卡驱动未安装或配置错误,需检查/var/log/Xorg.0.log日志并安装相应驱动。

分享:
扫描分享到社交APP
上一篇
下一篇