每一個用戶都有本身專屬的運行環境,這個環境是由一組變量所定義,這些變量稱之爲環境變量。用戶能夠修改環境變量以知足本身的要求。shell
設置環境變量:$export NAME="HELLOWORLD" (臨時變量,重啓系統將失效)bash
顯示環境變量:$echo $NAMEterminal
env 命令查看當前用戶的環境變量it
若是要想把環境保存於系統,以便下次開機還能生效就必須配置到如下文件中:~/.bashrc;~/ .bash_profile,;~/.profile; /etc/profile;etc/bash.bashrc,那麼他們之間有什麼樣的區別呢?登錄
首先理解一下概念:變量
login shell:用戶經過終端登陸憑藉用戶名和密碼登陸控制檯的動做是login shell,也就是說最終會調用login命令的操做均可稱之爲login shell。配置
non-login shell:用戶在圖形界面啓動一個terminal,或者執行/bin/bash,/usr/bin/bash都屬於non-login shell。file
對於login shell讀取文件的順序是:終端
/etc/profile密碼
~/.bash_profile
~/.bash_login
~/.profile
/etc/profile 是必需要執行的,而後後面3個,按照順序誰存在就執行誰,而後後面的就不會再執行。其邏輯可用代碼表示爲:
execute /etc/profile
IF ~/.bash_profile exists THEN
execute ~/.bash_profile
ELSE
IF ~/.bash_login exist THEN
execute ~/.bash_login
ELSE
IF ~/.profile exist THEN
execute ~/.profile
END IF
END IF
END IF
退出交互控制檯,執行的文件是:
IF ~/.bash_logout exists THEN
execute ~/.bash_logout
END IF
對於~/.bashrc,是在non login shell 啓動時執行,也就意味着在圖形界面每開啓一次terminal,就會讀取一次該文件
IF ~/.bashrc exists THEN
execute ~/.bashrc
END IF
在不少Redhad發行版中和Ubuntu發行版中,若是.bashrc存在於home目錄,它將從.bash_profile或.profile中運行,。多是有如下代碼
# Run .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
瞭解他們的執行順序後,就知道環境變量該怎麼放了。筆者將Java的環境變量都配置於~/.profile中。
另:/etc/environment是整個系統的環境,而/etc/profile是全部用戶的環境,前者啓動系統後就會去讀取該文件,後者只有在用戶登陸的時候纔去讀取