首頁 > 軟體

Linux系統啟動引導過程和服務控制

2020-06-16 17:39:16

Linux系統剛入門的小夥伴們是不是還在迷惑到底系統從我們按下電源鍵的那一刻,是如何進行一步一步執行的,知道我們輸入使用者名稱和密碼進入系統,來操作電腦,今天我們就來寫一下開機的啟動過程以及相關服務的控制。

一. 系統引導流程:

1 . 開機加電,BIOS對硬體加電自檢

   加電自檢,檢測硬體裝置,這是因為BIOS中包含了CPU的相關資訊、裝置啟動順序資訊、硬碟資訊、記憶體資訊、時鐘資訊、PnP特性等等

2 . 檢查啟動順序,從硬碟引導,讀取MBR(446位元組)

   硬碟上第0磁軌第一個磁區被稱為MBR,也就是Master Boot Record,即主開機記錄,它的大小是512位元組,主載入程式的任務就是查詢並且載入處在硬碟分割區上的次載入程式。通過分割區表查詢活動分割區,並將處在活動分割區的次引導載入程式讀取到記憶體裡面執行。

3 . 讀取GRUB的引導

    次引導載入程式得主要的功能就是載入linux核心,次載入程式(boot loader)會引導作業系統。當機器引導它的作業系統時,BIOS會讀取引導媒介上最前面的512位元組(主開機記錄,即master boot record,MBR)。在單一的MBR中只能儲存一個作業系統的引導記錄,所以當需要多個作業系統時就會出現問題,因此需要更靈活的引導載入程式
    次引導載入程式就會在記憶體執行起來。系統讀取記憶體中的grub設定資訊(一般為menu.lst或grub.lst)就會出現GRUB圖形介面,讓使用者選擇載入什麼樣的核心並依照此設定資訊來啟動不同的作業系統。
    如何檢視你MBR的內容,那麼你可以使用以下命令來檢視:
[root@localhost ~]# dd if=/dev/sda of=mbr.bin bs=512 count=1   #此處的/dev/sda為你的硬碟的型別,本次我們使用的為scsi,表示為/dev/sda 
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000280189 s, 1.8 MB/s
[root@localhost ~]# od -xa mbr.bin  #此處必須root身份執行的dd命令,讀取你的第一個整合電子驅動器或者IDE驅動器的前512位元組,並將他們寫入
mbr.bim檔案.od命令則是以十六進位制和ASCII碼形式列印出這個二進位制檔案

4 . 載入核心檔案 (/boot目錄下)

 使用者選擇要載入的核心之後,次引導載入程式(GRUB)就會根據/boot/grub.conf組態檔中所設定的資訊,從/boot/所在的分割區上讀取Linux核心映像,然後把核心映像載入到記憶體中並把控制權交給Linux核心。

5 . 執行init進程,永遠是第一個進程

  • A.讀取/etc/inittab組態檔
核心被載入後,第一個執行的程式便是/sbin/init(變成一個使用者進程),該程式會讀取/etc/inittab組態檔,init根據/etc/inittab組態檔來執行相應的指令碼進行系統初始化,如設定鍵盤、字型,裝載模組,設定網路等.其實/etc/inittab檔案最主要的作用就是設定Linux的執行等級。
【Linux下執行級別設定:】

0 - halt (Do NOT set initdefault to this)     #關機
1 - Single user mode     #單使用者模式
2 - Multiuser, without NFS (The same as 3, if you do not have networking)     #字元介面,多使用者,無網路模式
3 - Full multiuser mode     #字元介面,多使用者模式
4 - unused     #保留,暫時沒有被使用
5 - X11      #圖形介面,多使用者模式
6 - reboot (Do NOT set initdefault to this)     #重新啟動

