詳解: http://blog.chinaunix.net/uid-23036581-id-2230525.html
一、簡單介紹RHEL開機時的先后順序
BIOS —> MBR —> Kernel —> init
1、當電腦一打開電源時電腦就會進入BIOS(BIOS的工作主要是檢測一些硬件設備);
2、檢測完后會進入MBR也就是boot loader(MBR位於硬盤的第一個扇區總共512bytes,其中前446bytes里面的編碼是在選擇引導分區也就是決定要由哪個分區來引導);
3、載入系統的Kernel(核心),在Kernel里主要是載入電腦設備的驅動程序,以便可以控制電腦上的設備,並且以只讀方式來掛載根目錄,也就是一開始只能讀取到根目錄所對應的那個分區,所以/etc、/bin、/sbin、/dev、/lib這五個目錄必須同根目錄在一個分區中;
4、最后啟動init這個程序,所以init這個程序的進程編號為1,是Linux中第一個執行的程序;
init這個程序會根據 Run level來執行以下這些程序:
·/etc/rc.d/rc.sysinit;
·/etc/rc.d/rc 和 etc/rc.d/rc?.d/
·/etc/rc.d/rc.local
·如果有適當的圖形界面管理程序
二、BIOS初始化時主要的三個任務
BIOS(Basic Input/Output System)
1、電腦周邊設備的檢測,加電自檢 POST (Power on self test);
2、BIOS會選擇要由哪一個設備來開機,例如:軟盤啟動、光盤啟動、網絡啟動、最常見的從硬盤啟動;
3、選擇好由哪個設備開機后,就開始讀取這個設備的 MBR 引導扇區;
三、介紹Boot Loader中的主要工作
1、Boot Loader可以安裝在兩個地方:
· 安裝在硬盤的MBR中;
· 當有時候MBR中被其他開機管理程序占用就可以將 Boot Loader 安裝在硬盤中的其中一個分區的引導扇區上,;
2、Boot Loader的程序碼分為兩個階段:
(1)Boot Loader第一階段的程序碼非常小,只有446bytes,可以存入在MBR或是某一個分區的引導扇區里,
(2)Boot Loader第一階段的程序碼是從 boot 分區來載入的,就是說 Boot Loader 第二階段程序碼存放在 /boot 這個分區中;
3、下面來看三個Boot Loader 的開機流程范例,如在一塊硬盤中安裝了兩個系統分別為:windows 2003 和 Red hat linux
當電腦開機后,會先載入MBR通過第一階段程序碼來載入第二階段程序碼,進入GRUB開機菜單這里選擇哪個系統就會載入相應的核心;

