細說 linux 開機及服務啓動

原文:細說 linux 開機及服務啓動 後續若是變更,在原文更新。html

電源接通。

這個沒得說。linux

加載 BIOS,自檢,並取得啓動設備

BIOS(Basic Input/Output System的縮寫、中文:基本輸入輸出系統),在IBM
PC兼容系統上,是一種業界標準的固件接口。[1]。BIOS這個字眼是在1975年第一次由CP/M操做系統中出現。BIOS是我的電腦啓動時加載的第一個軟件。

BIOS用於電腦開機時運行系統各部分的的自我檢測(Power On Self
Test),並加載引導程序(IPL)或存儲在主存的操做系統。此外,BIOS還向操做系統提供一些系統參數。系統硬件的變化是由BIOS隱藏,程序使用BIOS功能而不是直接控制硬件。現代操做系統會忽略BIOS提供的抽象層並直接控制硬件組件。ubuntu

上面的內容取自維基百科,BIOS(Basic Input Output System) 是一個軟件,這個軟件已經成爲業界標準。通常運行在主板中,通電後會首先啓動這個軟件,根據設置(主要保存在 COMS 中) 取得各類硬件信息,並進行自我檢測,並讀取啓動設備(即系統所在設備,通常爲磁盤,U盤也能夠)centos

讀取並執行第一個啓動設備內的裝載程序

讀取到啓動設備以後就須要啓動引導裝載程序(BootLoader,由於各個操做系統的內核文件及格式不同,因此須要一個裝載程序來處理各種操做系統的裝載,gurp,spfdisk等)來加載操做系統和內核文件。而全部的操做系統的 BootLoader 都放在啓動設備(磁盤)的第一個扇區內,也就是 MBR(Master Boot Record,主引導分區),BOIS 經過 INT13 中斷功能便可讀取到。服務器

經過 BootLoader 讀取到的內核文件,加載驅動程序

深度截圖_選擇區域_20180311200342.png

讀取到內核文件(通常在 /boot 下,如圖所示)以後,linux 會將內核文件加壓到內存中,利用內核功能,測試並驅動各類硬件(儲存設備,cpu,網卡,聲卡)。此時,操做系統以本身的需求從新檢測了硬件,開始接管 BIOS。網絡

內核調用 init(/sbin/init) 進程

20180310004434.png
能夠看到,此進程的 pid 爲1,init 最重要的做用就是準備軟件執行環境,如:系統主機名、網絡設置、語言、文件系統格式等,以及其餘服務啓動。全部的操做都會經過 init 的默認配置文件 /etc/inittab(部分操做系統不使用該文件,如 ubuntu) 來規劃。而且 /etc/inittab (部分操做系統將各項配置分開) 能夠設置 run level(執行級別)。測試

部分操做系統(centos7/ubuntu)將 init 換爲 systemd ,其功能大體同樣,可是作了許多優化和修改。
深度截圖_選擇區域_20180311201005.png字體

執行級別0:系統停機狀態,系統默認執行級別不能設爲0,不然不能正常啓動
執行級別1:單用戶工做狀態,root權限,用於系統維護,禁止遠程登錄
執行級別2:多用戶狀態(沒有NFS服務)
執行級別3:徹底的多用戶狀態(有NFS),登錄後進入控制檯命令行模式,通常 vps 及雲服務器都運行在這個級別
執行級別4:系統未使用,保留
執行級別5:X11控制檯,登錄後進入圖形GUI模式,通常桌面版系統都運行在這個級別
執行級別6:系統正常關閉並重啓,默認執行級別不能設爲6,不然不能正常啓動

run level是什麼?就是經過設置 run level 來規定系統使用不一樣的服務啓動。好比設置 run level 爲3,系統將會啓動命令行模式。runlevel命令能夠查看當前的運行級別。init 命令能夠切換當前系統的模式,好比 init 0就會關機,init 6會重啓。修改配置文件 /etc/inittab 能夠設置默認執行級別,下次啓動後直接以某種執行級別啓動,可是切記不能設置0和6。優化

init進程處理系統初始化

此時,操做系統中只有 init 進程,其 pid 爲1,後續全部進程都是經過 init 啓動,因此全部進程都是init的子進程。init 會先設置系統的基礎環境,主要利用 /etc/rc.d/rc.sysinit 這個腳原本進行系統初始化的各項操做。好比設置時間,磁盤,文件系統,字體等等

啓動系統服務(/etc/rc.d/rc)

系統初始化以後,整個操做系統核心功能已經正常了,可是爲了用戶正常使用,還要啓動一些服務,這時候就要根據執行級別來執行對應的腳原本開啓服務器。
深度截圖_選擇區域_20180311202142.png
深度截圖_選擇區域_20180311202235.png
通常在 /etc/rc.d 目錄下面會有各個級別的配置,而 /etc/rc*.d/ 下面就是腳本的映射centos7

用戶自定義開機啓動程序(/etc/rc.d/rc.local)

啓動完各項服務以後,意味着整個系統的功能均可以正常使用了,用戶若是有其餘操做想完成的話,就能夠建立腳本,或者編寫命令,放在 /etc/rc.d/rc.local 中執行,這樣開機啓動以後就會執行這個腳本或命令。爲何不是直接放在啓動級別中目錄下,而後修改啓動腳本呢?第一是由於服務沒啓動完以前,某些功能或命令是沒法使用的。第二是麻煩。固然若是用戶本身編寫的程序想以系統服務模式啓動,也能夠放到裏面。

加載終端機或桌面環境

啓動各項服務以後就會加載終端或界面等待用戶登陸,也就是出現登陸界面/登陸提示。

圖示

整個過程整理後,以下圖所示
151005477923197.png

相關文章
相關標籤/搜索