設定形式是“:id:3:initdefault:”,表明Linux執行在等級3上

  • B.做系統初始化/etc/rc.d/rc.sysinit
    在設定了執行等級後,Linux系統執行的第一個使用者層檔案就是/etc/rc.d/rc.sysinit指令碼程式,它做的工作非常多,包括設定PATH、設定網路設定(/etc/sysconfig/network)、啟動swap分割區、設定/proc等等。
  • C.控制啟動哪些程式和服務/etc/rc.d/rc,依據執行級別決定,按照當前的執行級別,執行相應的執行指令碼。
    根據執行級別的不同,系統會執行rc0.d到rc6.d中的相應的指令碼程式,來完成相應的初始化工作和啟動相應的服務
  • D. 最後執行一個指令碼/etc/rc.d/rc.local(讓管理員自定義啟動命令)
    rc.local組態檔就是在一切初始化工作後,Linux留給使用者進行個性化的地方,你可以進行一些開機載入的自定義設定,只限制於當前登入的用的個人設定。
  • E.執行/bin/login程式,進入登入狀態
    到了載入此步驟的時候,那麼系統已經執行到提醒使用者進行使用者名稱和密碼輸入登陸系統的過程了,到此為止,那麼一系列的從你把主機的電源開啟一直到你輸入使用者名稱和密碼登陸系統之間全部啟動過程。

二. 服務的控制和優化:

  • 服務的分類:
類別 特點
獨立執行的服務 響應快,但是佔系統資源多
依賴xinetd服務執行的服務 響應慢些,但是佔資源少
  • 系統服務控制

1 . 常用方式:

    - service  服務名稱  控制型別
    - /etc/rc.d/init.d服務名稱  控制型別

    [root@localhost ~]# /etc/init.d/vsftpd status
    vsftpd is stopped
    [root@localhost ~]# service vsftpd start
    Starting vsftpd for vsftpd:                                [  OK  ]

2 . 控制型別

         - start:啟動 
         - stop:停止 
         - restart:重新啟動 
         - reload:重新載入 
         - status:檢視服務狀態
  • Linux系統的執行級別

1 . 檢視執行級別

[root@localhost ~]# runlevel 
5 3
使用runlevel命令,分別顯示:
5:切換前的執行級別、3:當前執行級別

2 . 臨時切換執行級別

[root@localhost ~]# init 5
[root@localhost ~]# runlevel 
3 5
使用init命令結合0-6執行級別引數
  • 優化啟動過程
    1 . 系統服務管理工具
    a) ntsysv工具
特點:
    提供一個互動式、視覺化視窗
    可以在字元終端執行
    便於集中管理多個服務
用法:
    ntsysv  --level  級別列表

[root@localhost ~]# ntsysv --level 3  #此處表示以級別3設定所有服務
  • b) chkconfig工具
特點:
    不提供互動式、視覺化視窗
    管理??個服務效率更高
用法:
    檢視系統服務的啟動狀態
    格式:chkconfig --list 服務名稱
    [root@localhost ~]# chkconfig --list vsftpd   #檢視vsftpd服務開機是否啟動
    vsftpd          0:off   1:off   2:off   3:off   4:off   5:off   6:off   #此處的6個狀態就是linux的執行狀態 【off表示不啟動  on表示啟動】

----------

    設定系統服務的啟動狀態
    格式:chkconfig  --level  級別列表 服務名  on|off
    [root@localhost ~]# chkconfig --level 3 vsftpd on 
    [root@localhost ~]# chkconfig --list vsftpd
    vsftpd          0:off   1:off   2:off   3:on    4:off   5:off   6:off

----------
服務指令碼位置:/etc/init.d ----》/etc/rc.d/init.d

到此為止,小夥伴是否了解了系統是如何進行啟動的以及啟動時載入所需的組態檔的順序,對於系統的啟動過程來說是我們入IT這一行的所要必須掌握的。掌握了此啟動過程,當系統出毛病的時候,我們才能根據啟動順序來進行分析並解決問題。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-06/132390.htm


IT145.com E-mail:sddin#qq.com