CentOS 6 → 7/8/9 全版本对照 · 运行级别 · 救援模式实战
很多同学在生产环境里 service 和 systemctl 混着用,出了问题也不知道哪条命令才是"正确姿势"。本篇从服务的本质讲起,把两套体系放在一起对照,再附上救援模式实操,拿走即用。
Linux 里的"服务"指的是在后台持续运行的进程——系统启动时自动拉起,等待请求、响应请求,全程不需要人坐在终端前盯着。
后厨类比: 把服务想象成餐厅后厨,厨师在厨房持续待命(后台运行),餐厅开门就上岗(开机启动),有单子就出菜(响应请求),不需要顾客进厨房(无需用户交互)。
常见服务分三类:
sshdhttpdnginx | ||
cronrsyslogNetworkManager | ||
mysqldpostgresqldocker |
CentOS 6 及之前用的是 SysVinit,核心命令是 service。
service <服务名> start | |
service <服务名> stop | |
service <服务名> restart | |
service <服务名> reload | |
service <服务名> status |
注意:
reload与restart的区别——reload 只重读配置文件,已有连接不会断;restart 是完整的停止再启动,所有连接都会中断。生产环境优先用 reload。
从 CentOS 7 起,系统全面切换到 systemd,命令换成 systemctl,功能也更完整。
systemctl start <服务名> | |
systemctl stop <服务名> | |
systemctl restart <服务名> | |
systemctl reload <服务名> | |
systemctl status <服务名> | |
systemctl enable <服务名> | |
systemctl disable <服务名> | |
systemctl list-units | |
systemctl list-unit-files |
list-unit-files 里会看到三种状态:
以防火墙为例,几条常用操作:
# 查看防火墙状态systemctl status firewalld.service# 停止 / 启动 / 重启systemctl stop firewalld.servicesystemctl start firewalld.servicesystemctl restart firewalld.service# 控制开机自启systemctl disable firewalld.servicesystemctl enable firewalld.serviceCentOS 6 用数字 0–6 表示运行级别,CentOS 7 改用 target 替代:
poweroff.target | ||
rescue.target | ||
multi-user.target | ||
graphical.target | ||
reboot.target |
关键细节: 在 systemd 中,运行级别 2、3、4 没有实质区别,全部映射到
multi-user.target。服务器生产环境默认跑 multi-user.target(等同于旧版 3 级),无需图形界面。
查看和修改默认运行级别:
# 查看当前默认目标systemctl get-default# → multi-user.target# 切换为图形模式(生产环境不建议)systemctl set-default graphical.target还可以直接看 runlevel 符号链接的对应关系:
ll /usr/lib/systemd/system/runlevel*.target# runlevel0.target → poweroff.target# runlevel1.target → rescue.target# runlevel2.target → multi-user.target# runlevel3.target → multi-user.target# runlevel4.target → multi-user.target# runlevel5.target → graphical.target# runlevel6.target → reboot.target两种思路:用系统内置的单用户模式,或者挂光盘进救援环境。
⚠️ 前置条件: 必须先关闭 SELinux。编辑
/etc/selinux/config,把SELINUX=enforcing改成SELINUX=disabled,否则改完密码可能不生效。
操作步骤:
重启系统,在内核选择界面不要回车,按 e 进入编辑模式。
找到 linux16 这一行,把 ro(只读)改成 rw(读写),按 END 跳到行尾,追加 init=/bin/bash。
按 Ctrl+X 继续启动,系统会跳过正常初始化,直接进入无密码的 root shell。
此时有两种方式重置密码:直接运行 passwd 设置新密码;或用 vim /etc/passwd 把 root 那行的 x(密码占位)删掉,下次登录就不需要密码,进去再用 passwd 补上。
重启系统,用新密码或空密码登录,确认后记得重新用 passwd 设置一个强密码。
适用于系统文件损坏、引导失败等更严重的场景,整个原系统被挂载到 /mnt/sysimage 下。
操作步骤:
确认虚拟机已挂载 CentOS 安装镜像(ISO 光盘)。
重启,出现 logo 时按 ESC 进入 Boot Menu,选择 CD-ROM Drive。
依次选择 Troubleshooting → Rescue a CentOS system。
启动后输入 1 选第一项,两次回车进入命令行。
原系统挂载在 /mnt/sysimage,执行 chroot /mnt/sysimage 切换根目录,之后路径就和正常系统一样了,直接用 passwd 重置即可。
两种方式怎么选: 系统还能正常进 GRUB 菜单 → 单用户模式更快;系统连 GRUB 都进不了,或者文件系统损坏 → 只能走光盘救援。
本文内容对应 CentOS 6 / 7 / 8 / 9,核心命令在 RHEL 同系列发行版(Rocky Linux、AlmaLinux)同样适用。