linux中環境變量和系統加載環境變量的順序

1、系統環境變量shell

/etc/profile :這個文件預設了幾個重要的變量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等等。centos

/etc/bashrc :這個文件主要預設umask以及PS1。這個PS1就是咱們在敲命令時,前面那串字符了,例如 [root@localhost ~]#,當bash shell被打開時,該文件被讀取bash

2、用戶環境變量服務器

.bash_profile :定義了用戶的我的化路徑與環境變量的文件名稱。每一個用戶均可使用該文件輸入專用於本身使用的shell信息,當用戶登陸時,該文件僅僅執行一次(在這個文件中有執行.bashrc的腳本)網絡

.bashrc :該文件包含專用於你的shell的bash信息,當登陸時以及每次打開新的shell時,該該文件被讀取例如你能夠將用戶自定義的alias或者自定義變量寫到這個文件中。this

.bash_history :記錄命令歷史用的。spa

.bash_logout :當退出shell時,會執行該文件。能夠把一些清理的工做放到這個文件中。命令行

3、centos6的啓動過程code

一、內核引導orm

當計算機打開電源後,首先是BIOS開機自檢,按照BIOS中設置的啓動設備(一般是硬盤)來啓動。緊接着由啓動設備上的grub程序開始引導Linux,當引導程序成功完成引導任務後,Linux從它們手中接管了CPU的控制權,而後CPU就開始執行Linux的核心映象代碼,開始了Linux啓動過程。也就是所謂的內核引導開始了,在內核引導過程當中實際上是很複雜的,咱們就當它是一個黑匣子,反正是Linux內核作了一系列工做,最後內核調用加載了init程序,至此內核引導的工做就完成了。交給了下一個主角init.

二、運行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/目錄下。

三、系統初始化

系統初始化,就是去執行/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也會被執行,一般咱們會把開機啓動執行的命令放到這個腳本下。服務執行完,系統初始化也就完成了。接下來該創建終端了。

四、創建終端

創建終端是由配置文件/etc/init/tty.conf, /etc/init/serial.conf和/etc/sysconfig/init等配置文件來完成的。在二、三、四、5的運行級別中都將以respawn方式運行mingetty程序,mingetty程序能打開終端、設置模式。同時它會顯示一個文本登陸界面,這個界面就是咱們常常看到的登陸界面,在這個登陸界面中會提示用戶輸入用戶名,而用戶輸入的用戶將做爲參數傳給login程序來驗證用戶身份。

五、用戶登陸系統

對於運行級別爲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

相關文章
相關標籤/搜索