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

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

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

1. 前言

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

2. Linux 系統啟動過程

總結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 進程對比

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

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 說明
0 target 關機狀態,使用該級別時將會關閉主機
1 rescue.target 單用戶模式,不需要密碼驗證即可登錄系統,多用于系統維護
2 multi-user.target 用戶定義/域特定運行級別。默認等同于3
3 multi-user.target 字符界面的完整多用戶模式,大多數服務器主機運行在此級別
4 multi-user.target 用戶定義/域特定運行級別。默認等同于3
5 graphical.target 圖形界面的多用戶模式,提供了圖形桌面操作環境
6 reboot.target 重新啟動,使用該級別時將會重啟主機

3.6 systemd 管理命令 systemctl

格式:

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

Sysvinit 和 Systemd 命令對比

Sysvinit命令 Systemd命令 含義
service name start systemctl start name 啟動服務
service name stop systemctl stop name 關閉服務
service name restart systemctl restart name 重啟服務不管當前是啟動還是關閉狀態
service name reload systemctl reload name 重新載入服務配置信息而不中斷服務
service name condrestart systemctl condrestart name 運行狀態的服務可以重啟,不在運行狀態無法重啟
service name status systemctl status name 查看服務的運行狀態
chkconfig name on systemctl enable name 設置服務為開機自啟動
chkconfig name off systemctl disable name 設置服務為開機關閉
chkconfig name systemctl is-enabled name 檢查服務是否開機自啟
chkconfig name –add systemctl 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視頻教程

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享