Linux 系統啓動過程
Linux系統的啓動過程可以分爲5個階段:
1. 內核引導
當計算機打開電源後,首先是BIOS開機自檢,按照BIOS中設置的啓動設備(通常是硬盤)來啓動。操作系統接管硬件以後,首先讀入 /boot 目錄下的內核文件。
2. 運行init
init 進程是系統所有進程的起點,你可以把它比擬成系統所有進程的老祖宗,沒有這個進程,系統中任何進程都不會啓動。init 程序首先是需要讀取配置文件 /etc/inittab。
nit程序的類型:
SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
3. 運行級別
許多程序需要開機啓動。它們在Windows叫做"服務"(service),在Linux就叫做"守護進程"(daemon)。
init進程的一大任務,就是去運行這些開機啓動的程序。
但是,不同的場合需要啓動不同的程序,比如用作服務器時,需要啓動Apache,用作桌面就不需要。
Linux允許爲不同的場合,分配不同的開機啓動程序,這就叫做"運行級別"(runlevel)。也就是說,啓動時根據"運行級別",確定要運行哪些程序。
Linux系統有7個運行級別(runlevel):
運行級別0:系統停機狀態,系統默認運行級別不能設爲0,否則不能正常啓動
運行級別1:單用戶工作狀態,root權限,用於系統維護,禁止遠程登陸
運行級別2:多用戶狀態(沒有NFS)
運行級別3:完全的多用戶狀態(有NFS),登陸後進入控制檯命令行模式
運行級別4:系統未使用,保留
運行級別5:X11控制檯,登陸後進入圖形GUI模式
運行級別6:系統正常關閉並重啓,默認運行級別不能設爲6,否則不能正常啓動
4. 系統初始化
在init的配置文件中有這麼一行: si::sysinit:/etc/rc.d/rc.sysinit 它調用執行了/etc/rc.d/rc.sysinit,而rc.sysinit是一個bash shell的腳本,它主要是完成一些系統初始化的工作,rc.sysinit是每一個運行級別都要首先運行的重要腳本。
它主要完成的工作有:激活交換分區,檢查磁盤,加載硬件模塊以及其它一些需要優先執行任務。
/etc/rc.d/rc5.d/中的rc啓動腳本通常是K或S開頭的連接文件,對於以以S開頭的啓動腳本,將以start參數來運行。
5. 用戶登錄系統
一般來說,用戶的登錄方式有三種:
(1)命令行登錄
(2)ssh登錄
(3)圖形界面登錄
文本方式登錄的情況:當我們看到mingetty的登錄界面時,我們就可以輸入用戶名和密碼來登錄系統了。
Linux的賬號驗證程序是login,login會接收mingetty傳來的用戶名作爲用戶名參數。
然後login會對用戶名進行分析:如果用戶名不是root,且存在/etc/nologin文件,login將輸出nologin文件的內容,然後退出。
這通常用來系統維護時防止非root用戶登錄。只有/etc/securetty中登記了的終端才允許root用戶登錄,如果不存在這個文件,則root可以在任何終端上登錄。
/etc/usertty文件用於對用戶作出附加訪問限制,如果不存在這個文件,則沒有其他限制。