Linux启动顺序、运行级别及开机启动
封面图
•
2025-11-22
•
Linux
251
0
0
0
Linux系统的启动过程是一个从硬件到操作系统的逐步初始化过程。以下是**Linux启动顺序、运行级别及开机启动**的详细说明: --- ## 一、Linux启动顺序 ### 1. **BIOS/UEFI 初始化** - 系统加电后,首先执行的是**BIOS(Basic Input/Output System)**或**UEFI(Unified Extensible Firmware Interface)**。 - BIOS/UEFI会进行自检(POST - Power-On Self Test),检查硬件是否正常。 - 根据配置选择启动设备(如硬盘、U盘、光盘等)。 --- ### 2. **引导加载程序(Bootloader)** - 从硬盘中读取**引导扇区**,加载**Bootloader**(如 GRUB、LILO、Syslinux 等)。 - Bootloader 会加载内核(kernel)和初始内存盘(initramfs)。 --- ### 3. **加载 Linux 内核** - 内核开始初始化硬件设备,挂载根文件系统(root filesystem)。 - 内核会执行第一个进程:`/sbin/init`(在较新的系统中可能为 `systemd` 或 `sysvinit`)。 --- ### 4. **初始化进程(Init Process)** - **`init`** 是所有用户空间进程的父进程(PID=1)。 - 根据系统使用的初始化系统(如 `systemd`、`sysvinit`、`upstart`)执行不同的初始化流程。 --- ## 二、运行级别(Runlevels) **运行级别**(Runlevel)是 Linux 中定义系统运行状态的一个数字,用于控制哪些服务可以运行。 | 运行级别 | 描述 | |----------|------| | **0** | 关机(Shut down) | | **1** | 单用户模式(Single-user mode):仅限 root 用户,用于系统维护 | | **2** | 多用户模式(不带网络) | | **3** | 完整多用户模式(带网络):命令行界面 | | **4** | 未定义(通常保留) | | **5** | 图形界面模式(GUI) | | **6** | 重启(Reboot) | > ⚠️ 注意:某些发行版(如 Ubuntu)可能不使用传统的 runlevel 概念,而是通过 systemd 的 target 来管理。 --- ## 三、开机启动流程详解(以 `systemd` 为例) ### 1. **Bootloader 加载内核和 initramfs** - GRUB 读取 `/boot/grub/grub.cfg` 文件,加载内核和 initramfs 到内存。 ### 2. **内核初始化** - 内核解压并加载到内存,执行 `/init`(实际是 initramfs 中的 `/init` 脚本)。 - initramfs 会加载必要的驱动模块,挂载根文件系统。 ### 3. **进入 `systemd`** - `/sbin/init`(即 `systemd`)作为 PID=1 的进程启动。 - systemd 会根据默认目标(default target)启动相应的服务。 --- ## 四、systemd 的目标(Targets) `systemd` 使用 **targets** 替代了传统的 runlevels: | Target | 对应传统 runlevel | 描述 | |--------|-------------------|------| | `poweroff.target` | 0 | 关机 | | `rescue.target` | 1 | 单用户模式 | | `multi-user.target` | 3 | 多用户模式(无图形) | | `graphical.target` | 5 | 图形界面 | | `reboot.target` | 6 | 重启 | --- ## 五、开机启动项管理 ### 1. **Systemd 服务管理** - 启动服务: ```bash sudo systemctl start <service-name> ``` - 设置开机启动: ```bash sudo systemctl enable <service-name> ``` - 查看服务状态: ```bash systemctl status <service-name> ``` - 查看默认目标: ```bash systemctl get-default ``` - 更改默认目标: ```bash sudo systemctl set-default <target> ``` --- ### 2. **SysVinit 服务管理(旧系统)** - 启动服务: ```bash sudo service <service-name> start ``` - 设置开机启动: ```bash sudo update-rc.d <service-name> enable ``` - 查看运行级别: ```bash who -r ``` - 修改运行级别: ```bash sudo init <runlevel> ``` --- ## 六、常见问题排查 ### 1. **无法启动系统** - 检查 `/var/log/boot.log` 或使用 `journalctl -b` 查看日志。 - 检查 `/etc/inittab`(SysVinit)或 `/etc/systemd/system/default.target`(systemd)。 ### 2. **服务未启动** - 使用 `systemctl list-units --type=service` 查看服务状态。 - 检查服务配置文件(如 `/etc/systemd/system/<service>.service`)。 --- ## 七、总结 | 阶段 | 内容 | |------|------| | BIOS/UEFI | 硬件自检,选择启动设备 | | Bootloader | 加载内核和 initramfs | | 内核 | 初始化硬件,挂载根文件系统 | | Init | 执行初始化脚本(systemd/sysvinit) | | Runlevel/Target | 控制系统运行状态和服务启动 | | 开机启动 | 通过 systemd 或 sysvinit 管理服务 | --- 如果你有特定的 Linux 发行版(如 CentOS、Ubuntu、Debian),我可以提供更详细的启动流程说明。需要吗?
上一篇:
Linux中的15个echo 命令实例
下一篇:
Linux查看程序端口占用情况
标题录入,一次不能超过6条
留言
评论