大地资源网视频在线观看新浪,日本春药精油按摩系列,成人av骚妻潮喷,国产xxxx搡xxxxx搡麻豆

您現(xiàn)在的位置:智能制造網(wǎng)>技術(shù)中心>Linux啟動(dòng)過(guò)程綜述

直播推薦

更多>

企業(yè)動(dòng)態(tài)

更多>

推薦展會(huì)

更多>

Linux啟動(dòng)過(guò)程綜述

2009年03月09日 19:59:04人氣:864來(lái)源:浙江啟揚(yáng)智能科技有限公司

內(nèi)容:
一. Bootloader
二.Kernel引導(dǎo)入口
三.核心數(shù)據(jù)結(jié)構(gòu)初始化--內(nèi)核引導(dǎo)*部分
四.外設(shè)初始化--內(nèi)核引導(dǎo)第二部分
五.init進(jìn)程和inittab引導(dǎo)指令
六.rc啟動(dòng)腳本
七.getty和login
八.bash
附:XDM方式登錄


本文以Redhat 6.0 Linux 2.2.19 for Alpha/AXP為平臺(tái),描述了從開(kāi)機(jī)到登錄的 Linux 啟動(dòng)全過(guò)程。該文對(duì)i386平臺(tái)同樣適用。
一. Bootloader
在Alpha/AXP 平臺(tái)上引導(dǎo)Linux通常有兩種方法,一種是由MILO及其他類似的引導(dǎo)程序引導(dǎo),另一種是由Firmware直接引導(dǎo)。MILO功能與i386平臺(tái)的LILO相近,但內(nèi)置有基本的磁盤(pán)驅(qū)動(dòng)程序(如IDE、SCSI等),以及常見(jiàn)的文件系統(tǒng)驅(qū)動(dòng)程序(如ext2,iso9660等), firmware有ARC、SRM兩種形式,ARC具有類BIOS界面,甚至還有多重引導(dǎo)的設(shè)置;而SRM則具有功能強(qiáng)大的命令行界面,用戶可以在控制臺(tái)上使用boot等命令引導(dǎo)系統(tǒng)。ARC有分區(qū)(Partition)的概念,因此可以訪問(wèn)到分區(qū)的首扇區(qū);而SRM只能將控制轉(zhuǎn)給磁盤(pán)的首扇區(qū)。兩種firmware都可以通過(guò)引導(dǎo)MILO來(lái)引導(dǎo)Linux,也可以直接引導(dǎo)Linux的引導(dǎo)代碼。

“arch/alpha/boot” 下就是制作Linux Bootloader的文件。“head.S”文件提供了對(duì) OSF PAL/1的調(diào)用入口,它將被編譯后置于引導(dǎo)扇區(qū)(ARC的分區(qū)首扇區(qū)或SRM的磁盤(pán)0扇區(qū)),得到控制后初始化一些數(shù)據(jù)結(jié)構(gòu),再將控制轉(zhuǎn)給“main.c”中的start_kernel(), start_kernel()向控制臺(tái)輸出一些提示,調(diào)用pal_init()初始化PAL代碼,調(diào)用openboot() 打開(kāi)引導(dǎo)設(shè)備(通過(guò)讀取Firmware環(huán)境),調(diào)用load()將核心代碼加載到START_ADDR(見(jiàn) “include/asm-alpha/system.h”),再將Firmware中的核心引導(dǎo)參數(shù)加載到ZERO_PAGE(0) 中,zui后調(diào)用runkernel()將控制轉(zhuǎn)給0x100000的kernel,bootloader部分結(jié)束。

“arch/alpha/boot/bootp.c”以“main.c”為基礎(chǔ),可代替“main.c”與“head.S” 生成用于BOOTP協(xié)議網(wǎng)絡(luò)引導(dǎo)的Bootloader。
Bootloader中使用的所有“srm_”函數(shù)在“arch/alpha/lib/”中定義。

