一、系統環境變量:
/etc/profile :這個文件預設了幾個重要的變量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等等。
/etc/bashrc :這個文件主要預設umask以及PS1。這個PS1就是我們在敲命令時,前面那串字符了,例如 [root@localhost ~]#,當bash shell被打開時,該文件被讀取
二、用戶環境變量:
.bash_profile :定義了用戶的個人化路徑與環境變量的文件名稱。每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次。(在這個文件中有執行.bashrc的腳本)
.bashrc :該文件包含專用於你的shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取。例如你可以將用戶自定義的alias或者自定義變量寫到這個文件中。
.bash_history :記錄命令歷史用的。
.bash_logout :當退出shell時,會執行該文件。可以把一些清理的工作放到這個文件中。
三、centos6的啟動過程:
1、內核引導
當計算機打開電源后,首先是BIOS開機自檢,按照BIOS中設置的啟動設備(通常是硬盤)來啟動。緊接着由啟動設備上的grub程序開始引導Linux,當引導程序成功完成引導任務后,Linux從它們手中接管了CPU的控制權,然后CPU就開始執行Linux的核心映象代碼,開始了Linux啟動過程。也就是所謂的內核引導開始了,在內核引導過程中其實是很復雜的,我們就當它是一個黑匣子,反正是Linux內核做了一系列工作,最后內核調用加載了init程序,至此內核引導的工作就完成了。交給了下一個主角init.
2、運行init
init 進程是系統所有進程的起點,你可以把它比擬成系統所有進程的老祖宗,沒有這個進程,系統中任何進程都不會啟動。init 最主要的功能就是准備軟件執行的環境,包括系統的主機名、網絡設定、語言、文件系統格式及其他服務的啟動等。 而所有的動作都會通過 init的配置文件/etc/inittab來規划,而inittab 內還有一個很重要的設定內容,那就是默認的 runlevel (開機運行級別)。先來看看運行級別Run level,Linux就是通過設定run level來規定系統使用不同的服務來啟動,讓Linux的使用環境不同。我們來看看這個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:
inittab配置文件格式和之前老版本CentOS5或者更老版本比有很大改動。Runlevels共七個級別,0表示關機,1表示單用戶,2表示沒有網絡的命令行級別,3命令行級別(大多服務器都用這個級別),4為保留級別,5為圖形化級別,6為重啟。這個文件中除了最后一行外,其他都為注釋行,也就是說最后一行才是關鍵,它用來指定服務器跑哪個級別,這里除了可以設置2,3,5外其他級別都不能設置。在該文件的前面部分,可以看到很多行都提及到某個配置文件,而所有配置文件都是在/etc/init/目錄下。
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
文件,就執行它(在這個文件中有執行.bashrc的腳本),在這些文件中又可能調用了其它配置文件,所有的配置文件執行后后,各種環境變量也設好了,這時會出現大家熟悉的命令行提示符,到此整個啟動過程就結束了。
執行順序:/etc/profile -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout