文章內容由網上蒐集的資料整理而得,由於資料下的太多沒注意出處及作者,在這裡只好謝謝各位大大們了。
要說linux服務就不得不說linux系統的初始化過程了。
開機步驟:
1.開機自檢
2.預引導
3.核心映像裝入
4.核心啟動
5.系統初始化
6.等待使用者登入
注:在核心啟動完之後會搜尋檔案系統中的init程式(或者由init=命令列引數指定的程式),並使用 execve()系統呼叫載入執行init程式,到這裡也就進入了系統初始化階段。
系統初始化的工作:init程序負責進行一系列系統初始化程式和指令碼檔案,/etc/inittab中包含了init所做的所有工作。
inittab檔案簡單描述
init程序是系統所有程序的起點,核心在完成核內引導以後,即在本執行緒(程序)空間內載入init程式,它的程序號是1。
啟動 init程式需要讀取/etc/inittab檔案作為其行為指標,inittab是以行為單位的描述性(非執行性)文字,每乙個指令行都具有以下格式:
id:runlevel:action:process其中id為入口識別符號,runlevel為執行級別,action為動作代號,process為具體的執行程式。
id一般要求4個字元以內,對於getty或其他login程式項,要求id與tty的編號相同,否則getty程式將不能正常工作。
runlevel是init所處於的執行級別的標識,一般使用0-6。0、1、6執行級別被系統保留,0作為shutdown動作,1作為重啟至單使用者模式,6為重啟。
在一般的系統實現中,都使用了2、3、4、5幾個級別,在redhat系統中,2表示無nfs支援的多使用者模式,3表示完全多使用者模式(也是最常用的級別),4保留給使用者自定義,5表示xdm圖形登入方式。
initdefault是乙個特殊的action值,用於標識預設的啟動級別;當init由核心啟用以後,它將讀取inittab中的initdefault項,取得其中的runlevel,並作為當前的執行級別。
在redhat系統中,一般情況下inittab都會有如下幾項:
id:3:initdefault:
#表示當前預設執行級別為3--完全多工模式;
si::sysinit:/etc/rc.d/rc.sysinit
#啟動時自動執行/etc/rc.d/rc.sysinit指令碼
l3:3:wait:/etc/rc.d/rc 3
#當執行級別為3時,以3為引數執行/etc/rc.d/rc指令碼
init程序將啟動執行rc指令碼,下面將介紹rc指令碼具體的工作:
看上面的inittab檔案系統啟動級別3的模式;
自動執行etc/rc.d/rc.sysinit,
rc.sysinit中最常見的動作就是啟用交換分割槽,檢查磁碟,載入硬體模組(具體的大家可以去看指令碼);
接著在執行級別3下,/etc/rc.d/rc將會得到執行,命令列引數為3,即執行/etc/rc.d/rc3.d/目錄下的所有檔案。rc3.d下的檔案都是指向/etc/rc.d/init.d/目錄下各個shell指令碼的符號連線,而這些指令碼一般能接受start、stop、restart、status等引數。rc指令碼以start引數啟動所有以s開頭的指令碼,在此之前,如果相應的指令碼也存在k打頭的鏈結,而且已經處於執行態了(以/var/lock/subsys/下的檔案作為標誌),則將首先啟動k開頭的指令碼,以stop作為引數停止這些已經啟動了的服務,然後再重新執行。顯然,這樣做的直接目的就是當init改變執行級別時,所有相關的服務都將重啟,即使是同乙個級別。
rc程式執行完畢後,系統環境已經設定好了,下面就該使用者登入系統了。
linux初始化系統init
linux從bios開始啟動,然後載入記憶體映像到記憶體,進行記憶體初始化,核心初始化的最後一步是啟動乙個pid為1的init的程序!他負責載入啟動別的程序。對應的啟動指令碼都在 etc init.d下。init是序列化啟動,啟動較慢!init的管理 etc init.d deamon start,...
LINUX 系統初始化指令碼
bin bash the system first start configuretion for install copy right by donglei 1 配置sysctl mv etc sysctl.conf etc sysctl.bak echo the new config for s...
Linux系統初始化流程
linux系統的啟動,指的是從系統加電到系統控制台顯示 login 登入提示符為止的系統執行階段,與這部分動作密切相關的 主要是 在系統啟動過程中,主要關注一下幾個方面 中斷系統及排程系統 檔案系統的初始化 裝置管理系統的初始化 網路協議的初始化 在init main.c中reset init函式 ...