以上這種Boot方式是一種zui簡(jiǎn)單的方式,即不需其他工具就能引導(dǎo)Kernel,前提是按照 Makefile的指導(dǎo),生成bootimage文件,內(nèi)含以上提到的bootloader以及vmlinux,然后將 bootimage寫(xiě)入自磁盤(pán)引導(dǎo)扇區(qū)始的位置中。

當(dāng)采用MILO這樣的引導(dǎo)程序來(lái)引導(dǎo)Linux時(shí),不需要上面所說(shuō)的Bootloader,而只需要 vmlinux或vmlinux.gz,引導(dǎo)程序會(huì)主動(dòng)解壓加載內(nèi)核到0x1000(小內(nèi)核)或0x100000(大內(nèi)核),并直接進(jìn)入內(nèi)核引導(dǎo)部分,即本文的第二節(jié)。

對(duì)于I386平臺(tái)
i386系統(tǒng)中一般都有BIOS做zui初的引導(dǎo)工作,那就是將四個(gè)主分區(qū)表中的*個(gè)可引導(dǎo) 分區(qū)的*個(gè)扇區(qū)加載到實(shí)模式地址0x7c00上,然后將控制轉(zhuǎn)交給它。

在“arch/i386/boot” 目錄下,bootsect.S是生成引導(dǎo)扇區(qū)的匯編源碼,它首先將自己拷貝到0x90000上,然后將緊接其后的setup部分(第二扇區(qū))拷貝到0x90200,將真正的內(nèi)核代碼拷貝到0x100000。以上這些拷貝動(dòng)作都是以bootsect.S、setup.S以及vmlinux在磁盤(pán)上連續(xù)存放為前提的,也就是說(shuō),我們的bzImage文件或者zImage文件是按照bootsect,setup, vmlinux這樣的順序組織,并存放于始于引導(dǎo)分區(qū)的首扇區(qū)的連續(xù)磁盤(pán)扇區(qū)之中。

bootsect.S完成加載動(dòng)作后,就直接跳轉(zhuǎn)到0x90200,這里正是setup.S的程序入口。 setup.S的主要功能就是將系統(tǒng)參數(shù)(包括內(nèi)存、磁盤(pán)等,由BIOS返回)拷貝到 0x90000-0x901FF內(nèi)存中,這個(gè)地方正是bootsect.S存放的地方,這時(shí)它將被系統(tǒng)參數(shù)覆蓋。以后這些參數(shù)將由保護(hù)模式下的代碼來(lái)讀取。

除此之外,setup.S還將video.S中的代碼包含進(jìn)來(lái),檢測(cè)和設(shè)置顯示器和顯示模式。zui 后,setup.S將系統(tǒng)轉(zhuǎn)換到保護(hù)模式,并跳轉(zhuǎn)到0x100000(對(duì)于bzImage格式的大內(nèi)核是 0x100000,對(duì)于zImage格式的是0x1000)的內(nèi)核引導(dǎo)代碼,Bootloader過(guò)程結(jié)束。

對(duì)于2.4.x版內(nèi)核
沒(méi)有什么變化。

二.Kernel引導(dǎo)入口


在arch/alpha/vmlinux.lds 的鏈接腳本控制下,鏈接程序?qū)mlinux的入口置于 "arch/alpha/kernel/head.S"中的__start上,因此當(dāng)Bootloader跳轉(zhuǎn)到0x100000時(shí), __start處的代碼開(kāi)始執(zhí)行。__start的代碼很簡(jiǎn)單,只需要設(shè)置一下全局變量,然后就跳轉(zhuǎn)到start_kernel去了。start_kernel()是"init/main.c"中的asmlinkage函數(shù),至此,啟動(dòng)過(guò)程轉(zhuǎn)入體系結(jié)構(gòu)無(wú)關(guān)的通用C代碼中。

對(duì)于I386平臺(tái)
在i386體系結(jié)構(gòu)中,因?yàn)閕386本身的問(wèn)題,在 "arch/alpha/kernel/head.S"中需要更多的設(shè)置,但zui終也是通過(guò)call SYMBOL_NAME(start_kernel)轉(zhuǎn)到start_kernel()這個(gè)體系結(jié)構(gòu)無(wú)關(guān)的函數(shù)中去執(zhí)行了。

