總結Linux系統啟動與服務管理(整理分享)

2022-01-27 19:01:05
本篇文章給大家帶來了關於linux中系統啟動與服務管理的相關知識,伺服器在正常的執行過程中,一般很少重新啟動,但是如果發生了未知故障或者遇到了人為誤操作的情況,可能就會出現啟動異常的狀況,希望對大家有幫助。

1. 前言

  伺服器在正常的執行過程中,一般很少重新啟動,但是如果發生了未知故障或者遇到了人為誤操作的情況,可能就會出現啟動異常的狀況。雖然 Linux 系統啟動流程是比較底層的知識了,但是為了加深對 Linux 系統的理解,總結了這篇文章。

2. Linux 系統啟動過程

在這裡插入圖片描述

2.1 開機自檢

  伺服器主機開機以後,將根據主機板 BIOS 中的設定對 CPU、記憶體、顯示卡、硬碟等裝置進行初步檢測,檢測成功後根據預設的啟動順序移交系統控制權,大多時候會移交給本機硬碟。

2.2 MBR 引導

  當從本機硬碟中啟動系統時,首先根據硬碟第一個磁區中 MBR (主開機記錄)的設定,將系統控制權傳遞給包含作業系統引導檔案的分割區;或者直接根據 MBR 記錄中的引導資訊呼叫啟動選單(如GRUB) 。

2.3 GRUB 選單

  對於Linux作業系統來說,GRUB (統一啟動載入器)是使用最為廣泛的多系統引導器程式。系統控制權傳遞給 GRUB 以後,將會顯示啟動選單給使用者選擇,並根據所選項(或採用預設值)載入 Linux 核心檔案,然後將系統控制權轉交給核心。需要注意的是,Centos7 採用的是 GRUB2 啟動引導器。

2.4 載入 Linux 核心

  Linux 核心是一個預先編譯好的特殊二進位制檔案,介於各種硬體資源與系統程式之間, 負責資源分配與排程。核心接過系統控制權以後,將完全掌控整個 Linux 作業系統的執行過程。
在CentoS 系統中,預設的核心檔案位於"/boot/vmlinuz-3.10.0-514.el7.x86_64"。

2.5 init 程序初始化

  為了完成進一步的系統引導過程,Linux 核心首先將系統中的 「/sbin/init」 程式載入到記憶體中執行,init 程序負責完成一系列的系統初始化過程,最後等待使用者進行登入。

2.6 系統啟動過程總結

  • 檢測出第一個能夠引導系統的裝置比如硬碟或光碟機
  • 執行放在 MBR 磁區裡的啟動 GRUB 載入程式
  • GRUB 載入程式通過讀取 GRUB 組態檔 /boot/grub2/grub.cfg 來獲取核心和映象檔案系統的設定以及路徑位置
  • 把核心和映象檔案系統載入到記憶體中
  • 載入硬體驅動程式,核心把 init 程序載入到記憶體中執行

3. init 程序與 systemd

3.1 init 程序

  • 由 Linux 核心載入執行 /sbin/init 程式
  • init 程序是系統中第一個程序
  • init 程序的 PID 號永遠為 1
[root@c7-1 ~]#ll /sbin/initlrwxrwxrwx. 1 root root 22 8月  13 21:44 /sbin/init -> ../lib/systemd/systemd

3.2 Centos5/6/7 init 程序對比

在這裡插入圖片描述

3.3 systemd

  • systemd 是 Linux 作業系統的一種 init 軟體
  • CentOS7 中採用全新的 systemd 啟動方式,取代傳統的 SysVinit
  • CentOS7 中執行的第一個 init 程序是 /lib/systemd/systemd
[root@c7-1 ~]#ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 8月15 ?       00:00:31 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 8月15 ?       00:00:00 [kthreadd]
root          4      2  0 8月15 ?       00:00:00 [kworker/0:0H]
root          6      2  0 8月15 ?       00:00:00 [ksoftirqd/0]
root          7      2  0 8月15 ?       00:00:00 [migration/0]
......

3.4 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 的單元

3.5 執行級別對應的 systemd 目標

執行級別systemd 的 target說明
0target關機狀態,使用該級別時將會關閉主機
1rescue.target單使用者模式,不需要密碼驗證即可登入系統,多用於系統維護
2multi-user.target使用者定義/域特定執行級別。預設等同於3
3multi-user.target字元介面的完整多使用者模式,大多數伺服器主機執行在此級別
4multi-user.target使用者定義/域特定執行級別。預設等同於3
5graphical.target圖形介面的多使用者模式,提供了圖形桌面操作環境
6reboot.target重新啟動,使用該級別時將會重新啟動主機

3.6 systemd 管理命令 systemctl

格式:

systemctl COMMAND name.service		#.service 也可以省略

Sysvinit 和 Systemd 命令對比

Sysvinit命令Systemd命令含義
service name startsystemctl start name啟動服務
service name stopsystemctl stop name關閉服務
service name restartsystemctl restart name重新啟動服務不管當前是啟動還是關閉狀態
service name reloadsystemctl reload name重新載入服務設定資訊而不中斷服務
service name condrestartsystemctl condrestart name執行狀態的服務可以重新啟動,不在執行狀態無法重新啟動
service name statussystemctl status name檢視服務的執行狀態
chkconfig name onsystemctl enable name設定服務為開機自啟動
chkconfig name offsystemctl disable name設定服務為開機關閉
chkconfig namesystemctl is-enabled name檢查服務是否開機自啟
chkconfig name --addsystemctl daemon-reload建立一個新服務檔案,或者變更設定的時候使用

範例:

#啟動 httpd 服務
systemctl start httpd 
#停止 httpd 服務
systemctl stop httpd
#重新啟動 httpd 服務
systemctl restart httpd
#檢視 httpd 服務狀態
systemctl status httpd
#禁止自動和手動啟動服務(可以關閉執行的服務)
systemctl mask name.service	
#取消禁止
systemctl unmask name.service
#檢視某服務當前是否正在執行
systemctl is-active name.service
#檢視所有服務
systemctl list-unit-files --type=service
#檢視所有已經啟用的服務
systemctl list-unit-files --type=service | grep enabled
#列出啟動失敗的服務
systemctl --failed --type=service
或
systemctl list-units --state failed
或
systemctl list-unit-files --state=failed
#開啟 httpd 服務並設定開機自啟
systemctl enable --now httpd.service
#關閉 httpd 服務並關閉開機自啟
systemctl disable --now httpd.service
#檢視服務的依賴關係
systemctl list-dependencies name.service
#殺掉程序
systemctl kill unitname

4.總結

  作為一名運維工程,對 Linux 系統服務的管理是基本技能。一個系統在安裝完成後免不了要對系統進行優化,關閉不必要的服務,節省系統資源,保護伺服器不受網路攻擊,這也是運維工作的職責所在,熟練掌握 Linux 系統的底層原理和基本操作,在面對問題的時候才不會茫然不知所措!

相關推薦:《Linux視訊教學

以上就是總結Linux系統啟動與服務管理(整理分享)的詳細內容,更多請關注TW511.COM其它相關文章!