您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Linux的运行级别与目标怎么设置
## 1. 运行级别与目标的概念解析
### 1.1 传统SysVinit的运行级别
Linux运行级别(Runlevel)是SysVinit系统中的一个核心概念,用于定义系统在不同状态下应该启动哪些服务。传统Linux系统定义了7个标准运行级别:
- **0** - 停机(Halt)
- **1** - 单用户模式(Single-user mode)
- **2** - 多用户模式(无网络)
- **3** - 完整的多用户模式(命令行界面)
- **4** - 保留未使用
- **5** - 图形界面模式
- **6** - 重启
### 1.2 Systemd的目标单元
现代Linux发行版(如RHEL 7+/Ubuntu 16.04+)采用systemd作为初始化系统,引入了"目标"(target)概念替代传统运行级别。目标通过单元文件定义,实质上是特定服务的组合:
| 传统运行级别 | Systemd目标 | 说明 |
|--------------|----------------------|--------------------------|
| 0 | poweroff.target | 关闭系统 |
| 1, S, single | rescue.target | 紧急救援模式 |
| 2 | multi-user.target | 多用户模式(无图形) |
| 3 | multi-user.target | 完整多用户模式 |
| 4 | multi-user.target | 保留(通常同级别3) |
| 5 | graphical.target | 图形界面模式 |
| 6 | reboot.target | 重启系统 |
## 2. 查看当前运行状态
### 2.1 传统系统查询方法
```bash
# 查看当前运行级别
$ runlevel
N 5 # 前一个级别N(无),当前级别5
# 列出所有服务在各运行级别的状态
$ chkconfig --list
# 查看默认目标
$ systemctl get-default
graphical.target
# 查看当前活动目标
$ systemctl list-units --type=target
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
graphical.target loaded active active Graphical Interface
multi-user.target loaded active active Multi-User System
# 查看目标依赖关系(以图形界面为例)
$ systemctl show --property "Requires" --property "Wants" graphical.target
传统系统:
$ init 3 # 切换到多用户模式
Systemd系统:
$ sudo systemctl isolate multi-user.target # 切换到命令行模式
$ sudo systemctl isolate graphical.target # 切换回图形界面
方法1:使用systemctl命令
$ sudo systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
方法2:手动创建符号链接
$ sudo ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
$ sudo vi /etc/systemd/system/custom.target
[Unit]
Description=Custom Environment
Requires=multi-user.target
After=multi-user.target
$ sudo systemctl add-wants custom.target sshd.service
$ sudo systemctl enable custom.target
# 设置服务在特定级别启动
$ chkconfig --level 35 httpd on
# 查看服务状态
$ service httpd status
# 启用服务随目标启动
$ sudo systemctl enable httpd
# 指定服务仅在特定目标启动
$ sudo systemctl add-wants multi-user.target httpd.service
# 查看服务依赖
$ systemctl list-dependencies httpd.service
方法1:启动时修改内核参数
1. 在GRUB菜单按’e’编辑启动参数
2. 在linux行末尾添加systemd.unit=rescue.target
3. 按Ctrl+X启动
方法2:运行时切换
$ sudo systemctl rescue
Warning: Stopping user services is usually not advised during rescue mode.
# 重新挂载文件系统为读写
$ mount -o remount,rw /
# 修复损坏的服务配置
$ journalctl -xb # 查看启动日志
$ systemctl daemon-reload
现象:系统启动后停留在命令行界面
排查步骤: 1. 检查当前目标:
systemctl get-default
systemctl status gdm # GNOME显示管理器
cat /var/log/Xorg.0.log | grep -i error
解决方案:
# 检查服务是否启用
systemctl is-enabled nginx
# 查看服务依赖关系
systemctl list-dependencies nginx.service
# 手动触发服务启动
systemctl start nginx
cp /usr/lib/systemd/system/multi-user.target /etc/systemd/system/my-runlevel.target
[Unit]
Description=My Custom Runlevel
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
systemctl daemon-reload
systemctl enable my-runlevel.target
创建服务单元在目标切换时执行操作:
# /etc/systemd/system/target-changed.service
[Unit]
Description=Target Changed Hook
Before=multi-user.target graphical.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/target-change-script.sh
[Install]
WantedBy=multi-user.target graphical.target
发行版 | 初始化系统 | 备注 |
---|---|---|
RHEL/CentOS 6 | SysVinit | 使用/etc/inittab配置 |
RHEL/CentOS 7+ | systemd | 兼容runlevel命令 |
Ubuntu 14.04 | Upstart | 使用/etc/init/配置 |
Ubuntu 16.04+ | systemd | 完全转向systemd |
传统命令 | systemd等效命令 |
---|---|
service start | systemctl start |
chkconfig –list | systemctl list-unit-files |
telinit | systemctl isolate |
multi-user.target
以减少资源开销graphical.target
应配置为按需启动显示管理器systemd-analyze blame
识别启动耗时长的服务journalctl -u systemd-logind
获取登录事件Linux系统的运行模式管理经历了从传统运行级别到现代目标的演变。理解这两种机制对于系统管理员至关重要:
systemctl isolate
临时切换状态systemctl set-default
修改默认目标systemctl list-dependencies
分析服务关系随着Linux系统的发展,建议管理员逐步掌握systemd的管理方法,同时保持对传统运行级别的了解以应对特殊情况。 “`
该文档共计约2400字,采用Markdown格式编写,包含: - 层级分明的章节结构 - 代码块形式的命令示例 - 对比表格展示关键差异 - 实战案例和解决方案 - 兼容性说明和最佳实践 - 格式化的命令行操作示例
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。