所不同的是,在i386系統(tǒng)中,當(dāng)內(nèi)核以bzImage的形式壓縮,即大內(nèi)核方式(__BIG_KERNEL__)壓縮時(shí)就需要預(yù)先處理bootsect.S和setup.S,按照大核模式使用$(CPP) 處理生成bbootsect.S和bsetup.S,然后再編譯生成相應(yīng)的.o文件,并使用 "arch/i386/boot/compressed/build.c"生成的build工具,將實(shí)際的內(nèi)核(未壓縮的,含 kernel中的head.S代碼)與"arch/i386/boot/compressed"下的head.S和misc.c合成到一起,其中的 head.S代替了"arch/i386/kernel/head.S"的位置,由Bootloader引導(dǎo)執(zhí)行(startup_32入口),然后它調(diào)用misc.c中定義的decompress_kernel()函數(shù),使用 "lib/inflate.c"中定義的gunzip()將內(nèi)核解壓到0x100000,再轉(zhuǎn)到其上執(zhí)行 "arch/i386/kernel/head.S"中的startup_32代碼。

對(duì)于2.4.x版內(nèi)核
沒(méi)有變化。

三.核心數(shù)據(jù)結(jié)構(gòu)初始化--內(nèi)核引導(dǎo)*部分
start_kernel()中調(diào)用了一系列初始化函數(shù),以完成kernel本身的設(shè)置。 這些動(dòng)作有的是公共的,有的則是需要配置的才會(huì)執(zhí)行的。


