怎樣啟動linux
Ⅰ Linux鎿嶄綔緋葷粺鐨勫惎鍔ㄦラよ︾粏璇存槑
1銆佽誨彇MBR鐨勪俊鎮錛屽惎鍔˙oot Manager
Windows浣跨敤NTLDR浣滀負Boot Manager錛屽傛灉鎮ㄧ殑緋葷粺涓瀹夎呭氫釜鐗堟湰鐨刉indows錛屾偍灝遍渶瑕佸湪NTLDR涓閫夋嫨鎮ㄨ佽繘鍏ョ殑緋葷粺銆
Linux閫氬父浣跨敤鍔熻兘寮哄ぇ錛岄厤緗鐏墊椿鐨凣RUB浣滀負Boot Manager錛屾垜浠灝嗗湪鍚鍔ㄧ$悊絝犺妭涓鍚戞偍浠嬬粛瀹冪殑浣跨敤鏂瑰紡銆
2銆佸姞杞界郴緇熷唴鏍革紝鍚鍔╥nit榪涚▼
init榪涚▼鏄疞inux鐨勬牴榪涚▼錛屾墍鏈夌殑緋葷粺榪涚▼閮芥槸瀹冪殑瀛愯繘紼嬨
3銆乮nit榪涚▼璇誨彇鈥/etc/inittab鈥濇枃浠朵腑鐨勪俊鎮錛屽苟榪涘叆棰勮劇殑榪愯岀駭鍒錛屾寜欏哄簭榪愯岃ヨ繍琛岀駭鍒瀵瑰簲鏂囦歡澶逛笅鐨勮剼鏈銆傝剼鏈閫氬父浠モ渟tart鈥濆弬鏁板惎鍔錛屽苟鎸囧悜涓涓緋葷粺涓鐨勭▼搴忋
閫氬父鎯呭喌涓嬶紝鈥/etc/rcS.d/鈥濈洰褰曚笅鐨勫惎鍔ㄨ剼鏈棣栧厛琚鎵ц岋紝鐒跺悗鏄鈥/etc/rcN.d/鈥濈洰褰曘備緥濡傛偍璁懼畾鐨勮繍琛岀駭鍒涓3,閭d箞瀹冨瑰簲鐨勫惎鍔ㄧ洰褰曚負鈥/etc/rc3.d/鈥濄
4銆佹牴鎹鈥/etc/rcS.d/鈥濇枃浠跺す涓瀵瑰簲鐨勮剼鏈鍚鍔╔window鏈嶅姟鍣ㄢ渪org鈥
Xwindow涓篖inux涓嬬殑鍥懼艦鐢ㄦ埛鐣岄潰緋葷粺銆
5銆佸惎鍔ㄧ櫥褰曠$悊鍣錛岀瓑寰呯敤鎴風櫥褰
Ubuntu緋葷粺榛樿や嬌鐢℅DM浣滀負鐧誨綍綆$悊鍣錛屾偍鍦ㄧ櫥褰曠$悊鍣ㄧ晫闈涓杈撳叆鐢ㄦ埛鍚嶅拰瀵嗙爜鍚庯紝渚垮彲浠ョ櫥褰曠郴緇熴 (鎮ㄥ彲浠ュ湪鈥/etc/rc3.d/鈥濇枃浠跺す涓鎵懼埌涓涓鍚嶄負鈥淪13gdm鈥濈殑閾炬帴)
濡傛灉鎯砋buntu鍦ㄦ瘡嬈″惎鍔ㄥ埌command prompt 錛屽彲浠ヨ緭鍏ヤ互涓嬫寚浠:
$echo 鈥渇alse鈥 | sudo tee /etc/X11/default-display-manager
褰撲笅嬈″紑鏈烘椂錛屽氨浼氫互鎸囦護妯″紡鍚鍔錛屽傛灉鎯沖彉鍥炲惎鍔▁ window錛屽彲浠ヨ緭鍏:
$echo 鈥/usr/bin/gdm鈥 | sudo tee /etc/X11/default-display-manager
Ⅱ 解析Linux系統啟動的引導流程
LINUX是自由開源軟體,在LINUX里一切都是文件,不管是命令,操作等等都是以文件形式保存,這篇博客來記錄LINUX啟動時的引導流程是通過哪寫文件來完成的.
使用的LINUX版本是CentOS5,CentOS和Ubuntu都是自己聯系使用時的較理想版本.
下面以CentOS5.5版本為例,介紹LINUX的引導流程,具體流程如下:
下面詳細介紹每一步:
1)第一步firmware固件自檢,主要是進行CMOS/BIOS對硬體進行POST加電自檢,在物理層次上對硬體進行檢測是否正常。例如檢查硬碟是否插好等。
2)第二步讀取硬碟中MBR的BootLoader,自啟動程序,Linux下常用的自啟動程序是GRUB。這一步主要的功能是載入內核。內核存放在/boot目錄下
3)第三步就是載入的內核Kernel的過程,
主要功能是:1、驅動硬體,Kernel中含有大量驅動程序。2、啟動init進程。
4)init進程,主要是讀取/etc/inittab文件,執行預設運行級別,從而繼續引導。需要注意的是init京城的PID恆為1,是所有進程的父進程,而init進程的負景程是0,為內核調度器Kernel scheler。
5)/etc/inittab 定義了初始化的操作。
命令主要格式是:id: runlevels : action : process
其中,如上圖紅框中所示
1、run-levels運行級別有7個,0—6分別如下:
0 —— halt 關機
1 —— Single user mode 單用戶模式
2 —— Multiuser,withoutNFS 多用戶模式但不帶網路(text模式)
3 —— Full multiuser mode 完整功能的多用戶模式(text模式)
4 —— unused 預留
5 —— X11 圖形化多用戶模式
6 —— reboot 重啟
可以根據這7個運行級別來進行切換
命令為:查看當前運行級別 #runlevel、 切換運行級別 #init[0 |1 |2 |3 |4 |5 |6]
2、而acion中也有幾個比較重要的取值:
1 initdefault:指定系統預設啟動的運行級別,如上圖中標出,通常用於修復,比如我們要進入單用戶模式,則可以將其設置為1,不可將默認設置為0或6,否則無法啟動.
2sysinit:系統啟動執行process中指定的命令
由inittab文件內容可以看出,沒有設置運行級別,即為無論是哪個運行級別,都會執行/etc/rc.d/rc.sysinit
6)initdefault,如第五步所說到的,主要是讀取/etc/inittab中的信息,判斷預設的運行級別是什麼。
7)/etc/rc.d/rc.sysinit
在inittab文件中運行到第21行,變是啟動這個腳本。完成系統服務程序的啟動,如系統環境變數的設置、設置系統時鍾、載入字體、檢查載入文件系統、生成系統啟動信息日誌文件等。由於是基礎服務,因為其run-level設置為空::即任何級別,action設置為sysinit。即該腳本在任何運行級別下都要啟動,以完成基礎服務的啟動
8)基礎服務啟動後,會執行/etc/rc.d/rc這個腳本
載入完基礎服務後,就要根據不同的運行級別去啟動相對應的下的目錄,它的工作原理是先去判斷系統的默認運行級別即第6步中的東西,然後再執行相應的rcN.d目錄下的服務啟動腳本如圖
9)執行/etc/rc.d/rcN.d目錄下的服務啟動腳本
看下該目錄下的內容:
其中S表示要啟動的腳本,K表示要關閉的腳本
數字表示啟動順序,數值小的優先.主要是對一些服務的管理
在這一步里,需要說明一下/etc/rc.d/init.d這個目錄,這個目錄里放的腳本是真正的腳本,而rcN.d里放置的都是init.d目錄里的軟連接,也就是說所有rcN.d里的文件最終都需要來init.d里找真正的腳本
看一下具體細節:
執行到這一步,界面就會提示輸入用戶名和密碼了,也就是說系統已經起來了,輸入用戶名和密碼的過程後面再說,這次的引導流程就結束了
最後需要說明的是,LINUX的引導流程的思想大致相同,但細節因為版本的問題,在配置文件的名字或者是位置都不盡相同,此次我用的是CentOS版本,而Ubuntu版本是沒有inittab文件和grup.conf文件的,所以如果有興趣,大家可以按照這種思路去探索探索.
PS:關於GRUB
GNU GRUB(簡稱「GRUB」)是一個來自GNU項目的啟動引導程序。GRUB是多啟動規范的實現,它允許用戶可以在計算機內同時擁有多個操作系統,並在計算機啟動時選擇希望運行的操作系統。GRUB可用於選擇操作系統分區上的不同內核,也可用於向這些內核傳遞啟動參數。
GNU GRUB的前身為Grand Unified Bootloader。它主要用於類Unix系統;同大多Linux發行版一樣,GNU系統也採用GNU GRUB作為它的啟動器。Solaris從10 1/06版開始在x86系統上也採用GNU GRUB作為啟動器。
GRUB可動態配置;它在啟動時載入配置信息,並允許在啟動時修改,如選擇不同的內核和initrd。為此目的,GRUB提供了一個簡單的類似Bash的命令行界面,它允許用戶編寫新的啟動順序。
GRUB非常輕便。它支持多種可執行格式;它除了可適用於支持多啟動的操作系統外,還通過鏈式啟動功能支持諸如Windows和OS/2之類的不支持多啟動的操作系統。GRUB支持所有的Unix文件系統,也支持Windows適用的FAT和NTFS文件系統,還支持LBA模式。GRUB允許用戶查看它支持的文件系統里文件的內容。
GRUB具有多種用戶界面。多數Linux發行版利用GRUB對圖形界面的支持,提供了定製的帶有背景圖案的啟動菜單,有時也支持滑鼠。通過對GRUB的文字界面的設定,可以通過串口實現遠程終端啟動。
GRUB可以從網路上下載操作系統鏡像,因此可以支持無盤系統。GRUB支持在啟動操作系統前解壓它的鏡像。
與其它啟動器不同,GRUB可以通過GRUB提示符直接與用戶進行交互。載入操作系統前,在GRUB文本模式屏幕下鍵入c鍵可以進入GRUB命令行。在沒有作業系統或者有作業系統而沒有"menu.lst"文件的系統上,同樣可以進入GRUB提示符。通過類似bash的命令,GRUB提示符允許用戶手工啟動任何操作系統。把合適的命令記錄在"menu.lst"文件里,可以自動啟動一個操作系統。
GRUB擁有豐富的終端命令,在命令行下使用這些命令,用戶可以查看硬碟分區的細節,修改分區設置,臨時重新映射磁碟順序,從任何用戶定義的配置文件啟動,以及查看GRUB所支持的文件系統上的其它啟動器的配置。因此,即便不知道一台電腦上安裝了什麼,也可以從外部設備啟動一個操作系統。
GRUB採用滾動屏幕選擇想要啟動的操作系統。通過向"menu.lst"文件中添加相關信息,GRUB可以控制150或者更多的啟動選項,在啟動時用方向鍵進行選擇。
通過鏈式啟動,一個啟動器可以啟動另一個啟動器。GRUB通過2到3行的命令就可以從DOS、Windows、Linux、BSD和Solaris系統啟動。
盡管GRUB為類Unix系統進行了編譯和打包,但也有供DOS和Windows使用的GRUB。GRUB也可以不附帶任何操作系統而作為孤立系統安裝。從CD上啟動時運用GRUB需要1個文件,而從軟盤、硬碟和USB設備上啟動時需要2個文件。這些文件可以在任何支持GRUB的Linux CD上找到,用戶可以很容易的找到它們。
Ⅲ LINUX操作系統的啟動過程
一、啟動內核
首先介紹啟動內核部分。電腦啟動時,BIOS裝載MBR,然後從當前活動分區啟動,LILO獲得引
導過程的控制權後,會顯示LILO提示符。此時如果用戶不進行任何操作,LILO將在等待制定
時間後自動引導默認的操作系統,而如果在此期間按下TAB鍵,則可以看到一個可引導的操作
系統列表,選擇相應的操作系統名稱就能進入相應的操作系統。
當用戶選擇啟動LINUX操作系統時,LILO就會根據事先設置好的信息從ROOT文件系統所在的分
區讀取LINUX映象,然後裝入內核映象並將控制權交給LINUX內核。LINUX內核獲得控制權後,
以如下步驟繼續引導系統:
1. LINUX內核一般是壓縮保存的,因此,它首先要進行自身的解壓縮。內核映象前面的一些
代碼完成解壓縮。
2. 如果系統中安裝有可支持特殊文本模式的、且LINUX可識別的SVGA卡,LINUX會提示用戶
選擇適當的文本顯示模式。但如果在內核的編譯過程中預先設置了文本模式,則不會提示選
擇顯示模式。該顯示模式可通過LILO或RDEV工具程序設置。
3. 內核接下來檢測其他的硬體設備,例如硬碟、軟盤和網卡等,並對相應的設備驅動程序
進行配置。這時,顯示器上出現內核運行輸出的一些硬體信息。
4. 接下來,內核裝載ROOT文件系統。ROOT文件系統的位置可在編譯內核時指定,也可通過
LILO或RDEV指定。文件系統的類型可自動檢測。如果由於某些原因裝載失敗,則內核啟動
失敗,最終會終止系統。
二、執行init程序
其次介紹init程序,利用init程序可以方便地定製啟動其間裝入哪些程序。init的任務是
啟動新進程和退出時重新啟動其它進程。例如,在大多數Linux系統中,啟動時最初裝入
六個虛擬的控制台進程,退出控制台窗口時,進程死亡,然後init啟動新的虛擬登錄控制台,
因而總是提供六個虛擬登陸控控制台進程。
控制init程序操作的規則存放在文件/etc/inittab中。Red Hat Linux預設的inittab文
件如下:
#
#inittab This file describes how the INIT process should set up the system in a certain
#run-level.
#
#
#Default runlevel.The runlevels used by RHS are:
#0-halt(Do NOT set initdefault to this)
#1-Single user mode
#2-Multiuser,without NFS(the same as 3,if you do not have networking)
#3-Full multiuser mode
#4-unused
#5-X11
#6-reboot(Do NOT set initdefault to this)
#
id:3:initdefault:
#system initialization
si::sysinit:/etc/rc.d/rc.sysinit
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
#Things to run in every runlevel
ud:once:/sbin/update
#Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#When our UPS tells us power has failed,assume we have a few minutes of
power left.Schele a
#shutdown for 2 minutes from now.
#This does,of course,assume you have powered installed and your UPS
connected and working
#correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Restored;Shutdown Cancelled"
#Run gettys in standard runlevels
1:12345:respawn:/sbin/minggetty tty1
2:2345:respawn:/sbin/minggetty tty2
3:2345:respawn:/sbin/minggetty tty3
4:2345:respawn:/sbin/minggetty tty4
5:2345:respawn:/sbin/minggetty tty5
6:2345:respawn:/sbin/minggetty tty6
#Run xdm in runlevel 5
x:5:respawn:/usr/bin/X11/xdm -nodaemon
Linux有個運行級系統,運行級是表示系統當前狀態和init應運行哪個進程並保持在這種
系統狀態中運行的數字。在inittab文件中,第一個項目指定啟動時裝入的預設運行級。
上例中是個多用戶控制台方式,運行級為3。然後,inittab文件中每個項目指定第二個
欄位的項目用哪種運行級(每個欄位用冒號分開)。因此,對運行級3,下列行是相關的:
13:3:wait:/etc/rc.d/rc 3
1:12345:respawn:/sbin/minggetty tty1
2:2345:respawn:/sbin/minggetty tty2
3:2345:respawn:/sbin/minggetty tty3
4:2345:respawn:/sbin/minggetty tty4
5:2345:respawn:/sbin/minggetty tty5
6:2345:respawn:/sbin/minggetty tty6
最後六行建立Linux提供的六個虛擬控制台。第一行運行啟動腳本/etc/rc.d/ rc 3;
這將運行目錄/etc/
rc.d/rc3.d中包含的所有腳本,這些腳本表示系統初始化時要啟動的程序。一般來說,
這些腳本不需要編輯或改變,是系統預設的。