# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。