在start_kernel()函數(shù)中,
輸出Linux版本信息(printk(linux_banner))
設(shè)置與體系結(jié)構(gòu)相關(guān)的環(huán)境(setup_arch())
頁(yè)表結(jié)構(gòu)初始化(paging_init())
使用"arch/alpha/kernel/entry.S"中的入口點(diǎn)設(shè)置系統(tǒng)自陷入口(trap_init())
使用alpha_mv結(jié)構(gòu)和entry.S入口初始化系統(tǒng)IRQ(init_IRQ())
核心進(jìn)程調(diào)度器初始化(包括初始化幾個(gè)缺省的Bottom-half,sched_init())
時(shí)間、定時(shí)器初始化(包括讀取CMOS時(shí)鐘、估測(cè)主頻、初始化定時(shí)器中斷等,time_init())
提取并分析核心啟動(dòng)參數(shù)(從環(huán)境變量中讀取參數(shù),設(shè)置相應(yīng)標(biāo)志位等待處理,(parse_options())
控制臺(tái)初始化(為輸出信息而先于PCI初始化,console_init())
剖析器數(shù)據(jù)結(jié)構(gòu)初始化(prof_buffer和prof_len變量)
核心Cache初始化(描述Cache信息的Cache,kmem_cache_init())
延遲校準(zhǔn)(獲得時(shí)鐘jiffies與CPU主頻ticks的延遲,calibrate_delay())
內(nèi)存初始化(設(shè)置內(nèi)存上下界和頁(yè)表項(xiàng)初始值,mem_init())
創(chuàng)建和設(shè)置內(nèi)部及通用cache("slab_cache",kmem_cache_sizes_init())
創(chuàng)建uid taskcount SLAB cache("uid_cache",uidcache_init())
創(chuàng)建文件cache("files_cache",filescache_init())
創(chuàng)建目錄cache("dentry_cache",dcache_init())
創(chuàng)建與虛存相關(guān)的cache("vm_area_struct","mm_struct",vma_init())
塊設(shè)備讀寫(xiě)緩沖區(qū)初始化(同時(shí)創(chuàng)建"buffer_head"cache用戶加速訪問(wèn),buffer_init())
創(chuàng)建頁(yè)cache(內(nèi)存頁(yè)hash表初始化,page_cache_init())
創(chuàng)建信號(hào)隊(duì)列cache("signal_queue",signals_init())
初始化內(nèi)存inode表(inode_init())
創(chuàng)建內(nèi)存文件描述符表("filp_cache",file_table_init())
檢查體系結(jié)構(gòu)漏洞(對(duì)于alpha,此函數(shù)為空,check_bugs())
SMP機(jī)器其余CPU(除當(dāng)前引導(dǎo)CPU)初始化(對(duì)于沒(méi)有配置SMP的內(nèi)核,此函數(shù)為空,smp_init())
啟動(dòng)init過(guò)程(創(chuàng)建*個(gè)核心線程,調(diào)用init()函數(shù),原執(zhí)行序列調(diào)用cpu_idle() 等待調(diào)度,init())
至此start_kernel()結(jié)束,基本的核心環(huán)境已經(jīng)建立起來(lái)了。

對(duì)于I386平臺(tái)
i386平臺(tái)上的內(nèi)核啟動(dòng)過(guò)程與此基本相同,所不同的主要是實(shí)現(xiàn)方式。

對(duì)于2.4.x版內(nèi)核
2.4.x中變化比較大,但基本過(guò)程沒(méi)變,變動(dòng)的是各個(gè)數(shù)據(jù)結(jié)構(gòu)的具體實(shí)現(xiàn),比如Cache。

四.外設(shè)初始化--內(nèi)核引導(dǎo)第二部分
init()函數(shù)作為核心線程,首先鎖定內(nèi)核(僅對(duì)SMP機(jī)器有效),然后調(diào)用 do_basic_setup()完成外設(shè)及其驅(qū)動(dòng)程序的加載和初始化。過(guò)程如下:


總線初始化(比如pci_init())
網(wǎng)絡(luò)初始化(初始化網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu),包括sk_init()、skb_init()和proto_init()三部分,在proto_init()中,將調(diào)用protocols結(jié)構(gòu)中包含的所有協(xié)議的初始化過(guò)程,sock_init())
創(chuàng)建bdflush核心線程(bdflush()過(guò)程常駐核心空間,由核心喚醒來(lái)清理被寫(xiě)過(guò)的內(nèi)存緩沖區(qū),當(dāng)bdflush()由kernel_thread()啟動(dòng)后,它將自己命名為kflushd)
創(chuàng)建kupdate核心線程(kupdate()過(guò)程常駐核心空間,由核心按時(shí)調(diào)度執(zhí)行,將內(nèi)存緩沖區(qū)中的信息更新到磁盤(pán)中,更新的內(nèi)容包括超級(jí)塊和inode表)
設(shè)置并啟動(dòng)核心調(diào)頁(yè)線程kswapd(為了防止kswapd啟動(dòng)時(shí)將版本信息輸出到其他信息中間,核心線調(diào)用kswapd_setup()設(shè)置kswapd運(yùn)行所要求的環(huán)境,然后再創(chuàng)建 kswapd核心線程)
創(chuàng)建事件管理核心線程(start_context_thread()函數(shù)啟動(dòng)context_thread()過(guò)程,并重命名為keventd)
設(shè)備初始化(包括并口parport_init()、字符設(shè)備chr_dev_init()、塊設(shè)備 blk_dev_init()、SCSI設(shè)備scsi_dev_init()、網(wǎng)絡(luò)設(shè)備net_dev_init()、磁盤(pán)初始化及分區(qū)檢查等等, device_setup())
執(zhí)行文件格式設(shè)置(binfmt_setup())
啟動(dòng)任何使用__initcall標(biāo)識(shí)的函數(shù)(方便核心添加啟動(dòng)函數(shù),do_initcalls())
文件系統(tǒng)初始化(filesystem_setup())
安裝root文件系統(tǒng)(mount_root())
至此do_basic_setup()函數(shù)返回init(),在釋放啟動(dòng)內(nèi)存段(free_initmem())并給內(nèi)核解鎖以后,init()打開(kāi) /dev/console設(shè)備,重定向stdin、stdout和stderr到控制臺(tái),zui后,搜索文件系統(tǒng)中的init程序(或者由init=命令行參數(shù)的程序),并使用 execve()系統(tǒng)調(diào)用加載執(zhí)行init程序。

