轉自:http://www.aminglinux.com/study_v2/chapter5.html
CentOS6啓動步驟:
1、內核引導: BIOS開始自檢
按照BIOS中設置的啓動設備(通常是硬盤)來啓動
啓動設備上的grub程序開始引導linux
linux接管CPU的控制權
CPU開始執行linux的核心映像代碼(開始linux的啓動過程)
內核調用加載init程序
2、運行init: init進程是系統所有進程的起點(沒有這個進程,系統中任何進程都不會啓動)。
功能: 準備軟件執行環境。
主機名
網絡設定
語言
文件系統格式
其它服務的啓動
/etc/inittab: init進程的所有動作都要通過配置文件/etc/inittab來規劃
/etc/inittab 還設定了默認的runlevel(開機運行級別)
--查看inittab文件 vim /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used 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:
runlevel解釋:0 關機 1單用戶 2沒有網絡的命令行級別 3命令行級別 4保留級別 5圖形化級別 6重啓
大多數服務器都用級別3
id:3:initdefault: 表示服務器跑的是3級別
3、系統初始化:執行/etc/init/下的各個配置文件
inittab配置文件中有這麼一行 “System initialization is started by /etc/init/rcS.conf” 也就是說系統初始化會先執行/etc/init/rcS.conf 而該配置文件中又有一行 “exec /etc/rc.d/rc.sysinit” 所以,重心又轉移到了這個rc.sysinit文件上,它會做如下工作:激活交換分區,檢查磁盤,加載硬件模塊以及其它一些需要優先執行任務。
當rc.sysinit程序執行完畢後,將返回init繼續下一步,又到了/etc/init/rc.conf, 在這個配置文件裏,最關鍵的一行爲 “exec /etc/rc.d/rc $RUNLEVEL” 而$RUNLEVEL是在/etc/inittab中定義的(最下面的那一行),以阿銘的/etc/inittab爲例,表示$RUNLEVE=3, 所以此時會執行 “/etc/rc.d/rc 3” 此時實際上是把/etc/rc.d/rc3.d/ 下的腳本都給執行了,隨後/etc/rc.d/rc.local也會被執行,通常我們會把開機啓動執行的命令放到這個腳本下。服務執行完,系統初始化也就完成了。接下來該建立終端了。
4、建立終端:
建立終端是由配置文件/etc/init/tty.conf, /etc/init/serial.conf和/etc/sysconfig/init等配置文件來完成的。在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 文件,就執行它,在這些文件中又可能調用了其它配置文件,所有的配置文件執行後後,各種環境變量也設好了,這時會出現大家熟悉的命令行提示符,到此整個啓動過程就結束了。
----------------------------------------------
/etc/profile: 此文件爲系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行. 並從/etc/profile.d目錄的配置文件中搜集shell的設置。
~/.bash_profile: 每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次。默認情況下,設置一些環境變量,執行用戶的.bashrc文件。
~/.bashrc: 該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取。