Linux系統啟動過程

Linux 腳本語言 GRUB KDE GNOME 中央處理器 菜鳥運維斌 2019-04-03
Linux系統啟動過程

大體上可分為五部分:內核的引導;運行init;系統初始化;建立終端 ;用戶登錄系統。

1.內核引導

當計算機打開電源後,首先是BIOS開機自檢,按照BIOS中設置的啟動設備。緊接著由啟動設備上的grub程序開始引導linux,當引導程序成功完成引導任務後,Linux從它們手中接管了CPU的控制權,然後CPU就開始執行Linux的核心映象代碼,開始了Linux啟動過程。最後內核調用加載了init程序,至此內核引導的工作就完成了。

2.運行init

init 進程是系統所有進程的父進程,進程pid為1。init 程序首先是需要讀取配置文件 /etc/inittab。inittab是一個不可執行的文本文件,它有若干行指令所組成。(linux上執行命令 cat /etc/inittab )

配置文件中每行的格式為: id:runlevel:action:process

id是指入口標識符,它是一個字符串,對於getty或mingetty等其他login程序項,要求id與tty的編號相同,否則getty程序將不能正常工作。

runlevel是init所處於的運行級別的標識,一般使用0-6以及S或s。0、1、6運行級別被系統保留:其中0作為shutdown,1作為重啟至單用戶模式,6為重啟;S和s意義相同,表示單用戶模式,且無需inittab文件;2表示無NFS支持的多用戶模式,3表示完全多用戶模式(也是最常用的級別),4保留給用戶自定義,5表示XDM圖形登錄方式。

action是描述其後的process的運行方式的。action可為:initdefault、sysinit、boot、bootwait等。各個action的定義在inittab的man手冊中有詳細的描述。

process為具體的執行程序。程序後面可以帶參數。

3.系統初始化

在init的配置文件中: si::sysinit:/etc/rc.d/rc.sysinit。它調用執行了/etc/rc.d/rc.sysinit,該腳本作用:激活交換分區,檢查磁盤,加載硬件模塊以及其它一些需要優先執行任務。

rc.sysinit約850多行,但是每個單一的功能還是比較簡單。當rc.sysinit程序執行完畢後,將返回init繼續下一步。通常接下來會執行到/etc/rc.d/rc程序。以運行級別3為例,init將執行配置文件inittab中的以下這行:l5:5:wait:/etc/rc.d/rc 5

4.建立終端

rc執行完畢後,返回init。這時基本系統環境已經設置好了,各種守護進程也已經啟動了。init接下來會打開6個終端,以便用戶登錄系統。在inittab中的以下6行就是定義了6個終端:

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

 從上面可以看出在2、3、4、5的運行級別中都將以respawn方式運行mingetty程序,mingetty程序能打開終端、設置模式。同時它會顯示一個文本登錄界面,這個界面就是我們經常看到的登錄界面,在這個登錄界面中會提示用戶輸入用戶名,而用戶輸入的用戶將作為參數傳給login程序來驗證用戶的身份。

5.用戶登錄系統

對於運行級別為5的圖形方式用戶來說,登錄是通過一個圖形化的登錄界面。登錄成功後可以直接進入KDE、Gnome等窗口管理器。當看到mingetty的登錄界面時,我們就可以輸入用戶名和密碼來登錄系統了。

Linux的賬號驗證程序是login,login會接收mingetty傳來的用戶名作為用戶名參數。然後login會對用戶名進行分析:如果用戶名不是root,且存在/etc/nologin文件,login將輸出nologin文件的內容,然後退出。這通常用來系統維護時防止非root用戶登錄。只有/etc/securetty中登記了的終端才允許root用戶登錄,如果不存在這個文件,則root可以在任何終端上登錄。/etc/usertty文件用於對用戶作出附加訪問限制,如果不存在這個文件,則沒有其他限制。

在分析完用戶名後,login將搜索/etc/passwd以及/etc/shadow來驗證密碼以及設置賬戶的其它信息,比如:主目錄是什麼、使用何種shell。如果沒有指定主目錄,將默認為根目錄;如果沒有指定shell,將默認為/bin/bash。

login程序成功後,會向對應的終端在輸出最近一次登錄的信息(在/var/log/lastlog中有記錄),並檢查用戶是否有新郵件(在/usr/spool/mail/的對應用戶名目錄下)。然後開始設置各種環境變量:對於bash來說,系統首先尋找/etc/profile腳本文件,並執行它;然後如果用戶的主目錄中存在.bash_profile文件,就執行它,在這些文件中又可能調用了其它配置文件,所有的配置文件執行後後,各種環境變量也設好了,這時會出現大家熟悉的命令行提示符,到此整個啟動過程就結束了。

相關推薦

推薦中...