init()函數(shù)到此結(jié)束,內(nèi)核的引導(dǎo)部分也到此結(jié)束了,這個(gè)由start_kernel()創(chuàng)建的*個(gè)線程已經(jīng)成為一個(gè)用戶模式下的進(jìn)程了。此時(shí)系統(tǒng)中存在著六個(gè)運(yùn)行實(shí)體:

start_kernel()本身所在的執(zhí)行體,這其實(shí)是一個(gè)"手工"創(chuàng)建的線程,它在創(chuàng)建了init()線程以后就進(jìn)入cpu_idle()循環(huán)了,它不會(huì)在進(jìn)程(線程)列表中出現(xiàn)
init線程,由start_kernel()創(chuàng)建,當(dāng)前處于用戶態(tài),加載了init程序
kflushd核心線程,由init線程創(chuàng)建,在核心態(tài)運(yùn)行bdflush()函數(shù)
kupdate核心線程,由init線程創(chuàng)建,在核心態(tài)運(yùn)行kupdate()函數(shù)
kswapd核心線程,由init線程創(chuàng)建,在核心態(tài)運(yùn)行kswapd()函數(shù)
keventd核心線程,由init線程創(chuàng)建,在核心態(tài)運(yùn)行context_thread()函數(shù)

對(duì)于I386平臺(tái)
基本相同。

對(duì)于2.4.x版內(nèi)核
這一部分的啟動(dòng)過(guò)程在2.4.x內(nèi)核中簡(jiǎn)化了不少,缺省的獨(dú)立初始化過(guò)程只剩下網(wǎng)絡(luò) (sock_init())和創(chuàng)建事件管理核心線程,而其他所需要的初始化都使用__initcall()宏 包含在do_initcalls()函數(shù)中啟動(dòng)執(zhí)行。

五.init進(jìn)程和inittab引導(dǎo)指令
init進(jìn)程是系統(tǒng)所有進(jìn)程的起點(diǎn),內(nèi)核在完成核內(nèi)引導(dǎo)以后,即在本線程(進(jìn)程)空 間內(nèi)加載init程序,它的進(jìn)程號(hào)是1。

init程序需要讀取/etc/inittab文件作為其行為指針,inittab是以行為單位的描述性(非執(zhí)行性)文本,每一個(gè)指令行都具有以下格式:

id:runlevel:action:process其中id為入口標(biāo)識(shí)符,runlevel為運(yùn)行級(jí)別,action為動(dòng)作代號(hào),process為具體的執(zhí)行程序。

id一般要求4個(gè)字符以內(nèi),對(duì)于getty或其他login程序項(xiàng),要求id與tty的編號(hào)相同,否則getty程序?qū)⒉荒苷9ぷ鳌?/p>

runlevel 是init所處于的運(yùn)行級(jí)別的標(biāo)識(shí),一般使用0-6以及S或s。0、1、6運(yùn)行級(jí)別被系統(tǒng)保留,0作為shutdown動(dòng)作,1作為重啟至單用戶模式,6 為重啟;S和s意義相同,表示單用戶模式,且無(wú)需inittab文件,因此也不在inittab中出現(xiàn),實(shí)際上,進(jìn)入單用戶模式時(shí),init直接在控制臺(tái)(/dev/console)上運(yùn)行/sbin/sulogin。

在一般的系統(tǒng)實(shí)現(xiàn)中,都使用了2、3、4、5幾個(gè)級(jí)別,在 Redhat系統(tǒng)中,2表示無(wú)NFS支持的多用戶模式,3表示*多用戶模式(也是zui常用的級(jí)別),4保留給用戶自定義,5表示XDM圖形登錄方式。7- 9級(jí)別也是可以使用的,傳統(tǒng)的Unix系統(tǒng)沒(méi)有定義這幾個(gè)級(jí)別。runlevel可以是并列的多個(gè)值,以匹配多個(gè)運(yùn)行級(jí)別,對(duì)大多數(shù)action來(lái)說(shuō),僅當(dāng)runlevel與當(dāng)前運(yùn)行級(jí)別匹配成功才會(huì)執(zhí)行。

