1. 程式人生 > >理解Linux環境變數及配置檔案執行順序

理解Linux環境變數及配置檔案執行順序

每個使用者都有自己專屬的執行環境,這個環境是由一組變數所定義,這些變數稱之為環境變數。使用者可以修改環境變數以滿足自己的要求。

設定環境變數:$export NAME="HELLOWORLD"  ( 臨時變數,重啟系統將失效)

顯示環境變數:$echo $NAME

env 命令檢視當前使用者的環境變數

如果要想把環境保存於系統,以便下次開機還能生效就必須配置到以下檔案中:

     /etc/profile;~/ .bash_profile~/ .bash_login~/.profile;~/ .bash_logout; 

    /etc/bash.bashrc;~/.bashrc;

那麼他們之間有什麼樣的區別呢?

首先理解一下概念:

    login shell:使用者通過終端登入憑藉使用者名稱和密碼登入控制檯的動作是login shell,也就是說最終會呼叫login命令的操作都可稱之為login shell。

    non-login shell:使用者在圖形介面啟動一個terminal,或者執行/bin/bash,/usr/bin/bash都屬於non-login shell。

使用者登入時,會讀取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  

注意:1. /etc/profile 是全域性配置,任意一個使用者登入的時候都會載入該配置檔案內容,而~開頭的幾個配置檔案只是在相應使用者登入的時候才會載入

            2. 上面幾個檔案只會在使用者登入的時候載入一次,在使用者重新登入之前,即使配置檔案被修改了,也不會在自動重新整理

 退出互動控制檯,會執行~/.bash_logout 

Java程式碼  收藏程式碼
  1. IF ~/.bash_logout exists THEN  
  2.     execute ~/.bash_logout  
  3. END IF  

 對於/etc/bash.bashrc 和~/.bashrc,是在non login shell 啟動時執行,也就意味著在圖形介面每開啟一次terminal,就會讀取一次該檔案。

/etc/bash.bashrc是每個使用者都有效的,而~/.bashrc是隻對對應使用者有效。

Java程式碼  收藏程式碼
  1. IF ~/.bashrc exists THEN  
  2.     execute ~/.bashrc  
  3. END IF  

在很多Redhad發行版中和Ubuntu發行版中,如果.bashrc存在於home目錄,它將從.bash_profile或.profile中執行。即執行.bash_profile或.profile配置時會同時執行.bashrc配置檔案內容。

下面是.bash_profile或.profile中有的程式碼

# Run .bashrc if it exists

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

 總的來說,配置檔案分兩種:1. login shell 在登入時即生效

                                                     2. non login shell 在每次開啟終端時都會生效

同時 login shell 又分為登入時和退出時兩種情況。

注意: 1. /etc/environment是整個系統的環境,而/etc/profile是所有使用者的環境,前者啟動系統後就會去讀取該檔案,後者只有在使用者登入的時候才去讀取

             2. 當用戶修改配置檔案之後,系統不會自動更新,因此使用者可以採用source指令 或 .指令(“點”指令)來手動重新整理,操作方法為:

                          source 你要重新整理的檔案路徑     或      . 你要重新整理的檔案路徑

                 但是,在終端執行該指令時,只會對當前終端有效,對於其他所有終端無效。

                 因此,修改profile類配置檔案,如/etc/profile、~/.profile之後,最有效的辦法還是使用者退出再登入。

                 而bashrc類配置檔案由於跪在每次重開終端時就遊戲,所以修改配置後關閉終端再重開即可。

本人現在是有/etc/profile;~/.profile;~/ .bash_logout

/etc/bash.bashrc;~/.bashrc;

因為比較好記憶,兩個profile,兩個bashrc,一個bash_logout