系統的引導過程與服務控制
一:Linux 作業系統的引導,及systemd
1.1 引導過程
(1 ),開機自檢
開機後,將根據主機板BIOS 中的設定對硬體進行檢測,如cpu,記憶體,顯示卡,等裝置,檢測第一個引導系統的裝置,可以是硬碟,光碟機,U盤,網路引。
(2),MBR 引導
當從本機硬碟中啟動系統時,根據第一個硬碟的第一個扇區裡的MBR設定呼叫GRUB啟動選單。centOS7 使用GRUB2 啟動引導器
(3),GRUB選單
GRUB載入程式讀取GRUB的配置檔案 /boot/grub2/grub.cfg,獲取核心和映象檔案系統的設定和路徑位置
(4),載入Linux 核心
將核心和映象檔案系統 載入到記憶體中 。CentOS 7預設的核心檔案位於"/boot/vmlinuz-3.10.0-514.e17.x86 64"
(5),init 程序初始化
載入硬體驅動程式,核心將init 程序載入到記憶體中執行。init程式是在/sbin/init 中。CentOS 7 中為Systemd
1.2 系統初始化程序
1.2.1 init 程序
- 由Linux核心載入執行/sbin/init 程式
- init 程序是系統中的第一個程序 ,是所有程序的父程序
- init 程序的 PID 號永遠是為1
1.2.2 Systemd (也被稱為上帝程序)
- Systemd 是Linux 作業系統的一種init 軟體
- Centos 7 中採用全新的Systemd 啟動方式 ,取代傳統的SysVint
- CentOS 7 中執行的第一個init 程序是 /lib/systemd/systemd
#傳統 SysVinit 依賴於序列執行she11指令碼啟動服務導致效率低下,系統啟動速度較慢
# systemd 能夠將更多的服務程序並行啟動,並且具有提供按需啟動服務的能力,使得啟動更少程序,從而提高系統啟動速度。用 pstree 命令 可以檢視到 程序樹
用 ps -aux 可以檢視到PID號
在CentOS 7 中,檢視 /sbin/init 可以發現是一個指向 /lib/systemd/systemd 的軟連結
1.3 systemd 單元型別
單元: 在systemd,一個單元指的是讓系統知道如何進行操作和管理的資源。這是systemd知道如何去處理的主要物件。這些資源使用叫作單元檔案的配置檔案來定義。單元型別:
單元型別 | 副檔名 | 說明 |
Service | .service | 描述一個系統服務 |
Socket | .socket | 描述一個程序間通訊的套接字 |
Device | .device | 描述一個核心識別的裝置檔案 |
Mount | .mount | 描述一個檔案的掛載點 |
Automount | .automount | 描述一個檔案系統的自動掛載點 |
Swap | .swap | 描述一個記憶體交換裝置或交換檔案 |
Path | .path | 描述一個檔案系統中檔案或目錄 |
Timer | .timer | 描述一個定時器(用於實現類似cron的排程任務) |
Snapshot | .snapshot | 用於儲存一個systemd的狀態 |
Scope | .scope | 使用systemd的匯流排介面以程式設計的方式建立外部程序 |
Slice | .slice | 描述居於Cgroup的一組通過層次組織的管理系統程序 |
Target | .target | 描述一組systemd的單元 |
二: Linux 系統的執行級別
2.1 執行級別
CentOS 7 的 /etc/rc.d 目錄下有7個 rc0-6.d 的目錄,對應系統的7個執行級別(0-6)
0: 系統停機(關機)模式,系統預設執行級別不能設定為0,否則不能正常啟動,一開機就自動關機。 1:單使用者模式,root許可權,用於系統維護,禁止遠端登陸,就像Windows下的安全模式登入。 2:多使用者模式,沒有NFS網路支援。 3:完整的多使用者文字模式,有NFS,登陸後進入控制檯命令列模式。 4:系統未使用,保留一般不用,在一些特殊情況下可以用它來做一些事情。例如在膝上型電腦的電池用盡時,可以切換到這個模式來做一些設定。 5:圖形化模式,登陸後進入圖形GUI模式或GNOME、KDE圖形化介面,如X Window系統。 6:重啟模式,預設執行級別不能設為6,否則不能正常啟動,就會一直開機重啟開機重啟。init 執行級別
此命令可以快速切換系統的執行級別
2.2 檢視執行級別
2.2.1 runlevel 命令
runlevel 命令可以檢視到之前一次的執行級別和當前的執行級別
[root@localhost ~]# runlevel N 5 #N 為null ,表示執行級別尚未改變。 5 為當前的執行級別 [root@localhost ~]# runlevel 5 3 # 5 表示上一次的執行級別為 5 , 當前的執行級別為 3
2.2.2 who 命令
who -r 命令 可以檢視到當前和上一次的執行級別
[root@localhost ~]# who -r 執行級別 3 2021-06-22 19:46 最近=5 #當前的執行級別是5 ,上一次的是3
2.2.3 systemctl 工具
systemctl 可以檢視到預設的執行級別
[root@localhost ~]# systemctl get-default #檢視當前的預設執行級別 graphical.target #這個預設執行級別是 5 圖形化模式
2.3 切換執行級別
2.3.1 臨時切換執行級別
(1) 使用init 命令
init 命令後面跟上執行級別,可以快速切換
[root@localhost ~]# runlevel 5 3 [root@localhost ~]# init 5 #切換到 5 執行級別 [root@localhost ~]# runlevel 3 5
(2) systemctl 命令
systemctl isolate systemd的target
執行級別與systemd 的target對應
執行級別 | Systemd的target | 說明 |
0 | target(poweroff.target) | 系統停機(關機)模式,系統預設執行級別不能設定為0,否則不能正常啟動,一開機就自動關機。 |
1 | rescue.target | 單使用者模式,root許可權,用於系統維護,禁止遠端登陸,就像Windows下的安全模式登入。 |
2 | multi-user.target | 多使用者模式,沒有NFS網路支援。 |
3 | multi-user.target | 完整的多使用者文字模式,有NFS,登陸後進入控制檯命令列模式。 |
4 | multi-user.target | 系統未使用,保留一般不用,在一些特殊情況下可以用它來做一些事情。例如在膝上型電腦的電池用盡時,可以切換到這個模式來做一些設定。 |
5 | graphical.target | 圖形化模式,登陸後進入圖形GUI模式或GNOME、KDE圖形化介面,如X Window系統。 |
6 | reboot.target | 重啟模式,預設執行級別不能設為6,否則不能正常啟動,就會一直開機重啟開機重啟。 |
[root@localhost ~]# runlevel 3 5 [root@localhost ~]# systemctl isolate multi-user.target #切換到執行級別3 [root@localhost ~]# runlevel 5 3 [root@localhost ~]# systemctl isolate poweroff.target #切換到執行級別0 (關機) Connection closing...Socket close.
2.3.2 設定預設執行級別與永久切換執行級別
(1) systemctl set-default systemd的target
[root@localhost ~]# 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. [root@localhost ~]# systemctl get-default #檢視預設執行級別 multi-user.target
2 ln -fs /lib/systemd/system/執行級別target標籤 /etc/systemd/system/default.target
檢視預設執行級別,實際是檢視軟連線檔案 /etc/systemd/system/default.target 。所以,可以通過修改該軟連線的原始檔,來修改預設執行級別
[root@localhost ~]# ll /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 41 6月 23 19:04 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target [root@localhost ~]# ls /lib/systemd/system/multi-user.target /lib/systemd/system/multi-user.target [root@localhost ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
#將/etc/systemd/system/default.target 強制做成 /lib/systemd/system/multi-user.target 的軟連線。 [root@localhost ~]# systemctl get-default multi-user.target #預設執行級別是 3 multi-user.target
三:優化啟動過程
3.1 ntsysv 工具
(1)特點:
- 該工具提供一個互動式,視覺化視窗
- 可以在字元終端執行
- 便於集中管理多個服務
- 用於控制服務是否開機自啟動
(2) 使用
命令列使用 ntsysv 命令進入
ntsysv 工具操作:
* 號表示啟用自啟
空格打上 * 或者 取消*
tab 鍵切換游標 到 【確定】 【取消】 或者切換回選項操作
3. 2 systemctl 命令
systemctl 不提供互動式,視覺化視窗
管理單個服務效率更高
用於CentOs 7 版本
systemctl 可以用 enable 和disable 開啟和關閉 服務的自動啟動
用 is-enabled 檢視 服務是否設定了開機自啟
[root@localhost ~]# systemctl is-enabled httpd #檢視httpd 服務是否設定了開機自啟 disabled #httpd 沒有設定開機自啟 [root@localhost ~]# systemctl enable httpd #設定httpd開機自啟 Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [root@localhost ~]# systemctl is-enabled httpd enabled [root@localhost ~]# systemctl disable httpd #關閉 httpd 的開機自啟 Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service. [root@localhost ~]# systemctl is-enabled httpd disabled
systemctl [選項] 命令 服務
常用選項
--after #在某個服務之後啟動
--before #在某個服務之前啟動