initdefault是一個(gè)特殊的action值,用于標(biāo)識(shí)缺省的啟動(dòng)級(jí)別;當(dāng)init由核心激活 以后,它將讀取inittab中的initdefault項(xiàng),取得其中的runlevel,并作為當(dāng)前的運(yùn)行級(jí)別。如果沒(méi)有inittab文件,或者其中沒(méi)有initdefault項(xiàng),init將在控制臺(tái)上請(qǐng)求輸入 runlevel。

sysinit、 boot、bootwait等action將在系統(tǒng)啟動(dòng)時(shí)無(wú)條件運(yùn)行,而忽略其中的runlevel,其余的action(不含initdefault)都與某個(gè)runlevel相關(guān)。各個(gè)action的定義在inittab的man手冊(cè)中有詳細(xì)的描述。

在Redhat系統(tǒng)中,一般情況下inittab都會(huì)有如下幾項(xiàng):
id:3:initdefault:
#表示當(dāng)前缺省運(yùn)行級(jí)別為3--*多任務(wù)模式;
si::sysinit:/etc/rc.d/rc.sysinit
#啟動(dòng)時(shí)自動(dòng)執(zhí)行/etc/rc.d/rc.sysinit腳本
l3:3:wait:/etc/rc.d/rc 3
#當(dāng)運(yùn)行級(jí)別為3時(shí),以3為參數(shù)運(yùn)行/etc/rc.d/rc腳本,init將等待其返回
0:12345:respawn:/sbin/mingetty tty0
#在1-5各個(gè)級(jí)別上以tty0為參數(shù)執(zhí)行/sbin/mingetty程序,打開(kāi)tty0終端用于
#用戶登錄,如果進(jìn)程退出則再次運(yùn)行mingetty程序
x:5:respawn:/usr/bin/X11/xdm -nodaemon
#在5級(jí)別上運(yùn)行xdm程序,提供xdm圖形方式登錄界面,并在退出時(shí)重新執(zhí)行.

六.rc啟動(dòng)腳本

上一節(jié)已經(jīng)提到init進(jìn)程將啟動(dòng)運(yùn)行rc腳本,這一節(jié)將介紹rc腳本具體的工作。

一般情況下,rc啟動(dòng)腳本都位于/etc/rc.d目錄下,rc.sysinit中zui常見(jiàn)的動(dòng)作就是激活交換分區(qū),檢查磁盤(pán),加載硬件模塊,這些動(dòng)作無(wú)論哪個(gè)運(yùn)行級(jí)別都是需要優(yōu)先執(zhí)行的。僅當(dāng)rc.sysinit執(zhí)行完以后init才會(huì)執(zhí)行其他的boot或bootwait動(dòng)作。

如果沒(méi)有其他boot、bootwait動(dòng)作,在運(yùn)行級(jí)別3下,/etc/rc.d/rc將會(huì)得到執(zhí)行,命令行參數(shù)為3,即執(zhí)行 /etc/rc.d/rc3.d/目錄下的所有文件。rc3.d下的文件都是指向/etc/rc.d/init.d/目錄下各個(gè)Shell腳本的符號(hào)連接,而這些腳本一般能接受start、stop、restart、status等參數(shù)。rc腳本以start參數(shù)啟動(dòng)所有以S開(kāi)頭的腳本,在此之前,如果相應(yīng)的腳本也存在K打頭的鏈接,而且已經(jīng)處于運(yùn)行態(tài)了(以/var/lock/subsys/下的文件作為標(biāo)志),則將首先啟動(dòng)K開(kāi)頭的腳本,以stop 作為參數(shù)停止這些已經(jīng)啟動(dòng)了的服務(wù),然后再重新運(yùn)行。顯然,這樣做的直接目的就是當(dāng)init改變運(yùn)行級(jí)別時(shí),所有相關(guān)的服務(wù)都將重啟,即使是同一個(gè)級(jí)別。

