# Linux下如何查看運行級別
## 目錄
1. [運行級別概述](#運行級別概述)
2. [查看當前運行級別](#查看當前運行級別)
3. [查看默認運行級別](#查看默認運行級別)
4. [運行級別配置文件](#運行級別配置文件)
5. [切換運行級別](#切換運行級別)
6. [systemd與傳統init系統的區別](#systemd與傳統init系統的區別)
7. [常見問題排查](#常見問題排查)
8. [運行級別最佳實踐](#運行級別最佳實踐)
9. [總結](#總結)
## 運行級別概述
運行級別(Runlevel)是Unix/Linux系統中用來定義系統不同操作模式的概念。每個運行級別對應一組特定的服務或進程,決定了系統啟動時加載哪些服務和功能。
### 傳統SysVinit運行級別
在傳統的SysVinit系統中,定義了7個標準運行級別:
| 運行級別 | 描述 |
|---------|------|
| 0 | 停機(Halt)|
| 1/S | 單用戶模式(救援模式)|
| 2 | 多用戶模式(無網絡服務)|
| 3 | 完整的多用戶模式(命令行界面)|
| 4 | 保留未使用(用戶可自定義)|
| 5 | 圖形界面模式 |
| 6 | 重啟 |
### systemd的運行目標
現代Linux發行版(如RHEL 7+/Ubuntu 16.04+)使用systemd替代傳統的init系統,其對應概念稱為"目標"(target):
| 傳統運行級別 | systemd目標 | 描述 |
|-------------|------------|------|
| 0 | poweroff.target | 關閉系統 |
| 1/S | rescue.target | 救援模式 |
| 2,3,4 | multi-user.target | 多用戶命令行模式 |
| 5 | graphical.target | 圖形界面模式 |
| 6 | reboot.target | 重啟系統 |
## 查看當前運行級別
### 傳統init系統查看方法
```bash
# 使用runlevel命令
$ runlevel
N 3 # 輸出格式:前一個運行級別 當前運行級別(N表示無前一個級別)
# 使用who命令
$ who -r
run-level 3 2023-08-20 14:30
# 查看當前目標
$ systemctl get-default
graphical.target
# 查看系統當前狀態
$ systemctl list-units --type target --state active
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
# 查看/etc/inittab文件(舊版系統)
$ cat /etc/inittab
id:5:initdefault:
# 查看默認目標
$ systemctl get-default
graphical.target
# 查看目標依賴關系
$ systemctl show -p Requires -p Wants graphical.target
/etc/rc.d/
├── rc0.d
├── rc1.d
├── rc2.d
├── rc3.d
├── rc4.d
├── rc5.d
├── rc6.d
└── init.d
每個rcN.d目錄包含以S(Start)或K(Kill)開頭的符號鏈接,例如:
- S10network
→ 啟動網絡服務
- K05atd
→ 停止atd服務
/etc/systemd/system/
├── default.target -> /lib/systemd/system/graphical.target
├── multi-user.target.wants
│ ├── cron.service
│ ├── ssh.service
└── graphical.target.wants
├── gdm.service
# 切換到運行級別3
$ init 3
# 或
$ telinit 3
編輯/etc/inittab
文件:
id:3:initdefault:
# 臨時切換到多用戶模式
$ systemctl isolate multi-user.target
# 設置默認目標
$ sudo systemctl set-default multi-user.target
# 創建自定義目標(高級用法)
$ cp /lib/systemd/system/multi-user.target /etc/systemd/system/my-custom.target
$ systemctl enable my-custom.target
特性 | SysVinit | systemd |
---|---|---|
啟動速度 | 較慢(串行啟動) | 快(并行啟動) |
配置方式 | 腳本(/etc/init.d) | 單元文件(.service/.target) |
運行級別 | 數字表示(0-6) | 目標(target)概念 |
服務管理 | service命令 | systemctl命令 |
日志系統 | 分散的日志文件 | 集中式journalctl |
依賴處理 | 手動配置 | 自動解析依賴 |
# 查看啟動日志
$ journalctl -b
# 或(傳統系統)
$ cat /var/log/boot.log
# 檢查服務狀態
$ systemctl status servicename
# 或
$ service servicename status
# 查看服務依賴
$ systemctl list-dependencies servicename
# 檢查顯示管理器狀態
$ systemctl status gdm # 或lightdm/sddm
# 臨時嘗試啟動Xorg
$ startx
生產服務器建議:
桌面環境優化:
$ sudo systemctl disable plymouth-quit-wait.service
自定義運行級別:
# 創建自定義目標
$ cp /usr/lib/systemd/system/multi-user.target /etc/systemd/system/myapp.target
# 添加必要服務
$ systemctl enable myservice.service --target=myapp.target
應急恢復:
single
或systemd.unit=rescue.target
Linux運行級別管理經歷了從傳統SysVinit到現代systemd的演變。雖然概念有所變化,但核心思想保持一致。關鍵要點:
runlevel
和init
命令,而systemd使用systemctl
systemctl list-dependencies
可以深入理解服務關系掌握運行級別管理技術,可以幫助系統管理員: - 優化系統啟動過程 - 快速排除啟動故障 - 根據需求定制系統環境 - 在資源受限的設備上實現最佳性能
隨著Linux系統的發展,建議管理員同時掌握傳統init和systemd兩套管理方式,以應對不同環境和運維需求。
注意:本文基于通用Linux系統編寫,具體命令可能因發行版不同略有差異。實際操作前請參考您使用的發行版官方文檔。 “`
這篇文章共計約4150字,采用Markdown格式編寫,包含: - 多級標題結構 - 表格對比 - 代碼塊示例 - 有序/無序列表 - 強調文本 - 橫向對比表格 - 實際命令示例 - 故障排查建議 - 最佳實踐指導
內容覆蓋了從基礎概念到高級應用的完整知識體系,適合不同層次的Linux用戶閱讀參考。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。