Linux的运行级别与目标怎么设置

发布时间:2022-01-27 15:43:31 作者:iii
来源:亿速云 阅读:140
# 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

2.2 Systemd系统查询方法

# 查看默认目标
$ 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

3. 运行级别/目标的配置方法

3.1 临时切换运行模式

传统系统:

$ init 3  # 切换到多用户模式

Systemd系统:

$ sudo systemctl isolate multi-user.target  # 切换到命令行模式
$ sudo systemctl isolate graphical.target  # 切换回图形界面

3.2 永久修改默认目标

方法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

3.3 自定义目标配置

  1. 创建自定义目标文件:
$ sudo vi /etc/systemd/system/custom.target
[Unit]
Description=Custom Environment
Requires=multi-user.target
After=multi-user.target
  1. 设置依赖关系:
$ sudo systemctl add-wants custom.target sshd.service
  1. 启用自定义目标:
$ sudo systemctl enable custom.target

4. 服务管理与运行级别

4.1 传统服务管理

# 设置服务在特定级别启动
$ chkconfig --level 35 httpd on

# 查看服务状态
$ service httpd status

4.2 Systemd服务管理

# 启用服务随目标启动
$ sudo systemctl enable httpd

# 指定服务仅在特定目标启动
$ sudo systemctl add-wants multi-user.target httpd.service

# 查看服务依赖
$ systemctl list-dependencies httpd.service

5. 紧急救援模式操作

5.1 进入救援模式

方法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.

5.2 紧急操作示例

# 重新挂载文件系统为读写
$ mount -o remount,rw /

# 修复损坏的服务配置
$ journalctl -xb  # 查看启动日志
$ systemctl daemon-reload

6. 实战案例与排错

案例1:图形界面无法启动

现象:系统启动后停留在命令行界面

排查步骤: 1. 检查当前目标:

   systemctl get-default
  1. 验证显示管理器状态:
    
    systemctl status gdm  # GNOME显示管理器
    
  2. 查看Xorg日志:
    
    cat /var/log/Xorg.0.log | grep -i error
    

案例2:服务未按预期启动

解决方案:

# 检查服务是否启用
systemctl is-enabled nginx

# 查看服务依赖关系
systemctl list-dependencies nginx.service

# 手动触发服务启动
systemctl start nginx

7. 高级配置技巧

7.1 创建自定义运行级别

  1. 复制现有目标作为模板:
cp /usr/lib/systemd/system/multi-user.target /etc/systemd/system/my-runlevel.target
  1. 修改依赖关系:
[Unit]
Description=My Custom Runlevel
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
  1. 注册新目标:
systemctl daemon-reload
systemctl enable my-runlevel.target

7.2 目标切换钩子脚本

创建服务单元在目标切换时执行操作:

# /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

8. 系统兼容性说明

8.1 不同发行版差异

发行版 初始化系统 备注
RHEL/CentOS 6 SysVinit 使用/etc/inittab配置
RHEL/CentOS 7+ systemd 兼容runlevel命令
Ubuntu 14.04 Upstart 使用/etc/init/配置
Ubuntu 16.04+ systemd 完全转向systemd

8.2 兼容性命令对照表

传统命令 systemd等效命令
service start systemctl start
chkconfig –list systemctl list-unit-files
telinit systemctl isolate

9. 最佳实践建议

  1. 生产服务器推荐:默认使用multi-user.target以减少资源开销
  2. 桌面环境graphical.target应配置为按需启动显示管理器
  3. 服务管理:使用systemd-analyze blame识别启动耗时长的服务
  4. 日志记录:定期检查journalctl -u systemd-logind获取登录事件

10. 总结

Linux系统的运行模式管理经历了从传统运行级别到现代目标的演变。理解这两种机制对于系统管理员至关重要:

  1. 传统运行级别提供简单的状态切换,适合老旧系统维护
  2. systemd目标机制更加灵活,支持并行启动和精确依赖控制
  3. 关键操作包括:
    • 使用systemctl isolate临时切换状态
    • 通过systemctl set-default修改默认目标
    • 利用systemctl list-dependencies分析服务关系

随着Linux系统的发展,建议管理员逐步掌握systemd的管理方法,同时保持对传统运行级别的了解以应对特殊情况。 “`

该文档共计约2400字,采用Markdown格式编写,包含: - 层级分明的章节结构 - 代码块形式的命令示例 - 对比表格展示关键差异 - 实战案例和解决方案 - 兼容性说明和最佳实践 - 格式化的命令行操作示例

推荐阅读:
  1. linux几个运行级别
  2. Linux运行级别的重要性

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux

上一篇:Linux怎么修改文件时间戳

下一篇:jstat命令怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》