四、介紹GRUB和grub.conf 這個配置文件的內容
其實從MBR載入Boot Loader開始,載入Kernel,載入init這些程序之間都是由GRUB這個多重開機管理程序所負責的。
1、GRUB (GRand Unified Bootloader)擁有以下特性:
· GRUB的開機管理程序可以在開機提示字元的界面下輸入指令;例如在GRUB界面下可以按C鍵就會來到以 grub> 開頭的提示符來輸入據指令;
· GRUB的開機管理程序可以支持以下幾種文件系統:ext2/ext3、ReiserFS、JFS、FAT、minix、FFS 等等;
· 支持MD5的密碼來保護GRUB的配置文件;
2、/boot/grub/grub.conf 這個配置文件是GRUB 的配置文件,在做修改前推薦先做好備份
下面來介紹這個配置文件的內容以及里面的語法:
· 以#開頭的行為注解執行時不會使用;
· 可以以title開頭的一行為准,分為上下兩部分:
(1)基本設定:
| default=0 指預設使用第一組title的系統記錄開機,如果有多個title表示有多重啟動,如果預設要使用第二組系統開機就將此值設為1 |
(2)用於區分多個系統的設定,如果這台主機中還安裝了其它系統並設定了多重啟動,在這里還可以看到其它系統的設定;
| title Red Hat Enterprise Linux AS (2.6.9-11.EL) 在GRUB開機菜單中所顯示的開機的系統名稱 |
3、如果我們修改完 grub.conf 這個配置文件后,設定為立即生效;
4、另外,如果硬盤上的MBR被清除掉了,可使用下面的指令來重新安裝 boot loader 到MBR中:
/sbin/grub-install /dev/hda
5、介紹進入GRUB的開機管理程式可以做哪些動作(開機前改Kernel的參數)
(1)開機后在進入GRUB界面后,先選擇要使用的系統(這里選擇Linux)
(2)按下a鍵,可以在開機修改Kernel的參數,也就是可以傳一個參數給Kernel;這時可以看到下面這個界面
(3)上圖中 root=LABEL=/ 這部分不可以動,將后面的都去掉后,先輸入一個空格再輸入一個1,如下圖:
這個1 就是附加的一個參數,表示要進入單用戶模式,不需要輸入root密碼就可以以root身份登錄;
(4)當進入到#提示字元時,就可以設定root 密碼了。
這時會發現一個問題任何人到主機前都可以通過這種方式修改ROOT密碼是很不安全的。
6、為GRUB進入單用戶模式設定密碼及加密方法:
在GRUB的設定檔中設定密碼,以防止非法者以單用戶模式進入。
(1)編輯grub.conf配置文件,在基本設定的部分里,插入一行 password 123456 來設定密碼,這里是將密碼設定為 123456 。
(2)當重新開機后,在GRUB的菜單中,需要輸入 P ,再輸入密碼才可以進行下一步,選擇其它的模式。
(3)可以發現上面設定的密碼是明文的,在GRUB中是可以對這個密碼進行加密的,如下圖:
注:grub-md5-crypt這個指令在設定一個加密的密碼的時候,就算每次輸入的密碼相同經加密后也是不同的,所以上面的幾組密碼都不一樣,grub-md5-crypt >> /boot/grub/grub.conf 這行指令在執行后不會你上面那樣會提示出輸入兩次密碼,雖然沒有提示但還是可以輸入的,每輸入一次密碼按一次回車,等設定好密碼后,再打開grub.conf文件時,就會發現經過加密的密碼就追加到了grub.conf文件中去了,將追加文件中的前二行去掉,第三行就是要使用的密碼了,然后就像上圖中那樣進行設定,等上面的設定好后,一定要刪除掉最后三行的內容,不然會出錯的。
password –-md5 這里面的md5 表示后 面使用的密碼是經過md5加密的。
7、在進入系統前,按E鍵進入命令編輯模式,來修改引導配置文件
在GRUB菜單選擇時,按"e"鍵,就可以看到所對應系統的三行grub.conf中的配置參數,選擇有錯誤的一行,再按"e"鍵,可修改這一行:
如下圖:選擇了第二行,按E鍵,就可以修改這行內容了,這里只是未了舉例子,將正常啟動的一行改為了要使用單用戶模式啟動,修改完成后按回車,返回上一界面,再按"b"鍵,使用編輯后的設定開機。
五、介紹Kernel初始化時所做的工作
Kernel在開機時,有以下四項工作:
1、檢測電腦上的硬件設備;
2、將檢測到的硬件驅動程序載入Kernel;
3、如果必要的驅動載入后 Kernel 將根目錄以只讀方式掛載進來;
4、Kernel載入第一個程序 init 這個程序;
六、介紹 init 這個程序在初始化時做了哪些工作
init 程序讀取的是 /etc/inittab 這個配置文件來決定要做哪些操作
1、決定預設要使用哪個 Run Level 下面介紹幾個常用的(Run Level 將在下節做詳細介紹)
Run Level 可以從 0 到 6 分為7種
· run level 1 :單用戶模式,主要用來維護系統,這在前面已經使用過了;
· run level 3 :會啟用完整的服務但登錄后進入文字模式;
· run level 5 :啟用完整的服務登錄后進入圖形界面模式;
注:在 inittab 的配置文件里 id:5:initdefault: 這項 initdefault 的前面設定為5 表示預設會用 run level 5,也就是默認啟用完整服務並進入圖形界面模式。
2、init 會執行初始作業系統的程序
3、init會根據執行的 run level 來執行 run level 對應目錄里面的程序,如果 inittab 配置文件里預設的 run level 是5,那么就會把5的參數傳給 /etc/rc.d/rc 這個程序執行,在/etc/rc.d目錄下就可以看到 rc0.d 至 rc6.d 七個目錄 run level 所對應的目錄,所以init 程序會根據執行的 run level 來執行 run level 對應目錄里面的程序,來決定要啟用哪些服務。
4、設某個組合鍵,如下圖:定義快捷鍵,按這三個組合鍵3秒后重啟系統
6、在定義UPS不斷電系統,當電源發生問題時,以及電源恢復時都要執行哪些程序。
6、產生六個 virtual consoles (虛擬控制台)(tty1~tty6)
7、如果啟動的是 run level 5 ,初始化工作就會啟動 X11(圖形界面)
七、iniit初始化流程圖
以下小節將依據上面的流程圖為准逐一介紹
八、介紹 Run Level (init初始化流程第一步)
其中在 Run Level 里除了0~6這七種外,還有 S 和 emergency 這兩種
| Run Level | 功能 |
| 0 | 用來做關機用的(不可以設在initdefault里) |
| 1,S,emergency | 單用戶模式(只允許root帳號登錄,主要是用來做維護系統工作) |
| 2 | 可以允許所有使用者登錄,但不啟用網絡功能 |
| 3 | 允許所有使用者登錄,擁有完整的功能,但是以文字模式進入系統 |
| 4 | 用戶可自定義的,預設下與Run level 3是相同的 |
| 5 | 與 Run level 3 功能是一樣的,允許所有使用者登錄,擁有完整功能,以圖形界面模式進入系統 |
| 6 | 用於重啟主機(不可以設在initdefault里) |
Run Level 1,S,emergency 這三種執行時的主要差別在於執行程序的多少:
· 1 :執行init程序后,會接着執行/etc/rc.sysinit程序來初始化系統,再執行 /etc/rc1.d/目錄下的所有程序;
· S:執行init程序后,只會執行/etc/rc.sysinit 程序來初始化系統;
· emergency:執行init程序后,只會執行 /etc/rc.sysinit 程序中某些必要的程序,並不會全部執行;
1、介紹一些Run level 的特性
Run level 是使用 init 這個指令來定義要使用哪個 run level。
2、下面有三種方式可以選擇要使用哪個 Run level
(1)在開機時,預設 run level會設定在 /etc/inittab 這個文件中,例如:initdefault 前面的值;
(2)可以從 boot loader 傳一個參數給 kernel (例如:在GRUB的引導菜單按“a”鍵,在開機前可以給kernel傳一個參數以單用戶模式登錄系統)
(3)在開機進入 Linux 系統后,可以使用 init 指令,再輸入要進入哪個run level ;(例如:init 5 進入run level 5)
3、使用 runlevel 指令執行后,就可以在下面顯示當前在哪個級別下;
/sbin/runlevel
九、介紹 /etc/rc.d/rc.sysinit 這個程序主要做哪些工作(init初始化流程第二步)
rc.sysinit 這個文件是一個腳本文件,主要是一些判斷程序,還有一些設定變數的程式;
rc.sysinit 這個文件的工作如下:
1、啟動 udev ,也就是啟用熱插拔的設備,例如:USB,並且也會啟動SELinux;
2、會把kernel的參數設定在/etc/sysctl.conf配置文件里;這個配置文件下下單元詳細說明;
3、設定系統時間;
4、載入 keymaps 設定,keymap設定是在定義鍵盤,這樣電腦開機時才能找到相對應的鍵盤設定;
5、啟用swap這個虛擬內存的分區;
6、設定主機名稱,主機名稱設定在 /etc/sysconfig/network 配置文件中的 HOSTNAME= 項下;
7、 檢查根目錄有沒有問題,並且重新掛載成為可讀可寫的狀態;
8、啟用RAID磁盤陣列,以及LVM的設備;
9、啟用磁盤配額的功能,就是限制使用者最多可以使用多少硬盤空間;
10、檢查其它的文件系統,並且把它們掛載進來;
11、最后會清除被修改過的locks及PID files,其實就是清除一些開機時的緩存文件,以及一些沒有用的信息及文件;
十、介紹 /etc/rc.d/rc 這個程式的作用
1、這個步驟就是根據載入的 Run Level 來執行 Run Level 對應目當里面的程序來決定要啟用哪些服務,例如,如果 Run level 的值是5,就會去執行 /etc/rc.d/rc5.d/* 這個目錄下的所有程序,來停用或啟動這個運行級別下應該有的服務,如下圖:
就用rc5.d這個目錄來作說明,可以看到這個目錄下都是一些鏈接文件,所有的鏈接文件都鏈接到了 ../init.d/* 這個目錄下的某個執行文件,其實init.d和rc5.d后面的d是代表 Daemon(【unix】新進程;端口監督[控]程序) 的意思。
十一、介紹 Daemon Processes (Process進程)
1、Daemon Processes就是在后台執行的程序,主要功能就是在提供一些系統的服務,所以在 init.d 目錄里的所有程序全部都是在后台執行提供系統服務的程序,而這些在后台執行提供系統服務的程序都是在等待別人提出需求來提供服務,例如:httpd 這個程序就是提供 web 的服務,主要是會開啟80端口,讓別人可以通過80端口連接進來。
2、Daemon 主要分為兩種類型,主要差別在於提供服務的方式,說明如下:
(1)Standalone(中文翻譯為:獨立):在Standalone的程序里,當使用者提出需求要求服務時,會自己提供服務組使用者;
(2)Transient(中文翻譯為:暫時程序,暫存區):當使用者提出需求時,會先跟xinetd(以稱為:Supper Daemon)這個Daemon程序要求服務,然后xinetd程序再去呼叫 Transient 類型的程序,最后 Transient 類型的程序才能夠提供服務給使用者;
3、在Standalone的Daemon里分為兩種:
(1)在開機時,就由 init 這個程序直接啟動的;
例如:Virtual Console;
(2)System V Daemon程式
例如:httpd程序(提供web服務的);
十二、介紹 System V 程式的特性
1、其實 Run Level 是在定義電腦啟動時,要提供哪些服務:
· 在每個runlevel 里都有他相對應的目錄;就像前面提到的 rc5.d 的目錄;
· 而用來初始化System V的程序都存放在 /etc/rc.d/init.d/ 這個目錄里;
2、介紹 runlevel 是如何定義要提供哪些服務的。
因為在runlevel對應的目錄里,都有一些連接,而這些鏈接就是用來呼叫init.d目錄里的程序的,並夾代一個啟動或停止服務的參數,所以根據 runlevel 對應目錄里的鏈接,就可以設定系統在啟動后要提供哪些服務。
3、下面介紹前面提到的那個鏈接文件名稱的格式:
這個鏈接文件的名稱主要分為三區:
(1) 以K或S開頭:K ( Kill 的縮寫)開頭,表示要停用鏈接的這個服務;S (start 的縮寫)開頭,表示要啟用鏈接的這個服務;
(2) 為兩位的數字:表示執行的先后順序,數字越小的越先執行,但是在 K 與 S 執行的先后順序是先執行 K 停用鏈接的服務,再執行 S 啟用鏈接的服務,這是因為要先將所有服務停用類似歸零的意思,然后再啟用服務,所以執行完這些鏈接的程序,就初始化了系統上的服務;
(3) 鏈接的System V 程序名稱:
4、另外,System V 程序有種特性,就是啟動和停止都用同一個程序,只是后面加上不同的參數:
例:/etc/init.d/httpd start 啟用web服務
/etc/init.d/httpd stop 停用web服務
這里的 start , stop 就是使用的參數
十三、介紹 /etc/rc.d/rc.local 這個程式的作用(init初始化流程第三步)
1、在執行完 run level 下相對應的那個目錄里的鏈接后都會執行 rc.local 這個程式;如下圖: run level2到5下都有這個程式:
其中 S 表示啟用,99表示執行的順序最后才會執行,執行的程式就是 rc.local;
2、因此,可以修改 rc.local 這個文件,將 runlevel2-5都要執行的指令或程序設定在rc.local文件中。
十四、介紹 Virtual Consoles 的特性(init初始化流程第四步)
Virtual consoles,Virtual consoles具有以下幾點特性:
1、定義在 /etc/inittab 檔案里,使用/sbin/mingetty 來產生 tty1 到 tty6 這六個Virtual consoles;
2、如果要切換 Virtual consoles ,同時按下 ctrl-alt-F(1~6)
3、Virtual consoles的檔案是在 /dev/這個目錄中,對應的文件是 tty1、tty2、tty3、tty4、tty5、tty6;但這個目錄下有許多以tty開頭的文件
4、/dev/tty0 是代表當前使用的Virtual consoles
5、在RHEL中有以下三個預設的Virtual consoles設定:
· RHEL中共定義了12個Virtual consoles;
· 在這12個Virtual consoles里,只有1~6的可以登錄
· 如果使用圖形界面登錄,剛會先使用Virtual consoles 7 登錄(也就是tty7)
注:當圖形界面已啟動時,才可以使用 ctrl-alt-F7 才能切換回到圖形界面。
十五、如何控制系統上服務的停止與啟動
在控制系統的服務停止與啟動里,主要分為兩種類型的工具
1、控制系統預設是會自動啟動的服務;
有以下三種工具可以控制 Linux 作業系統,預設會自動啟動的服務:
(1)ntsysv:這個工具在Virtual consoles下也可以使用,此命令執行后出現的界面,如下圖:可以啟動Services界面來設定系統預設要啟動哪些服務,如果在ntsysv后面未加參數,只會設定目前這個Run level ,如果要設定其它的 run level ,需要在后面加參數:
例如: ntsysv –level 35 指定要修改 runlevel 3和5預設要啟動的服務
注:這個指令在文字模式下也是可以使用的。
(2)chkconfig:這個工具可以快速設定,並且適用在各種Linux下的命令行模式工具
例如:如下圖:查看預設自動啟動的設定 注:下面的 gpm 的服務是在 Virtual consoles下可以使用鼠標的服務,通過下圖可以看到gpm 服務在runlevel2~5下都以以S開頭,也是是預設會自動啟動的意思;
執行下面的指令,可以讓runlevel1~3預設不自動啟動gpm的服務,如下圖可以看到原來的2和3原來是以S開頭的現在已經變成了以K開頭,表示預設是停有的。
可以使用chkconfig –list 查看某個服務預設是否會自動啟動,如下圖:off 表示不啟用,on表示啟用,如果想查看所有的服務可以將gpm去掉,這時會看到許多服務的列表,
(3)system-config-services
這個工具是圖形界面的工具,只能在圖形界面下執行,開啟視窗后,左邊窗口可以勾選預設要啟動的服務;點選 Edit Runlevel 可以選擇要修改哪個級別的預設服務,但只能設定3~5的,如下圖:
2、在系統開機后,可以手動控制服務的停止與啟動,立即控制服務的啟動狀態;
有以下三個工具可以手動控制服務的啟動與停止:
(1)service :這個工具可以立即啟動或停用standalone類型的服務;
在文字模式下如果啟用了鼠標功能,使用鼠標選中文字點后,按鼠標的中鍵就可以將選中的文字粘貼到光標所在處,這樣很方便選中一些文字,現在來停用 gpm 這個服務,指令如下:
· service gpm stop 停用gpm服務 (這種方法不一定支持所有的Linux版本)
· /etc/init.d/gpm stop 立即停用gpm服務 (推薦使用絕對路徑的方法來執行這個指令:這種方法支持所有Linux版本)
· /etc/init.d/gpm start 立即開啟gpm服務
· /etc/init.d/gpm reload 立即重啟服務
· /etc/init.d/gpm restart 立即重啟服務
· /etc/init.d/gpm status 顯示服務啟用狀態
(2)chkconfig:這個工具可以立即啟動或停用xinetd程式所管理的服務
例如:chkconfig telnet off 停用telnet服務;
chkconfig telnet on 啟用telnet服務;
(3)system-config-services
圖形界面工具,選擇服務,再點 start(啟用) 或 stop(停止) 或 restart(重啟)。
十六、介紹使用指令關機
有四個指令可以用來關機
1、shutdown –h now h是halt(終止的意思),now 是參數表示立即,也可輸入時間例如:13:22 表示下午1點22分關機
2、halt
3、power off
4、init 0 進入runlevel 0級做關機動作;
注:這四個指令在關機前都會執行 sync 這個指令,進行資料的同步,將內存中的數據寫入硬盤中,以免將記憶體中的資料丟失。
十七、介紹使用指令重啟電腦
1、shutdown –r now -r 就是reboot(重新啟動)的意思,這里的now也可以換成時間
2、reboot
3、init 6
6、ctrl-alt-del (在virtual Console環境中使用)
