news 2026/9/24 11:14:21

Linux 启动流程与 systemd 运行目标实战手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 启动流程与 systemd 运行目标实战手册

从按下电源键到出现登录提示符,要经过固件自检、GRUB2 引导、内核与 initramfs、systemd 拉起 target 一串环节,任何一环断了系统就起不来。
本文把启动过程拆成九步,讲清 systemd target 与传统运行级别的对应、运行目标的查看与切换,最后给出 root 密码重置的四种方法。
文中命令名均标注英文全称,完整清单见文末《附:命令英文全称速查表》。

本文概要:

项目内容
文章主题从按下电源键到出现登录提示符的九步启动过程、systemd target 与传统运行级别的对应关系、运行目标的查看与切换,以及忘记 root 密码时的四种重置方法
所属类别Linux 系统管理 → 启动与引导 → systemd 运行目标
知识关键字POST · UEFI / BIOS · MBR · GRUB2 ·vmlinuz·initramfs· systemd · target · 运行级别 ·rd.break·init=/bin/bash·single/rescue.target

一、CentOS 7 启动过程

步骤发生了什么配置方式
1固件(现代 UEFI 或更旧的 BIOS)运行 POST 自检,初始化硬件开机按 F2 等组合键进固件配置
2固件按启动顺序搜索设备,读启动盘上的 MBR,控制权交给 GRUB2grub2-install
3GRUB2 读/boot/grub2/grub.cfg,显示启动菜单/etc/default/grubgrub2-mkconfig
4按选中条目把 kernel 与 initramfs 载入内存,内核用 initramfs 里的驱动初始化硬件dracutlsinitrd
5initramfs 执行/sbin/init作为 PID 1,在 CentOS 中它指向 systemd内核参数init=
6systemd 加载内核命令行指定的 target,或系统配置的default.targetsystemctl set-default
7sysinit.target完成初始化:按/etc/fstab挂载文件系统、激活systemd-journald/etc/fstab
8default.target激活设为开机启动的单元systemctl enable
9getty.target打开 tty1 终端,等待登录systemctl enable

二、systemd target

target 是给其他单元分组的单元:multi-user.target包含chronyd.servicecrond.service等服务。target 之间也可互相包含,链路由外到内是graphical.targetmulti-user.targetbasic.targetsysinit.target

2.1 systemctl list-dependencies 用法速查表

参数含义英文原意
systemctl查询与控制系统服务管理器system control
list-dependencies列出指定单元的依赖关系list dependencies
graphical.target目标单元(位置参数),也可写服务名target
--reverse反向依赖,即谁依赖它reverse
--all递归展开全部依赖,不截断all
--plain纯文本列表输出,不画树形线plain,便于脚本处理

2.2 最简演示

# 正向依赖:graphical.target 拉起了哪些单元[root@zhb-m1 ~]# systemctl list-dependencies graphical.targetgraphical.target ● ├─gdm.service ● └─multi-user.target......# 反向依赖:sshd.service 被哪些 target 拉起[root@zhb-m1 ~]# systemctl list-dependencies sshd.service --reversesshd.service ● └─multi-user.target ● └─graphical.target

三、运行级别与运行目标

SysVinit 定义了 7 个运行级别(0-6),systemd 用 target 承接:

级别target作用
0关机,等同shutdown -h now
1rescue.targetemergency.target单用户模式:仅 root 登录,无网络服务,用于系统修复
2多用户无 NFS,Debian 等发行版默认与级别 3 相同
3multi-user.target完全多用户(文本界面),启动全部网络服务
4预留级别,默认未使用
5graphical.target图形化多用户:在级别 3 之上启动图形界面
6重启,等同shutdown -r now

CentOS 6 用/etc/inittab里的id:5:initdefault:设默认级别;CentOS 7 起该文件失效,改由default.target决定。

四、设置运行目标

4.1 systemctl isolate / get-default / set-default 用法速查表

参数含义英文原意
systemctl isolate立即切换到指定 target,停用新 target 不需要的单元isolate(隔离)
systemctl get-default查看开机默认 targetget default
systemctl set-default设置开机默认 target,本质是改default.target软链接set default
multi-user.target文本多用户目标(位置参数)对应运行级别 3
graphical.target图形化目标(位置参数)对应运行级别 5
rescue.target救援目标(位置参数)对应运行级别 1

4.2 切换与设置默认目标

[root@zhb-m1 ~]# systemctl isolate multi-user.target # 立即切到文本目标[root@zhb-m1 ~]# systemctl isolate graphical.target # 立即切到图形目标[root@zhb-m1 ~]# systemctl get-defaultgraphical.target[root@zhb-m1 ~]# systemctl set-default multi-user.target # 改开机默认目标,重启后生效

4.3 临时用其它目标启动

在某次启动时把systemd.unit=<target>.target追加到内核命令行,只对本次启动生效,常用于排查启动故障。

  1. 按任意键中断启动菜单倒计时(Enter 除外,它用于正常启动)。

  2. 光标移到第一个内核条目,按e编辑。

  3. linux16行末尾追加systemd.unit=multi-user.target,按Ctrl+x启动。

五、重置 ROOT 密码

密码丢失时的做法分两类:用 Live CD 挂载根文件系统改/etc/shadow;或者让启动停在 initramfs 阶段,先拿到 root shell 再改。

下面四个方法按是否需要原 root 密码分两组:5.1、5.2 不需要,用于密码已丢失;5.3、5.4 需要,用于已知密码时的维护。

5.1 方法 1:rd.break

追加rd.break(操作同 4.3),启动停在 initramfs 移交控制权之前,真实根以只读挂在/sysroot

