理解Linux環境變量及配置文件執行順序

每一個用戶都有本身專屬的運行環境,這個環境是由一組變量所定義,這些變量稱之爲環境變量。用戶能夠修改環境變量以知足本身的要求。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讀取文件的順序是:終端

 

 

  1.   /etc/profile密碼

  2. ~/.bash_profile

  3. ~/.bash_login

  4. ~/.profile

/etc/profile 是必需要執行的,而後後面3個,按照順序誰存在就執行誰,而後後面的就不會再執行。其邏輯可用代碼表示爲:

 

Java代碼  收藏代碼

  1. execute /etc/profile  

  2. IF ~/.bash_profile exists THEN  

  3.     execute ~/.bash_profile  

  4. ELSE  

  5.     IF ~/.bash_login exist THEN  

  6.         execute ~/.bash_login  

  7.     ELSE  

  8.         IF ~/.profile exist THEN  

  9.             execute ~/.profile  

  10.         END IF  

  11.     END IF  

  12. END IF  

 

 退出交互控制檯,執行的文件是:

 

Java代碼  收藏代碼

  1. IF ~/.bash_logout exists THEN  

  2.     execute ~/.bash_logout  

  3. END IF  

 

 對於~/.bashrc,是在non login shell 啓動時執行,也就意味着在圖形界面每開啓一次terminal,就會讀取一次該文件

 

Java代碼  收藏代碼

  1. IF ~/.bashrc exists THEN  

  2.     execute ~/.bashrc  

  3. 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是全部用戶的環境,前者啓動系統後就會去讀取該文件,後者只有在用戶登陸的時候纔去讀取

相關文章
相關標籤/搜索