- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。
在 Linux 系统管理中,单用户模式(Single-User Mode) 是一种特殊的运行状态,通常用于系统维护、故障排除和紧急恢复。与多用户模式(正常运行状态)不同,单用户模式仅允许 root 用户登录,启动最精简的系统服务(甚至完全不启动额外服务),且默认禁用网络功能。这种“隔离”环境为管理员提供了安全的操作空间,可用于修复损坏的文件系统、重置丢失的 root 密码、修改错误的配置文件等关键任务。
单用户模式的核心是最小化系统启动,仅加载维持基本操作所需的组件(如内核、根文件系统驱动),不启动用户会话、网络服务或图形界面。其实现依赖于 Linux 的初始化系统(Init System),而初始化系统的演进(从 SysVinit 到 Systemd)也导致了单用户模式的分类细化。
在传统的 SysVinit 初始化系统(如早期的 CentOS 6、Debian 7)中,系统运行状态通过 运行级别(Runlevel) 定义,共分为 7 个级别(0-6):
Runlevel | 含义 |
0 | 关机(Halt) |
1 | 单用户模式(Single-User Mode) |
2-5 | 多用户模式(具体取决于发行版) |
6 | 重启(Reboot) |
单用户模式对应 Runlevel 1,此时系统仅挂载根文件系统,启动 init 进程和基本 shell(如 /bin/sh),不启动网络、SSH 或其他服务。
现代 Linux 发行版(如 CentOS 7+、Ubuntu 16.04+、Debian 8+)普遍采用 Systemd 作为初始化系统。Systemd 用 目标(Target) 替代了 Runlevel,每个目标对应一组服务的集合。与单用户模式相关的目标有:
Target | 含义 | 对应传统 Runlevel |
rescue.target | 救援模式:挂载所有本地文件系统,启动基本服务(如日志),允许 root 登录 | Runlevel 1 |
emergency.target | 紧急模式:仅挂载根文件系统(只读),不启动任何服务,直接进入 root shell | 比 Runlevel 1 更精简 |
multi-user.target | 多用户模式(无图形界面) | Runlevel 3 |
graphical.target | 图形界面模式 | Runlevel 5》 |
注意:日常运维中,管理员常将 rescue.target 和 emergency.target 统称为“单用户模式”,但两者的“精简程度”不同:rescue.target 更接近传统单用户模式,而 emergency.target 仅在 rescue.target 也无法启动时使用(如根文件系统严重损坏)。
为避免混淆,明确三者的核心区别:
模式 | 启动服务 | 文件系统挂载 | 典型用途 |
单用户模式 | 仅基础服务 | 根文件系统(读写) | 常规维护(如密码重置) |
救援模式(Systemd) | 日志等核心服务 | 所有本地文件系统 | 修复配置错误、服务故障 |
紧急模式(Systemd) | 无任何服务 | 根文件系统(只读) | 根文件系统损坏、驱动故障 |
进入单用户模式的核心是修改内核启动参数,通过引导加载器(如 GRUB2)传递参数给内核,强制系统启动到指定模式。以下是主流场景的详细步骤。
GRUB2 是绝大多数 Linux 发行版的默认引导加载器(如 Ubuntu、CentOS、Debian)。通过 GRUB 菜单修改内核参数是进入单用户模式的标准方式:
· 重启系统,在开机过程中快速按下 Esc 或 Shift 键(不同主板可能不同),直到出现 GRUB 菜单。
· 若系统默认隐藏 GRUB 菜单(如 Ubuntu),可在启动时按住 Shift 键强制显示。
· 在 GRUB 菜单中,使用方向键选择要启动的内核(通常是第一个选项),按 e 进入编辑模式。
· 找到以 linux 或 linux16 开头的行(内核参数行),末尾通常包含 ro quiet splash 等参数。
根据初始化系统(SysVinit 或 Systemd)添加不同参数:
初始化系统 | 目标模式 | 需添加的参数 | 示例(修改后内核行) |
SysVinit | 单用户模式 | single 或 1 | linux /vmlinuz-xxx ro single |
Systemd | 救援模式 | systemd.unit=rescue.target | linux /vmlinuz-xxx ro systemd.unit=rescue.target |
Systemd | 紧急模式 | systemd.unit=emergency.target | linux /vmlinuz-xxx ro systemd.unit=emergency.target |
通用(强制 shell) | 直接进入 bash | init=/bin/bash 或 init=/bin/sh | linux /vmlinuz-xxx ro init=/bin/bash |
· 以redhat为例:

