【概述】
Linux 啟動時(shí)會看到許多啟動信息,但 Linux系統(tǒng)的啟動過程并沒有想象中的復(fù)雜,其過程大致可分為7個(gè)階段:
內(nèi)核的引導(dǎo)運(yùn)行 init系統(tǒng)初始化建立終端?用戶登錄系統(tǒng)圖形模式與文字模式的切換方式
關(guān)機(jī)
【內(nèi)核引導(dǎo)】
當(dāng)計(jì)算機(jī)打開電源啟動后,首先進(jìn)行的是BIOS開機(jī)自檢,即:按照BIOS中設(shè)置的啟動設(shè)備(通常是硬盤)來啟動。
操作系統(tǒng)接管硬件以后,首先讀入 /boot 目錄下的內(nèi)核文件,這個(gè)過程即為內(nèi)核引導(dǎo)過程。
【運(yùn)行init】
1.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
注:init 進(jìn)程是系統(tǒng)所有進(jìn)程的起點(diǎn),沒有這個(gè)進(jìn)程,系統(tǒng)中任何進(jìn)程都不會啟動,init 程序首先讀取的配置文件是 /etc/inittab
2.運(yùn)行級別
許多程序需要開機(jī)啟動,這些程序在 Windows 中叫做"服務(wù)"(service),在 Linux 中叫做"守護(hù)進(jìn)程"(daemon),init 進(jìn)程的一大任務(wù),就是去運(yùn)行這些開機(jī)啟動的程序。
不同的場合需要啟動不同的程序(比如用作服務(wù)器時(shí),需要啟動 Apache,用作桌面則不需要),Linux 允許為不同的場合,分配不同的開機(jī)啟動程序,這就叫做"運(yùn)行級別"(runlevel),即:啟動時(shí)根據(jù)"運(yùn)行級別",確定要運(yùn)行的程序。
Linux 系統(tǒng)有7個(gè)運(yùn)行級別(runlevel):
運(yùn)行級別0:系統(tǒng)停機(jī)狀態(tài),系統(tǒng)默認(rèn)運(yùn)行級別不能設(shè)為0,否則不能正常啟動運(yùn)行級別1:單用戶工作狀態(tài),root權(quán)限,用于系統(tǒng)維護(hù),禁止遠(yuǎn)程登陸運(yùn)行級別2:多用戶狀態(tài)(沒有NFS)運(yùn)行級別3:完全的多用戶狀態(tài)(有NFS),登陸后進(jìn)入控制臺命令行模式運(yùn)行級別4:系統(tǒng)未使用,保留運(yùn)行級別5:X11控制臺,登陸后進(jìn)入圖形GUI模式運(yùn)行級別6:系統(tǒng)正常關(guān)閉并重啟,默認(rèn)運(yùn)行級別不能設(shè)為6,否則不能正常啟動
【系統(tǒng)初始化】
在 init 的配置文件中,存在這么一行:si::sysinit:/etc/rc.d/rc.sysinit ,它調(diào)用執(zhí)行了 /etc/rc.d/rc.sysinit ,而rc.sysinit 是一個(gè) bash shell 的腳本,主要用于完成系統(tǒng)初始化的工作,rc.sysinit 是每一個(gè)運(yùn)行級別都要首先運(yùn)行的重要腳本。
它主要完成的工作有:激活交換分區(qū)、檢查磁盤、加載硬件模塊等需要優(yōu)先執(zhí)行的任務(wù)。
l5:5:wait:/etc/rc.d/rc 5
這一行表示以5為參數(shù)運(yùn)行 /etc/rc.d/rc ,/etc/rc.d/rc 是一個(gè) Shell 腳本,它接受5作為參數(shù),去執(zhí)行 /etc/rc.d/rc5.d/ 目錄下的所有的 rc 啟動腳本,/etc/rc.d/rc5.d/ 目錄中的這些啟動腳本實(shí)際上都是一些連接文件,而不是真正的 rc啟動腳本,真正的 rc啟動腳本 實(shí)際上都是放在 /etc/rc.d/init.d/ 目錄下。
而這些 rc啟動腳本 有著類似的用法,它們一般能接受 start、stop、restart、status 等參數(shù)。
/etc/rc.d/rc5.d/ 中的 rc啟動腳本 通常是 K 或 S 開頭的連接文件,對于以 S 開頭的啟動腳本,將以 start參數(shù) 來運(yùn)行。
如果發(fā)現(xiàn)存在相應(yīng)的腳本也存在 K 開頭的連接,而且已經(jīng)處于運(yùn)行態(tài)了(以 /var/lock/subsys/ 下的文件作為標(biāo)志),則首先以 stop 為參數(shù)停止這些已經(jīng)啟動的守護(hù)進(jìn)程,然后再重新運(yùn)行。這樣做是為了保證是當(dāng) init 改變運(yùn)行級別時(shí),所有相關(guān)的守護(hù)進(jìn)程都將重啟。
至于在每個(gè)運(yùn)行級中將運(yùn)行哪些守護(hù)進(jìn)程,用戶可通過 chkconfig 或 setup 中的"System Services"來自行設(shè)定。
【建立終端】
rc 執(zhí)行完畢后,返回 init,此時(shí)基本系統(tǒng)環(huán)境已經(jīng)設(shè)置好了,各種守護(hù)進(jìn)程也已啟動了,init 接下來會打開6個(gè)終端,以便用戶登錄系統(tǒng)。
在 inittab 中的以下6行就是定義了6個(gè)終端:
1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6
從上面可以看出在2、3、4、5的運(yùn)行級別中都將以 respawn 方式運(yùn)行 mingetty 程序。
mingetty 程序能打開終端、設(shè)置模式,同時(shí)它會顯示一個(gè)文本登錄界面,這個(gè)界面就是我們經(jīng)常看到的登錄界面,在界面中會提示用戶輸入用戶名,而用戶輸入的用戶將作為參數(shù)傳給 login 程序來驗(yàn)證用戶的身份。
【用戶登錄系統(tǒng)】
一般來說,用戶的登錄方式有三種:
命令行登錄SSH(Secure Shell)登錄圖形界面登錄
對于運(yùn)行級別為5的圖形方式用戶來說,登錄是通過一個(gè)圖形化的登錄界面,登錄成功后可以直接進(jìn)入 KDE、Gnome 等窗口管理器。
對于以文本方式登錄的情況:當(dāng)我們看到 mingetty 的登錄界面時(shí),就可以輸入用戶名和密碼來登錄系統(tǒng)。Linux 的賬號驗(yàn)證程序是 login,login 會接收 mingetty 傳來的用戶名作為用戶名參數(shù),然后 login 會對用戶名進(jìn)行分析,如果用戶名不是 root,且存在 /etc/nologin 文件,login 將輸出 nologin 文件的內(nèi)容,然后退出。
以文本方式登錄通常用于系統(tǒng)維護(hù)時(shí)防止 非root用戶 登錄,只有在 /etc/securetty 中登記了的終端才允許 root用戶 登錄,如果不存在這個(gè)文件,則 root用戶 可以在任何終端上登錄。
【圖形模式與文字模式的切換方式】
Linux預(yù)設(shè)提供了六個(gè)命令窗口終端機(jī)用于登錄。
這個(gè)六個(gè)窗口分別為 tty1,tty2 … tty6,可以按下 Ctrl + Alt + F1 ~ F6 來切換,默認(rèn)登錄的就是第一個(gè)窗口,也就是 tty1。
如果安裝了圖形界面,默認(rèn)情況下是直接進(jìn)入圖形界面,此時(shí)可以按 Ctrl + Alt + F1 ~ F6 來進(jìn)入其中一個(gè)命令窗口界面,當(dāng)進(jìn)入命令窗口界面后再返回圖形界面只要按下 Ctrl + Alt + F7 就可以返回。
如果你用的 VMware虛擬機(jī),命令窗口切換的快捷鍵為 Alt + Space + F1~F6,如果在圖形界面下按 Alt + Shift + Ctrl + F1~F6 來切換至命令窗口。
【關(guān)機(jī)】
Linux 大多用在服務(wù)器上,很少遇到關(guān)機(jī)的操作,因?yàn)樵诜?wù)器上跑一個(gè)服務(wù)是永無止境的,除非特殊情況下不得已才關(guān)機(jī)。
正確的關(guān)機(jī)流程為:sync > shutdown > reboot > halt
關(guān)機(jī)指令為:shutdown (具體的可以用 man shutdown 來看幫助文檔)
例如可以運(yùn)行如下命令關(guān)機(jī):
sync 將數(shù)據(jù)由內(nèi)存同步到硬盤中。 shutdown –h 10 ‘This server will shutdown after 10 mins’ 這個(gè)命令告訴大家,計(jì)算機(jī)將在10分鐘后關(guān)機(jī),并且會顯示在登陸用戶的當(dāng)前屏幕中。 Shutdown –h now 立馬關(guān)機(jī) Shutdown –h 20:25 系統(tǒng)會在今天20:25關(guān)機(jī) Shutdown –h +10 十分鐘后關(guān)機(jī) Shutdown –r now 系統(tǒng)立馬重啟 Shutdown –r +10 系統(tǒng)十分鐘后重啟 reboot 就是重啟,等同于 shutdown –r now halt 關(guān)閉系統(tǒng),等同于shutdown –h now 和 poweroff
注:
無論是重啟系統(tǒng)還是關(guān)閉系統(tǒng),首先都要運(yùn)行 sync 命令,將內(nèi)存中的數(shù)據(jù)寫到磁盤中。常用的關(guān)機(jī)命令有 shutdown –h now halt poweroff 和 init 0?常用的重啟命令有 shutdown –r now reboot init 6