rc程序執(zhí)行完畢后,系統(tǒng)環(huán)境已經(jīng)設(shè)置好了,下面就該用戶登錄系統(tǒng)了。

七.getty和login

在rc返回后,init將得到控制,并啟動(dòng)mingetty(見(jiàn)第五節(jié))。mingetty是getty的簡(jiǎn)化,不能處理串口操作。getty的功能一般包括:


打開(kāi)終端線,并設(shè)置模式
輸出登錄界面及提示,接受用戶名的輸入
以該用戶名作為login的參數(shù),加載login程序
缺省的登錄提示記錄在/etc/issue文件中,但每次啟動(dòng),一般都會(huì)由rc.local腳本根據(jù)系統(tǒng)環(huán)境重新生成。

注:用于遠(yuǎn)程登錄的提示信息位于/etc/中。

login程序在getty的同一個(gè)進(jìn)程空間中運(yùn)行,接受getty傳來(lái)的用戶名參數(shù)作為登錄的用戶名。

如果用戶名不是root,且存在/etc/nologin文件,login將輸出nologin文件的內(nèi)容,然后退出。這通常用來(lái)系統(tǒng)維護(hù)時(shí)防止非root用戶登錄。

只有/etc/securetty中登記了的終端才允許root用戶登錄,如果不存在這個(gè)文件,則root可以在任何終端上登錄。/etc/usertty文件用于對(duì)用戶作出附加訪問(wèn)限制,如果不存在這個(gè)文件,則沒(méi)有其他限制。

當(dāng)用戶登錄通過(guò)了這些檢查后,login將搜索/etc/passwd文件(必要時(shí)搜索 /etc/shadow文件)用于匹配密碼、設(shè)置主目錄和加載shell。如果沒(méi)有主目錄,將默認(rèn)為根目錄;如果沒(méi)有shell,將默認(rèn)為 /bin/sh。在將控制轉(zhuǎn)交給shell以前, getty將輸出/var/log/lastlog中記錄的上次登錄系統(tǒng)的信息,然后檢查用戶是否有新郵件(/usr/spool/mail/ {username})。在設(shè)置好shell的uid、gid,以及TERM,PATH 等環(huán)境變量以后,進(jìn)程加載shell,login的任務(wù)也就完成了。

八.bash

運(yùn)行級(jí)別3下的用戶login以后,將啟動(dòng)一個(gè)用戶的shell,以下以/bin/bash為例繼續(xù)我們的啟動(dòng)過(guò)程。

bash 是Bourne Shell的GNU擴(kuò)展,除了繼承了sh的所有特點(diǎn)以外,還增加了很多特性和功能。由login啟動(dòng)的bash是作為一個(gè)登錄shell啟動(dòng)的,它繼承了 getty設(shè)置的TERM、PATH等環(huán)境變量,其中PATH對(duì)于普通用戶為"/bin:/usr/bin:/usr/local/bin",對(duì)于 root 為"/sbin:/bin:/usr/sbin:/usr/bin"。作為登錄shell,它將首先尋找/etc/profile 腳本文件,并執(zhí)行它;然后如果存在~/.bash_profile,則執(zhí)行它,否則執(zhí)行 ~/.bash_login,如果該文件也不存在,則執(zhí)行~/.profile文件。然后bash將作為一個(gè)交互式shell執(zhí)行~/.bashrc文件(如果存在的話),很多系統(tǒng)中,~/.bashrc都將啟動(dòng) /etc/bashrc作為系統(tǒng)范圍內(nèi)的配置文件。

當(dāng)顯示出命令行提示符的時(shí)候,整個(gè)啟動(dòng)過(guò)程就結(jié)束了。此時(shí)的系統(tǒng),運(yùn)行著內(nèi)核,運(yùn)行著幾個(gè)核心線程,運(yùn)行著init進(jìn)程,運(yùn)行著一批由rc啟動(dòng)腳本激活的守護(hù)進(jìn)程(如 inetd等),運(yùn)行著一個(gè)bash作為用戶的命令解釋器。