switch_root:/# mount -o remount,rw /sysroot # 重新读写挂载switch_root:/# chroot /sysroot # 切换到真实根sh-4.2# echo 123 | passwd --stdin root # 设新密码,123 换成自己的sh-4.2# touch /.autorelabel # 开启 SELinux 时必须执行sh-4.2# exit # 退出两次,继续启动switch_root:/# exit

开启 SELinux 时,退出后会先完成全盘重新标记,再自动重启一次。

5.2 方法 2:init=/bin/bash

追加init=/bin/bash,启动在移交控制权前中断,直接给出 root shell,真实根以只读挂在/

bash-4.2# mount -o remount,rw /sh-4.2# passwd -d root # 清空密码,进系统后重设sh-4.2# touch /.autorelabel # 开启 SELinux 时必须执行sh-4.2# exec /usr/lib/systemd/systemd # 继续启动

passwd -d也可换成vi /etc/shadow,用已知用户的密码串替换 root 的密码字段。

⚠️注意:开启 SELinux 时改完密码必须touch /.autorelabel。initramfs 里改出的/etc/shadow没有正确的 SELinux 标签,不重新标记会被拒绝登录——这一步漏掉是重置密码失败最常见的原因。

5.3 方法 3:single

linux16行末尾追加rw single

参数含义英文原意
rw根以读写挂载,省掉进系统后再 remountread-write
single单用户模式,等价写法还有s1single-user mode

启动后提示输入 root 密码,通过后直接得到读写挂载的 root shell:

sh-4.2# passwd root # 改密码sh-4.2# exec /usr/lib/systemd/systemd # 继续启动

⚠️注意:systemd 系统里singles1都只是rescue.target的别名,依旧会要求输入 root 密码。所以密码已忘记时只有 5.1、5.2 可用——「单用户模式免密码」是 SysV init 时代的说法。

5.4 方法 4:rescue.target

linux16行末尾追加systemd.unit=rescue.target

参数含义英文原意
systemd.unit=覆盖本次启动的默认目标,仅对本次生效systemd unit
rescue.target救援目标:挂载文件系统、拉起基本服务,给出 root shellrescue target
emergency.target紧急目标:根只读挂载,不挂其余文件系统、不启服务emergency target

启动停在救援模式并要求 root 密码,进入后可改密码、修/etc/fstab、卸载冲突挂载,完成后systemctl reboot或继续进入默认目标。

5.5 四种方法对比

方法内核参数需原密码根文件系统状态适用场景
rd.breakrd.break只读挂/sysroot,需 remount,rw + chroot忘记密码(首选)
init=/bin/bashinit=/bin/bash只读挂/,需 remount,rw忘记密码(备选)
singlerw single读写挂/已知密码时的维护
rescue.targetsystemd.unit=rescue.target读写挂/,基本服务已起已知密码时的修复
emergency.targetsystemd.unit=emergency.target只读挂/文件系统损坏、fstab 错误

rescue 与 emergency 的差别:前者按/etc/fstab挂载全部文件系统、拉起基本服务、根已读写;后者根只读、其余不挂载、几乎不启服务。

📚 参考资料(官方文档 · 中英双语)

  • systemd.target(5) 目标单元手册
  • systemctl(1) 服务管理命令手册
  • systemd.special(7) 特殊目标单元手册
  • bootup(7) 系统启动流程手册
  • passwd(1) 密码修改命令手册

附:命令英文全称速查表

命令 / 缩写英文全称 / 原意作用
systemctlsystemcontrol管理系统与服务,查看 / 切换运行目标
systemdsystem daemon系统与服务管理器,PID 1
targettarget(目标)单元分组,承接传统运行级别
rd.breakramdisk break内核参数,让启动停在 initramfs 阶段
SELinuxSecurity-EnhancedLinux强制访问控制机制,改密码后需重新标记
gettygettty打开终端并等待用户登录
PIDProcessID进程号
POSTPower-OnSelf-Test开机自检
UEFI/BIOSUnifiedExtensibleFirmwareInterface /BasicInputOutputSystem现代 / 传统系统固件
initramfsinitialRAMfilesystem临时内存文件系统,存放启动所需驱动与脚本
vmlinuzvirtualmemory LINUz压缩后的 Linux 内核镜像
GRUBGRandUnifiedBootloader启动加载器
MBRMasterBootRecord主引导记录

总结:启动链路是"固件自检 → MBR → GRUB2 → kernel + initramfs → systemd → default.target → sysinit.target → 开机服务 → getty"。
运行目标用systemctl get-default/set-default管理。
密码丢失则用rd.breakinit=/bin/bash在 initramfs 阶段拿一个 root shell。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 11:13:44

工控网络安全学习路线:从PLC协议解析到国产设备安全加固

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 11:11:27

从一条 SARIF 告警开始:OpenCodeReview × Jenkins 审查闭环实战

上一篇我们讨论了 OpenCodeReview 在 GitHub Actions 中的最短接入路径——一行 uses 即可启动 AI 审查。但对于大量运行 Jenkins 的团队来说&#xff0c;真正的战场在 Jenkinsfile 里。这篇文章从零开始&#xff0c;在 Jenkins 上搭建一条完整的 AI 审查闭环&#xff1a;从安装…

作者头像 李华
网站建设 2026/9/24 11:08:12

基于LM2596的±12V双路电源设计:拓扑、计算与PCB布局实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 11:06:22

昇腾硬件跑通DeepSeek V3-R1:从选型部署到避坑全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 11:01:33

RK3588嵌入式AI工作站全栈实战:从硬件供电到YOLOv8部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 10:56:17

LLM作为SQL协作者:AI+BI落地的20个可复用业务场景

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华