1. 命令简介
telinit 命令用于切换当前正在运行的 Linux 系统的运行等级(runlevel)。它是系统初始化进程 init(传统 sysvinit)或现代系统中 systemd 的一个接口,通过向 init 进程发送信号来改变系统的运行状态。该命令通常用于系统维护、关机、重启或切换多用户模式与图形界面模式。
2. 语法格式
bash
运行
telinit [选项]... 运行等级
telinit 运行等级
3. 常用选项及参数说明
选项
表格
| 选项 | 说明 |
|---|---|
| -t SECONDS | 指定在发送信号给 init 进程前等待的秒数。默认值通常为 5 秒。 |
| -e KEY=VALUE | 指定一个额外的环境变量,该变量将随 RUNLEVEL 和 PREVLEVEL 一起包含在发出的 runlevel 事件中。此选项可多次使用以设置多个变量。 |
| --help | 显示帮助信息并退出。 |
| --version | 显示版本信息并退出。 |
运行等级参数
表格
| 运行等级 | 说明 |
|---|---|
| 0 | 停止系统(关机)。 |
| 1 或 S/s | 单用户模式(救援模式),通常用于系统维护。注意:S 或 s 会尝试直接进入单用户模式而不先停止所有进程,可能导致意外状态。 |
| 2 | 多用户模式,不带网络服务(在某些发行版中定义不同,通常不使用)。 |
| 3 | 完整的多用户模式,带网络服务(文本界面)。 |
| 4 | 用户自定义(通常未使用,默认与等级 3 相同)。 |
| 5 | 多用户模式,带图形界面登录。 |
| 6 | 重新启动系统。 |
| Q 或 q | 通知 init 进程重新检查 /etc/inittab 文件(传统 sysvinit 系统)。 |
| U 或 u | 通知 init 进程重新执行自身,保持当前运行等级。通常用于升级 init 二进制文件后。 |
4. 示例用法
- 重启系统
bash
运行
sudo telinit 6
等同于 sudo reboot。
- 关闭系统
bash
运行
sudo telinit 0
等同于 sudo shutdown -h now。
- 切换到多用户文本模式(运行等级 3)
bash
运行
sudo telinit 3
- 切换到图形界面模式(运行等级 5)
bash
运行
sudo telinit 5
- 进入单用户维护模式
bash
运行
sudo telinit 1
- 等待 10 秒后重启
bash
运行
sudo telinit -t 10 6
- 向运行等级事件添加环境变量
bash
运行
sudo telinit -e MAINT=yes 1
这会在切换到运行等级 1 时,在事件中包含 MAINT=yes。
- 通知 init 重新读取配置文件(传统 sysvinit)
bash
运行
sudo telinit q
5. 注意事项
- 权限要求:telinit 通常需要 root 权限(使用 sudo)来执行,因为它直接控制系统运行状态。
- 运行等级差异:不同 Linux 发行版对运行等级的定义可能略有差异。例如,某些系统可能将等级 2 用作带网络的多用户模式。建议查阅发行版文档。
- systemd 系统:在现代使用 systemd 的系统中(如 RHEL 7+、Ubuntu 15.04+),运行等级被映射到特定的 systemd 目标(target):
- 0 → poweroff.target
- 1 → rescue.target
- 3 → multi-user.target
- 5 → graphical.target
- 6 → reboot.target 虽然 telinit 仍然可用,但推荐使用 systemctl isolate TARGET.target 命令进行切换。
- 慎用 S/s:尽量避免直接使用 telinit S 或 telinit s,因为它可能不会正常停止服务,导致系统状态不一致。优先使用等级 1。
- 环境变量:telinit 会读取 RUNLEVEL 环境变量来获取当前运行等级(如果设置),否则从 /var/run/utmp 读取。
- 日志记录:每次运行等级变更都会记录到 /var/log/wtmp 中,并更新 /var/run/utmp。
- 替代工具:对于关机和重启操作,更推荐使用 shutdown、reboot、poweroff 等命令,它们提供了更友好的用户交互和安全检查。
6. 相关文件
- /var/run/utmp:当前运行等级和用户登录信息。
- /var/log/wtmp:历史运行等级变更和用户登录日志。
- /etc/inittab:传统 sysvinit 系统的初始化配置文件(现代 systemd 系统可能不存在此文件)。