天天看點

Linux 系統啟動過程

linux啟動時我們會看到許多啟動資訊。

Linux系統的啟動過程并不是大家想象中的那麼複雜,其過程可以分為5個階段:

核心的引導。

運作 init。

系統初始化。

建立終端 。

使用者登入系統。

init程式的類型: 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。

當計算機打開電源後,首先是BIOS開機自檢,按照BIOS中設定的啟動裝置(通常是硬碟)來啟動。

作業系統接管硬體以後,首先讀入 /boot 目錄下的核心檔案。

Linux 系統啟動過程

init 程序是系統所有程序的起點,你可以把它比拟成系統所有程序的老祖宗,沒有這個程序,系統中任何程序都不會啟動。

init 程式首先是需要讀取配置檔案 /etc/inittab。

Linux 系統啟動過程

許多程式需要開機啟動。它們在Windows叫做"服務"(service),在Linux就叫做"守護程序"(daemon)。

init程序的一大任務,就是去運作這些開機啟動的程式。

但是,不同的場合需要啟動不同的程式,比如用作伺服器時,需要啟動Apache,用作桌面就不需要。

Linux允許為不同的場合,配置設定不同的開機啟動程式,這就叫做"運作級别"(runlevel)。也就是說,啟動時根據"運作級别",确定要運作哪些程式。

Linux 系統啟動過程

Linux系統有7個運作級别(runlevel):

運作級别0:系統停機狀态,系統預設運作級别不能設為0,否則不能正常啟動

運作級别1:單使用者工作狀态,root權限,用于系統維護,禁止遠端登陸

運作級别2:多使用者狀态(沒有NFS)

運作級别3:完全的多使用者狀态(有NFS),登陸後進入控制台指令行模式

運作級别4:系統未使用,保留

運作級别5:X11控制台,登陸後進入圖形GUI模式

運作級别6:系統正常關閉并重新開機,預設運作級别不能設為6,否則不能正常啟動

在init的配置檔案中有這麼一行: si::sysinit:/etc/rc.d/rc.sysinit 它調用執行了/etc/rc.d/rc.sysinit,而rc.sysinit是一個bash shell的腳本,它主要是完成一些系統初始化的工作,rc.sysinit是每一個運作級别都要首先運作的重要腳本。

它主要完成的工作有:激活交換分區,檢查磁盤,加載硬體子產品以及其它一些需要優先執行任務。

這一行表示以5為參數運作/etc/rc.d/rc,/etc/rc.d/rc是一個Shell腳本,它接受5作為參數,去執行/etc/rc.d/rc5.d/目錄下的所有的rc啟動腳本,/etc/rc.d/rc5.d/目錄中的這些啟動腳本實際上都是一些連接配接檔案,而不是真正的rc啟動腳本,真正的rc啟動腳本實際上都是放在/etc/rc.d/init.d/目錄下。

而這些rc啟動腳本有着類似的用法,它們一般能接受start、stop、restart、status等參數。

/etc/rc.d/rc5.d/中的rc啟動腳本通常是K或S開頭的連接配接檔案,對于以 S 開頭的啟動腳本,将以start參數來運作。

而如果發現存在相應的腳本也存在K打頭的連接配接,而且已經處于運作态了(以/var/lock/subsys/下的檔案作為标志),則将首先以stop為參數停止這些已經啟動了的守護程序,然後再重新運作。

這樣做是為了保證是當init改變運作級别時,所有相關的守護程序都将重新開機。

至于在每個運作級中将運作哪些守護程序,使用者可以通過chkconfig或setup中的"System Services"來自行設定。

Linux 系統啟動過程

rc執行完畢後,傳回init。這時基本系統環境已經設定好了,各種守護程序也已經啟動了。

init接下來會打開6個終端,以便使用者登入系統。在inittab中的以下6行就是定義了6個終端:

從上面可以看出在2、3、4、5的運作級别中都将以respawn方式運作mingetty程式,mingetty程式能打開終端、設定模式。

同時它會顯示一個文本登入界面,這個界面就是我們經常看到的登入界面,在這個登入界面中會提示使用者輸入使用者名,而使用者輸入的使用者将作為參數傳給login程式來驗證使用者的身份。

一般來說,使用者的登入方式有三種:

(1)指令行登入

(2)ssh登入

(3)圖形界面登入

Linux 系統啟動過程

對于運作級别為5的圖形方式使用者來說,他們的登入是通過一個圖形化的登入界面。登入成功後可以直接進入 KDE、Gnome 等視窗管理器。

而本文主要講的還是文本方式登入的情況:當我們看到mingetty的登入界面時,我們就可以輸入使用者名和密碼來登入系統了。

Linux 的賬号驗證程式是 login,login 會接收 mingetty 傳來的使用者名作為使用者名參數。

然後 login 會對使用者名進行分析:如果使用者名不是 root,且存在 /etc/nologin 檔案,login 将輸出 nologin 檔案的内容,然後退出。

這通常用來系統維護時防止非root使用者登入。隻有/etc/securetty中登記了的終端才允許 root 使用者登入,如果不存在這個檔案,則 root 使用者可以在任何終端上登入。

/etc/usertty檔案用于對使用者作出附加通路限制,如果不存在這個檔案,則沒有其他限制。

Linux預設提供了六個指令視窗終端機讓我們來登入。

預設我們登入的就是第一個視窗,也就是tty1,這個六個視窗分别為tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 來切換它們。

如果你安裝了圖形界面,預設情況下是進入圖形界面的,此時你就可以按Ctrl + Alt + F1 ~ F6來進入其中一個指令視窗界面。

當你進入指令視窗界面後再傳回圖形界面隻要按下Ctrl + Alt + F7 就回來了。

如果你用的vmware 虛拟機,指令視窗切換的快捷鍵為 Alt + Space + F1~F6. 如果你在圖形界面下請按Alt + Shift + Ctrl + F1~F6 切換至指令視窗。

Linux 系統啟動過程

在linux領域内大多用在伺服器上,很少遇到關機的操作。畢竟伺服器上跑一個服務是永無止境的,除非特殊情況下,不得已才會關機。

正确的關機流程為:sync > shutdown > reboot > halt

關機指令為:shutdown ,你可以man shutdown 來看一下幫助文檔。

例如你可以運作如下指令關機:

最後總結一下,不管是重新開機系統還是關閉系統,首先要運作 sync 指令,把記憶體中的資料寫到磁盤中。

關機的指令有 shutdown –h now halt poweroff 和 init 0 , 重新開機系統的指令有 shutdown –r now reboot init 6。

http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html