Linux `init` 相關命令的完整使用指南—目錄
- 一、`init` 系統簡介
- 二、運行級別(Runlevel)詳解
- 三、常用 `init` 命令及使用方法
- 1. 切換運行級別
- 2. 查看當前運行級別
- 3. 服務管理
- 4. 緊急模式(Rescue Mode)
- 四、不同 Init 系統的兼容性
- 1. SysVinit 與 systemd 的命令對照
- 2. Upstart 命令(舊版 Ubuntu)
- 五、典型使用場景
- 1. 系統維護與修復
- 2. 服務器環境配置
- 3. 緊急故障排查
- 六、高級用法與自定義配置
- 1. 自定義運行級別服務
- 2. 修改默認靶點(systemd)
- 3. 創建自定義靶點
- 七、常見問題與解決方案
- 1. 無法切換運行級別
- 2. 服務無法啟動
- 3. 誤操作導致系統無法啟動
- 八、安全注意事項
- 九、總結
一、init
系統簡介
init
(Initialization)是 Linux 系統啟動的第一個進程(PID 1),負責管理系統服務的啟動、停止和進程調度。不同 Linux 發行版使用不同的 init
實現:
? SysVinit(傳統):基于運行級別(Runlevel)管理。
? systemd(現代主流):基于單元(Unit)和服務(Service)管理。
? Upstart(舊版 Ubuntu):事件驅動的初始化系統。
init
命令通過切換運行級別(Runlevel)控制系統狀態,支持單用戶模式、多用戶模式、圖形界面模式等場景。
二、運行級別(Runlevel)詳解
運行級別定義了系統的不同狀態,常見級別如下:
運行級別 | 名稱 | 適用場景 | systemd 對應靶點 |
---|---|---|---|
0 | 關機(Shutdown) | 安全關閉系統 | poweroff.target |
1 | 單用戶模式(Rescue) | 系統修復、密碼重置 | rescue.target |
2 | 多用戶模式(無圖形) | 服務器維護、網絡配置 | multi-user.target |
3 | 多用戶模式(帶網絡) | 命令行環境下的多任務操作 | multi-user.target |
4 | 未定義(保留) | 自定義用途 | 用戶自定義靶點 |
5 | 圖形界面模式(GUI) | 桌面環境啟動 | graphical.target |
6 | 重啟(Reboot) | 重新啟動系統 | reboot.target |
三、常用 init
命令及使用方法
1. 切換運行級別
? 通用語法:
sudo init <運行級別>
? 示例:
? 關機:sudo init 0
? 進入單用戶模式:sudo init 1
? 切換到多用戶無圖形界面:sudo init 2
? 重啟系統:sudo init 6
2. 查看當前運行級別
? SysVinit:
runlevel # 輸出格式:N 當前運行級別 S 上次運行級別
? systemd:
systemctl get-default # 查看默認靶點
systemctl list-units --type=target # 列出所有靶點
3. 服務管理
? 啟動/停止服務(SysVinit):
sudo service <服務名> start/stop/restart
? 啟用/禁用開機自啟(systemd):
sudo systemctl enable/disable <服務名>
? 查看服務狀態:
systemctl status <服務名> # systemd
service <服務名> status # SysVinit
4. 緊急模式(Rescue Mode)
? 進入救援模式(systemd):
sudo systemctl rescue
? 修復文件系統:
在救援模式下,掛載根分區為讀寫模式:
mount -o remount,rw /
四、不同 Init 系統的兼容性
1. SysVinit 與 systemd 的命令對照
功能 | SysVinit 命令 | systemd 命令 |
---|---|---|
切換運行級別 | init <級別> | systemctl isolate <靶點> |
啟動服務 | service <服務> start | systemctl start <服務> |
查看服務狀態 | service <服務> status | systemctl status <服務> |
設置開機自啟 | chkconfig <服務> on | systemctl enable <服務> |
2. Upstart 命令(舊版 Ubuntu)
? 啟動服務:
sudo start <服務名>
? 停止服務:
sudo stop <服務名>
五、典型使用場景
1. 系統維護與修復
? 單用戶模式重置密碼:
- 重啟系統,在 GRUB 菜單按
e
編輯內核參數,添加init=/bin/bash
。 - 進入單用戶模式后執行:
mount -o remount,rw / passwd root
2. 服務器環境配置
? 禁用圖形界面:
sudo systemctl set-default multi-user.target # systemd
sudo chkconfig gdm off # SysVinit
3. 緊急故障排查
? 掛載文件系統為只讀:
mount -o remount,ro /
? 檢查磁盤錯誤:
fsck /dev/sda1
六、高級用法與自定義配置
1. 自定義運行級別服務
? 添加服務到運行級別(SysVinit):
- 創建符號鏈接至對應運行級別目錄:
ln -s /etc/init.d/nginx /etc/rc3.d/S20nginx
- 啟用服務:
chkconfig --level 3 nginx on
2. 修改默認靶點(systemd)
? 永久修改默認運行級別:
sudo systemctl set-default graphical.target # 設置為圖形界面
sudo systemctl set-default rescue.target # 設置為救援模式
3. 創建自定義靶點
? 示例:創建名為 custom.target
的靶點:
sudo nano /etc/systemd/system/custom.target
內容:
[Unit]
Description=Custom Target
Requires=multi-user.target
After=multi-user.target
? 啟用自定義靶點:
sudo systemctl enable custom.target
七、常見問題與解決方案
1. 無法切換運行級別
? 原因:權限不足或服務依賴未解除。
? 解決:
sudo chmod +s /sbin/init # 賦予執行權限(謹慎操作)
2. 服務無法啟動
? 診斷步驟:
- 查看日志:
journalctl -u <服務名> # systemd tail -f /var/log/<服務名>.log
- 檢查依賴關系:
systemctl list-dependencies <服務名>
3. 誤操作導致系統無法啟動
? 恢復方法:
- 進入救援模式(
systemctl rescue
)。 - 掛載根分區并修復配置:
mount /dev/sda1 /mnt chroot /mnt
八、安全注意事項
- 謹慎操作運行級別:避免在生產環境中隨意切換級別導致服務中斷。
- 備份配置文件:修改
/etc/inittab
或 systemd 配置前,務必備份原文件。 - 限制 root 權限:非必要情況下避免使用
sudo
執行高風險命令。
九、總結
? init
的核心作用:管理系統運行狀態和服務生命周期。
? 推薦命令:
? 切換運行級別:sudo init <級別>
或 systemctl isolate <靶點>
? 服務管理:systemctl start/stop <服務>
? 緊急修復:systemctl rescue
? 最佳實踐:優先使用 systemd 命令,定期備份配置,避免直接操作底層運行級別。
通過本指南,您可以全面掌握 Linux 系統中 init
相關命令的使用場景、兼容性問題及安全操作方法,適用于服務器管理、故障排查等多種場景。