· 以centos7为例:

· 编辑完成后,按 Ctrl + X 或 F10 启动系统,内核将按修改后的参数引导至单用户模式。
· 若系统使用 LUKS 加密分区,需先在提示时输入密码解锁根分区,再进入单用户模式。
对于传统 SysVinit 系统(如 CentOS 6),除了通过 GRUB 编辑,还可在启动后通过 init 命令切换:
# 直接切换到单用户模式(需 root 权限)init 1
但此方法仅适用于系统已正常启动的场景,若系统无法启动,仍需通过 GRUB 修改参数。
Systemd 系统可通过 systemctl 命令切换至救援模式(需系统已启动):
# 切换到救援模式(会提示输入 root 密码)systemctl rescue
若系统无法启动,仍需通过 GRUB 修改内核参数为 systemd.unit=rescue.target。
若根分区使用 LUKS 加密,进入单用户模式的步骤会增加“解锁分区”环节:
1. 按 2.1 节步骤修改 GRUB 参数后启动,系统会先提示 Please unlock disk luks-xxx:。
2. 输入 LUKS 加密密码,解锁根分区。
3. 之后系统会继续启动至单用户模式(救援模式或紧急模式)。
当 root 密码丢失或遗忘时,单用户模式是最安全的重置方式:
按 2.1 节步骤进入 rescue.target(Systemd)或传统单用户模式(SysVinit)。
部分系统(如 Systemd 紧急模式)会将根文件系统挂载为只读(ro),需先 remount 为读写(rw):
# 查看挂载状态(确认根分区是否为 ro)
mount | grep /
# 若为 ro,重新挂载为 rw
mount -o remount,rw /
使用 passwd 命令直接修改 root 密码:
passwd root
# 按提示输入新密码(无回显,输入两次确认)
# 创建.autorelabel文件(如果使用SELinux)
touch /.autorelabel
reboot
若系统因文件系统损坏(如意外断电)无法启动,会提示 filesystem check failed 或自动进入维护模式。此时可在单用户模式下手动运行 fsck(文件系统检查工具):
按 2.1 节步骤进入 emergency.target(文件系统损坏时,救援模式可能也无法启动,需用紧急模式)。
fsck 需对未挂载的分区执行(或强制检查已挂载分区,但不推荐):
# 卸载根分区(若挂载为 ro,可直接执行 fsck)umount /dev/sda1 # 假设根分区为 /dev/sda1
# 检查并修复 /dev/sda1(ext4 文件系统)fsck -y /dev/sda1# 参数说明:-y 自动回答 "yes" 修复所有错误(谨慎使用,极端情况可能导致数据丢失)
reboot
若某服务(如 nginx、docker)因配置错误导致系统启动卡住,可在单用户模式下禁用该服务:
按 2.1 节步骤进入 rescue.target(需加载服务管理工具)。
# Systemd 系统
systemctl disable nginx
# 永久禁用 nginx 服务
systemctl mask nginx
# 彻底屏蔽服务(防止被其他服务依赖启动)
# SysVinit 系统(如 CentOS 6)
chkconfig nginx off # 禁用服务
reboot
/etc/fstab 是文件系统挂载配置文件,若其中存在错误(如 UUID 错误、挂载点不存在),系统会启动失败并进入紧急模式。此时可在单用户模式下直接编辑该文件:
按 2.1 节步骤进入 rescue.target(需挂载根文件系统为读写)。
# 用 vi 或 nano 编辑(单用户模式可能仅支持 vi)vi /etc/fstab # 注释或修正错误行(如错误的 UUID 或挂载参数)# 示例:将错误行前加 # 注释# UUID=xxx /mnt/data ext4 defaults 0 0
reboot
8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,8455线路检测中心期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP