百度
360搜索
搜狗搜索

linux进入命令行的启动流程详细介绍

Linux 进入命令行的启动流程涉及硬件自检、引导加载程序、内核初始化、系统服务启动等多个阶段,以下是详细步骤:

1. 硬件自检(POST,Power-On Self Test)

  • 作用:计算机启动时,固件(BIOS/UEFI)首先进行硬件检测,包括 CPU、内存、硬盘、显卡等,确保硬件正常。
  • 关键动作
    • BIOS(传统固件):基于 MBR(主引导记录),启动顺序可在 BIOS 设置中配置(如优先从硬盘、U 盘启动)。
    • UEFI(新型固件):替代 BIOS,支持更大硬盘、安全启动(Secure Boot),启动顺序存储在 NVRAM 中,依赖 EFI 系统分区(ESP)。

2. 引导加载程序(Boot Loader)

  • 作用:加载并启动操作系统内核。
  • 常见引导程序
    • GRUB(Grand Unified Bootloader):主流 Linux 引导程序,支持多系统启动、内核参数配置。
    • systemd-boot:轻量级引导程序,与 systemd 集成(部分发行版使用)。

  • 关键步骤
    1. 固件读取引导程序(如 GRUB 位于硬盘 MBR 或 ESP 分区)。
    2. GRUB 显示启动菜单(可选不同内核版本或系统),用户若不干预,默认启动倒计时后加载内核。
    3. GRUB 将内核(vmlinuz)和初始内存磁盘(initramfs/initrd)加载到内存,并传递启动参数(如root=/dev/sda1指定根分区)。

3. 内核初始化(Kernel Initialization)

  • 作用:内核解压缩、初始化硬件驱动、挂载临时根文件系统。
  • 关键动作
    1. 内核(vmlinuz)运行,初始化 CPU、内存、中断控制器等底层硬件。
    2. 加载驱动模块(通过initramfs/initrd,包含临时文件系统和必要驱动,如存储控制器驱动)。
    3. 利用initramfs中的脚本(如init)尝试挂载真正的根文件系统(/dev/sda1等),完成后释放initramfs
    4. 内核启动第一个用户空间进程:init(传统 SysVinit)或 **systemd**(现代主流初始化系统,PID=1)。

4. init 进程启动(systemd 时代)

  • 作用:接管系统初始化,启动服务、配置运行目标。
  • 核心组件(以 systemd 为例)
    1. systemd 初始化
      • 读取配置文件:/etc/systemd/system/default.target(默认目标,如命令行或图形界面)。
      • 命令行对应目标:multi-user.target(等价于传统 Runlevel 3)。
      • 图形界面对应目标:graphical.target(依赖multi-user.target,额外启动桌面环境)。

    2. 生成内核参数
      • 若启动时指定参数(如systemd.unit=multi-user.target),可强制进入命令行。

    3. 启动系统服务
      • 按依赖关系并行启动服务(如网络network.target、文件系统检查fsck、日志服务systemd-journald等)。
      • 关键服务路径:/etc/systemd/system/下的符号链接指向/usr/lib/systemd/system/中的服务定义。

5. 进入命令行环境

  • 目标激活(Target Activation)
    • systemd 激活multi-user.target,触发启动终端服务(getty进程)。
    • getty负责初始化终端(如tty1-tty6),显示登录提示符(如login:)。

  • 终端登录
    1. 用户输入用户名和密码,或通过密钥认证。
    2. 登录成功后,启动 shell(如bash),加载用户配置(~/.bashrc~/.profile等),进入命令行交互界面。

6. 补充:传统 SysVinit 与运行级别(Runlevel)

  • 虽然现代 Linux 多使用 systemd,但部分旧系统或嵌入式系统仍用 SysVinit:
    • 运行级别runlevel 3 为多用户命令行模式(无图形界面)。
    • 启动流程:init读取/etc/inittab,启动getty进程到指定终端。
    • 切换命令行:按 Ctrl+Alt+F1~F6 切换虚拟终端(tty1~tty6),tty7通常为图形界面。

总结流程图

plaintext

开机 → POST自检 → BIOS/UEFI加载引导程序(GRUB)→ 加载内核 & initramfs → 内核初始化 → 启动systemd(PID=1)

↳ systemd读取默认目标(multi-user.target)→ 启动依赖服务 → 启动getty终端 → 显示登录提示 → 用户登录 → 进入命令行

常见问题与操作

  • 强制进入命令行
    • 启动时在 GRUB 菜单按e编辑内核参数,在linux行末尾添加 systemd.unit=multi-user.target3,按F10启动。

  • 查看当前目标systemctl get-default(输出multi-user.target为命令行,graphical.target为图形界面)。
  • 切换目标
    • 临时切换:systemctl isolate multi-user.target(命令行)或 graphical.target(图形界面)。
    • 永久设置:systemctl set-default multi-user.target(默认命令行)。

阅读更多 >>>  为什么不准开机启动软件

通过以上流程,Linux 从硬件启动到用户登录命令行的各个环节被完整串联,核心是引导程序、内核、初始化系统(systemd)和终端服务的协同工作。

网站数据信息

"linux进入命令行的启动流程"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:linux进入命令行的启动流程的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!