




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Linux文件系統(tǒng)啟動(dòng)過(guò)程及l(fā)ogin的實(shí)現(xiàn)1. busybox簡(jiǎn)介busybox是一個(gè)集成了一百多個(gè)最常用linux命令和工具的軟件,它將許多常用的LINUX命令和工具結(jié)合到了一個(gè)單獨(dú)的可執(zhí)行程序中。雖然與相應(yīng)的GNU工具比較起來(lái),busybox所提供的功能和參數(shù)略少,但在比較小的系統(tǒng)(例如啟動(dòng)盤)或者嵌入式系統(tǒng)中,已經(jīng)足夠了。 busybox在設(shè)計(jì)上就充分考慮了硬件資源受限的特殊工作環(huán)境。它采用一種很巧妙的辦法減少自己的體積:所有的命令都通過(guò)“插件”的方式集中到一個(gè)可執(zhí)行文件中,在實(shí)際應(yīng)用過(guò)程中通過(guò)不同的符號(hào)鏈接來(lái)確定到底要執(zhí)行哪個(gè)操作。例如最終生成的可執(zhí)行文件為busybox,當(dāng)為它建立
2、一個(gè)符號(hào)鏈接ls的時(shí)候,就可以通過(guò)執(zhí)行這個(gè)新命令實(shí)現(xiàn)列目錄的功能。采用單一執(zhí)行文件的方式最大限度地共享了程序代碼,甚至連文件頭、內(nèi)存中的程序控制塊等其他操作系統(tǒng)資源都共享了,對(duì)于資源比較緊張的系統(tǒng)來(lái)說(shuō),是最合適不過(guò)了。Busybox配置如下:Build Options->* Build BusyBox as a static binary (no shared libs)Installation Options ->Login/Password Management Utilities -> Do you want to build BusyBox with a Cross
3、Compiler。如果要對(duì)其他平臺(tái)進(jìn)行編譯就要選擇它并設(shè)置相應(yīng)的編譯程序前綴。我們選擇armv5l-linux-,前面加上絕對(duì)路徑。Login/Password Management Utilities->*Use internal password and group functions rather than system functions。這里設(shè)置使用busybox自己的password和shadow文件的功能。 如果需要一個(gè)交互的登錄界面,則選擇getty、login和passwd編譯make TARGET_ARCH=arm,生成的目標(biāo)代碼位于_install目錄下。2. 文件
4、系統(tǒng)啟動(dòng)過(guò)程Linux的啟動(dòng)過(guò)程主要分成兩個(gè)階段: 1.啟動(dòng)內(nèi)核。在這個(gè)階段,內(nèi)核裝入內(nèi)存并在初始化每個(gè)設(shè)備驅(qū)動(dòng)器時(shí)打印信息。 2.執(zhí)行程序init。裝入內(nèi)核并初始化設(shè)備后,運(yùn)行init程序。init程序處理所有程序的啟動(dòng),包括重要系統(tǒng)程序和其它指定在啟動(dòng)時(shí)裝入的軟件。現(xiàn)在主要詳細(xì)介紹一下文件系統(tǒng)的啟動(dòng)過(guò)程,即linux啟動(dòng)過(guò)程的第二階段,大概分為以下幾個(gè)過(guò)程:(1)運(yùn)行initinit的進(jìn)程號(hào)是1,從這一點(diǎn)就能看出,init進(jìn)程是系統(tǒng)所有進(jìn)程的起點(diǎn),linux在完成核內(nèi)引導(dǎo)以后,就開始運(yùn)行init程序。init程序需要讀取配置文件/etc/inittab,以查看下一步做什么。inittab是
5、一個(gè)不可執(zhí)行的文本文件,它有若干行指令所組成,告訴 init 要進(jìn)入什么運(yùn)行級(jí)別,以及在哪里可以找到該運(yùn)行級(jí)別的配置文件。以下是qsan的inittab文件(部分注釋省略):# The default runlevel.id:4:initdefault:# Boot-time system configuration/initialization script.# This is run first except when booting in emergency (-b) mode.si:sysinit:/etc/init.d/rcS# /etc/init.d executes the S
6、and K scripts upon change of runlevel.l0:0:wait:/etc/init.d/rc 0l1:1:wait:/etc/init.d/rc 1l2:2:wait:/etc/init.d/rc 2l3:3:wait:/etc/init.d/rc 3l4:4:wait:/etc/init.d/rc 4l6:6:wait:/etc/init.d/rc 6# Trap CTRL-ALT-DELETEca:ctrlaltdel:/sbin/shutdown -t3 -h now# /sbin/getty invocations for the runlevels.#
7、 Example how to put a getty on a serial line (for a terminal)T0:134:respawn:/sbin/getty -L ttyS0 115200 vt100T1:1:respawn:/sbin/getty -L ttyS1 115200 vt100以上面的inittab文件為例,來(lái)說(shuō)明一下inittab的格式。其中以#開始的行是注釋行,除了注釋行之外,每一行都有以下格式:id:runlevel:action:processid 入口標(biāo)識(shí)符,用于標(biāo)識(shí)文件/etc/inittab中的每一個(gè)登記項(xiàng)。它是一個(gè)1-4位的字符串,對(duì)于getty
8、或mingetty等其他login程序項(xiàng),要求id與tty的編號(hào)相同,否則getty程序?qū)⒉荒苷9ぷ鳌unlevel 運(yùn)行級(jí)。說(shuō)明該登記項(xiàng)適用于哪一個(gè)運(yùn)行級(jí)。為空表示適用于所有級(jí)別.它是init所處于的運(yùn)行級(jí)別標(biāo)識(shí),一般使用06以及S或s。0、1、6運(yùn)行級(jí)別被系統(tǒng)保留。0作為halt動(dòng)作,1作為重啟至單用戶模式,6為重啟。S和s意義相同,表示單用戶模式,且無(wú)需inittab文件,因此也不在inittab中出現(xiàn),實(shí)際上,進(jìn)入單用戶模式時(shí),init直接在控制臺(tái)(/dev/console)上運(yùn)行/sbin/sulogin。runlevel可以是并列的多個(gè)值,以匹配多個(gè)運(yùn)行級(jí)別,對(duì)大多數(shù)actio
9、n來(lái)說(shuō),僅當(dāng)runlevel與當(dāng)前運(yùn)行級(jí)別匹配成功才會(huì)執(zhí)行。action 定義init命令應(yīng)該向進(jìn)程實(shí)施什么動(dòng)作。包括以下:respawn無(wú)論何時(shí)它終止,均重新啟動(dòng)命令wait運(yùn)行命令一次。在繼續(xù)之前,init等待它終止once運(yùn)行命令一次boot命令在啟動(dòng)過(guò)程中運(yùn)行。忽略運(yùn)行等級(jí)字段bootwait命令在啟動(dòng)過(guò)程中運(yùn)行,忽略運(yùn)行等級(jí)字段。在繼續(xù)之前,init等待該進(jìn)程終止initdefault定義Linux系統(tǒng)的默認(rèn)運(yùn)行等級(jí)powerwait停電時(shí)命令運(yùn)行。在繼續(xù)之前,init等待該進(jìn)程終止powerfail停電時(shí)命令運(yùn)行。在繼續(xù)之前,init不等待該進(jìn)程終止powerokwait恢復(fù)電力時(shí)
10、命令運(yùn)行。在繼續(xù)之前,init等待該進(jìn)程終止powerfailnowUPS發(fā)出電池即將耗盡的信號(hào)時(shí),運(yùn)行該命令process - 是具體的執(zhí)行程序。程序后面可以帶參數(shù)。(2)系統(tǒng)初始化sysinit、boot、bootwait等action將在系統(tǒng)啟動(dòng)時(shí)無(wú)條件運(yùn)行,而忽略其中的runlevel。因此init進(jìn)程首先會(huì)執(zhí)行etc/init.d/rcS腳本,rcS內(nèi)容如下:#首先,定義PATH、runlevel、prevlevel然后導(dǎo)出到環(huán)境中PATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=Sprevlevel=Numask 022export PATH r
11、unlevel prevlevel#然后,判斷是不是第一次安裝系統(tǒng),如果是,則檢查并且執(zhí)行安裝程序留下的腳本if -x /sbin/unconfigured.sh then /sbin/unconfigured.shfi . /etc/default/rcSexport VERBOSE#捕捉INT、QUIT、TSTP信號(hào),trap":"INT QUIT TSTP#檢查/etc/rcS.d/目錄,看是否有以S開頭并且緊跟兩個(gè)字符(實(shí)際上#一般是兩個(gè)數(shù)字099)命名的非普通(! -f"$i")文件,如果有則根據(jù)#文件的類型作出兩個(gè)選擇# 1,是.sh結(jié)尾的腳
12、本時(shí)執(zhí)行# 2,如果不是.sh結(jié)尾的腳本,則傳遞給start參數(shù)執(zhí)行這個(gè)文件for i in /etc/rcS.d/S?*do # Ignore dangling symlinks for now. ! -f"$i"&& continue case"$i"in *.sh) # Source shell script for speed. ( trap - INT QUIT TSTP set start . $i ) ; *) # No sh extension, so fork subprocess. $i start ; esacdon
13、e #這是為了兼容其他系統(tǒng)的/etc/rc.boot腳本 -d /etc/rc.boot && run-parts /etc/rc.boot#這也是用于第一次安裝系統(tǒng)后需要執(zhí)行的腳本,安裝成功后,系統(tǒng)上#一般沒有這個(gè)腳本if -x /sbin/setup.sh then /sbin/setup.shfi#/etc/rc.S/rcS腳本執(zhí)行結(jié)束.返回/inittab(3)啟動(dòng)對(duì)應(yīng)運(yùn)行級(jí)別的守護(hù)進(jìn)程返回/inittab,接下來(lái)根據(jù)系統(tǒng)進(jìn)入的運(yùn)行級(jí)別,啟動(dòng)對(duì)應(yīng)運(yùn)行級(jí)別的守護(hù)進(jìn)程,這里為4,init將執(zhí)行配置文件inittab中的以下這行:l4:4:wait:/etc/init.d/r
14、c 4這一行表示以4為參數(shù)運(yùn)行/etc/rc.d/rc,/etc/rc.d/rc是一個(gè)Shell腳本,它接受4作為參數(shù),去執(zhí)行/etc/rc.d/rc4.d/目錄下的所有的rc啟動(dòng)腳本,/etc/rc.d/rc4.d/目錄中的這些啟動(dòng)腳本實(shí)際上都是一些鏈接文件,而不是真正的rc啟動(dòng)腳本,真正的rc啟動(dòng)腳本實(shí)際上都是放在/etc/rc.d/init.d/目錄下。而這些rc啟動(dòng)腳本有著類似的用法,它們一般能接受start、stop、restart、status等參數(shù)。/etc/rc.d/rc4.d/中的rc啟動(dòng)腳本通常是K或S開頭的鏈接文件,對(duì)于以S開頭的啟動(dòng)腳本,將以start參數(shù)來(lái)運(yùn)行。而如果
15、發(fā)現(xiàn)存在相應(yīng)的腳本也存在K打頭的鏈接,而且已經(jīng)處于運(yùn)行態(tài)了(以/var/lock/subsys/下的文件作為標(biāo)志),則將首先以stop為參數(shù)停止這些已經(jīng)啟動(dòng)了的守護(hù)進(jìn)程,然后再重新運(yùn)行。這樣做是為了保證是當(dāng)init改變運(yùn)行級(jí)別時(shí),所有相關(guān)的守護(hù)進(jìn)程都將重啟。(4)建立終端rc執(zhí)行完畢后,返回init。這時(shí)基本系統(tǒng)環(huán)境已經(jīng)設(shè)置好了,各種守護(hù)進(jìn)程也已經(jīng)啟動(dòng)了。init接下來(lái)會(huì)打開終端,以便用戶登錄系統(tǒng),如以下2行:T0:134:respawn:/sbin/getty -L ttyS0 115200 vt100T1:1:respawn:/sbin/getty -L ttyS1 115200 vt10
16、0從上面可以看出在1、3、4的運(yùn)行級(jí)別中將以respawn方式運(yùn)行g(shù)etty程序,它會(huì)顯示一個(gè)文本登錄界面,這個(gè)界面就是我們經(jīng)常看到的登錄界面,在這個(gè)登錄界面中會(huì)提示用戶輸入用戶名,而用戶輸入的用戶名將作為參數(shù)傳給login程序來(lái)驗(yàn)證用戶的身份。注意:如果想繞過(guò)登錄驗(yàn)證過(guò)程,想直接進(jìn)入shell界面的話,則把以上兩行注釋掉,改為:T0:134:respawn:/bin/sh(5)登錄系統(tǒng),啟動(dòng)完成getty進(jìn)程接收到用戶名后,啟動(dòng)login進(jìn)程. login進(jìn)程要求用戶輸入口令. 用戶輸入口令. login進(jìn)程對(duì)username和password進(jìn)行檢查. login啟動(dòng)shell進(jìn)程. sh
17、ell進(jìn)程根據(jù)/etc/password中的shell類型,啟動(dòng)相應(yīng)的shell.并啟動(dòng)/etc/profile文件和$HOME/.bash_profile文件.最后出現(xiàn)shell提示符,等待用戶輸入命令.至此,啟動(dòng)過(guò)程結(jié)束。3. login驗(yàn)證過(guò)程Linux的帳號(hào)驗(yàn)證程序是login,login會(huì)接收getty傳來(lái)的用戶名作為用戶名參數(shù)。然后login會(huì)對(duì)用戶名進(jìn)行分析:如果用戶名不是root,且存在/etc/nologin文件,login將輸出nologin文件的內(nèi)容,然后退出。這通常用來(lái)系統(tǒng)維護(hù)時(shí)防止非root用戶登錄。只有/etc/securetty中登記了的終端才允許root用戶登錄
18、,如果不存在這個(gè)文件,則root可以在任何終端上登錄。/etc/usertty文件用于對(duì)用戶作出附加訪問(wèn)限制,如果不存在這個(gè)文件,則沒有其他限制。在分析完用戶名后,login將搜索/etc/passwd以及/etc/shadow來(lái)驗(yàn)證密碼以及設(shè)置帳戶的其它信息,比如:主目錄是什么、使用何種shell。如果沒有指定主目錄,將默認(rèn)為根目錄;如果沒有指定shell,將默認(rèn)為/bin/bash。login程序成功后,會(huì)向?qū)?yīng)的終端在輸出最近一次登錄的信息(在/var/log/lastlog中有記錄),并檢查用戶是否有新郵件(在/usr/spool/mail/的對(duì)應(yīng)用戶名目錄下)。然后開始設(shè)置各種環(huán)境變
19、量:對(duì)于bash來(lái)說(shuō),系統(tǒng)首先尋找/etc/profile腳本文件,并執(zhí)行它;然后如果用戶的主目錄中存在.bash_profile文件,就執(zhí)行它,在這些文件中又可能調(diào)用了其它配置文件,所有的配置文件執(zhí)行后,各種環(huán)境變量也設(shè)好了,這時(shí)會(huì)出現(xiàn)大家熟悉的命令行提示符,到此整個(gè)啟動(dòng)過(guò)程就結(jié)束了。 以下是passwd,shadow和group腳本的格式說(shuō)明:/etc/passwd密碼文件的格式如下所示:用戶名:口令:用戶標(biāo)識(shí)號(hào):組標(biāo)識(shí)號(hào):注釋性描述:主目錄:登錄Shelluser_name:password:uid:gid:comment:home:shell 每行有很多項(xiàng)組成,項(xiàng)與項(xiàng)之間用":"隔開.每項(xiàng)的說(shuō)明如下: user_name 用戶名 password 登錄密碼,初始設(shè)置時(shí)為空 uid 用戶識(shí)別號(hào)(User ID),是一數(shù)值,每個(gè)用戶的識(shí)別號(hào)不同 gid 用戶組識(shí)別號(hào),參見/etc/group文件 comment 注釋,可以任意字符,一般用來(lái)說(shuō)明用戶的身份特征 home 家目錄名
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新聞傳媒理論與實(shí)踐練習(xí)題庫(kù)
- 影視劇拍攝合同書
- 校園社團(tuán)活動(dòng)安全責(zé)任協(xié)議
- 2025《中級(jí)會(huì)計(jì)實(shí)務(wù)》沖刺考點(diǎn):合同成本的確認(rèn)與計(jì)量的要點(diǎn)分析
- 殘疾人就業(yè)安置與職業(yè)培訓(xùn)服務(wù)合同
- 素食餐廳連鎖加盟經(jīng)營(yíng)許可協(xié)議范本
- 分公司合作開發(fā)與知識(shí)產(chǎn)權(quán)歸屬協(xié)議
- 旅游景點(diǎn)特色鋪面租賃及旅游紀(jì)念品銷售合同
- 高速公路項(xiàng)目部分收費(fèi)權(quán)益轉(zhuǎn)讓合同
- 駁接爪專用采購(gòu)合同包含操作培訓(xùn)條款
- 2024年廣州天河區(qū)六年級(jí)語(yǔ)文小升初摸底考試含答案
- 人工智能中的因果驅(qū)動(dòng)智慧樹知到期末考試答案2024年
- 因公臨時(shí)出國(guó)經(jīng)費(fèi)決算表
- 2024年合肥市公安局警務(wù)輔助人員招聘筆試參考題庫(kù)附帶答案詳解
- 2022年病區(qū)分層考核試題N2
- 自動(dòng)化設(shè)備的故障診斷與維護(hù)
- 《無(wú)菌技術(shù)培訓(xùn)課程》課件
- JJF 1521-2023燃油加油機(jī)型式評(píng)價(jià)大綱(試行)
- 接觸網(wǎng)設(shè)備結(jié)構(gòu)-接觸網(wǎng)吊弦
- 十個(gè)一活動(dòng)內(nèi)容記錄表
- 《IE工作流程》課件
評(píng)論
0/150
提交評(píng)論