附:XDM方式登錄
如果缺省運(yùn)行級(jí)別設(shè)為5,則系統(tǒng)中不光有1-6個(gè)getty監(jiān)聽(tīng)著文本終端,還有啟動(dòng)了一個(gè)XDM的圖形登錄窗口。登錄過(guò)程和文本方式差不多,也需要提供用戶名和口令,XDM 的配置文件缺省為/usr/X11R6/lib/X11/xdm/xdm-config文件,其中了 /usr/X11R6/lib/X11/xdm/xsession作為XDM的會(huì)話描述腳本。登錄成功后,XDM將執(zhí)行這個(gè)腳本以運(yùn)行一個(gè)會(huì)話管理器,比如gnome-session等。

除了XDM以外,不同的窗口管理系統(tǒng)(如KDE和GNOME)都提供了一個(gè)XDM的替代品,如gdm和kdm,這些程序的功能和XDM都差不多。
 

關(guān)鍵詞:顯示器定時(shí)器
全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

免責(zé)聲明

  • 凡本網(wǎng)注明"來(lái)源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請(qǐng)必須注明智能制造網(wǎng),http://www.xashilian.com。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
  • 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
  • 本網(wǎng)轉(zhuǎn)載并注明自其它來(lái)源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品來(lái)源,并自負(fù)版權(quán)等法律責(zé)任。
  • 如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

<
更多 >

工控網(wǎng)機(jī)器人儀器儀表物聯(lián)網(wǎng)3D打印工業(yè)軟件金屬加工機(jī)械包裝機(jī)械印刷機(jī)械農(nóng)業(yè)機(jī)械食品加工設(shè)備制藥設(shè)備倉(cāng)儲(chǔ)物流環(huán)保設(shè)備造紙機(jī)械工程機(jī)械紡織機(jī)械化工設(shè)備電子加工設(shè)備水泥設(shè)備海洋水利裝備礦冶設(shè)備新能源設(shè)備服裝機(jī)械印染機(jī)械制鞋機(jī)械玻璃機(jī)械陶瓷設(shè)備橡塑設(shè)備船舶設(shè)備電子元器件電氣設(shè)備


我要投稿
  • 投稿請(qǐng)發(fā)送郵件至:(郵件標(biāo)題請(qǐng)備注“投稿”)1271141964.qq.com
  • 聯(lián)系電話0571-89719789
工業(yè)4.0時(shí)代智能制造領(lǐng)域“互聯(lián)網(wǎng)+”服務(wù)平臺(tái)
智能制造網(wǎng)APP

功能豐富 實(shí)時(shí)交流

智能制造網(wǎng)小程序

訂閱獲取更多服務(wù)

微信公眾號(hào)

關(guān)注我們

抖音

智能制造網(wǎng)

抖音號(hào):gkzhan

打開(kāi)抖音 搜索頁(yè)掃一掃

視頻號(hào)

智能制造網(wǎng)

公眾號(hào):智能制造網(wǎng)

打開(kāi)微信掃碼關(guān)注視頻號(hào)

快手

智能制造網(wǎng)

快手ID:gkzhan2006

打開(kāi)快手 掃一掃關(guān)注
意見(jiàn)反饋
關(guān)閉
企業(yè)未開(kāi)通此功能
詳詢客服 : 0571-87858618
主站蜘蛛池模板: 牟定县| 衡东县| 张掖市| 福海县| 马公市| 遂溪县| 侯马市| 德州市| 弥渡县| 华阴市| 措勤县| 陵水| 玉树县| 双江| 阿拉尔市| 岐山县| 阜康市| 芒康县| 鲁甸县| 隆昌县| 兴业县| 新泰市| 平湖市| 藁城市| 皮山县| 双流县| 于都县| 兴隆县| 且末县| 福清市| 万荣县| 扶风县| 青浦区| 长阳| 洪雅县| 大同市| 山阳县| 石台县| 称多县| 响水县| 临沧市|