使用ubuntu 進行開發繞不開的就是環境變數的配置,由於linux系統嚴格的許可權管理,造成ubuntu系統有多個環境變數配置檔案,如果不了解其呼叫順序,很有可能遇到配置了環境變數,而沒有其作用的問題。本文將介紹ubuntu linux系統的環境變數。
/etc/profile:在登入時,作業系統定製使用者環境時使用的第乙個檔案,此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行。並從/etc/profile.d目錄的配置檔案中蒐集shell的設定。這個檔案一般就是呼叫/etc/bash.bashrc檔案。
/etc/bash.bashrc:系統級的bashrc檔案,為每乙個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取.
/etc/environment: 在登入時作業系統使用的第二個檔案,系統在讀取你自己的profile前,設定環境檔案的環境變數。
~/.profile: 在登入時用到的第三個檔案 是.profile檔案,每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅僅執行一次!預設情況下,他設定一些環境變數,執行使用者的.bashrc檔案。
~/.bashrc:該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時,該該檔案被讀取。不推薦放到這兒,因為每開乙個shell,這個檔案會讀取一次,效率 上講不好。
~/.bash_profile:每個使用者都可使用該檔案輸入專用於自己 使用的shell資訊,當使用者登入時,該檔案僅僅執行一次!預設情況下,他設定一些環境變數,執行使用者的.bashrc檔案。~/.bash_profile 是互動式、login 方式進入 bash 執行的~/.bashrc是互動式 non-login 方式進入 bash 執行的通常二者設定大致相同,所以通常前者會呼叫後者。
~./bash_login:不推薦使用這個,這些不會影響圖形介面。而且.bash_profile優先順序比bash_login高。當它們存在時,登入shell啟動時會讀取它們。
~/.bash_logout:當每次退出系統(退出bash shell)時,執行該檔案.
~/.pam_environment:使用者級的環境變數設定檔案。
另外,/etc/profile中設定的變數(全域性)的可以作用於任何使用者,而~/.bashrc等中設定的變數(區域性)只能繼承 /etc/profile中的變數,他們是"父子"關係。
首先來做乙個實驗:
先將export lang=zh_cn加入/etc/profile ,退出系統重新登入,登入提示顯示英文。將/etc/profile中的export lang=zh_cn刪除,將lnag=zh_cn加入/etc/environment,退出系統重新登入,登入提示顯示中文。
使用者環境建立的過程中總是先執行/etc/profile然後在讀取/etc/environment。為什麼會有如上所敘的不同呢?
應該是先執行/etc/environment,後執行/etc/profile。
/etc/environment是設定整個系統的環境,而/etc/profile是設定所有使用者的環境,前者與登入使用者無關,後者與登入使用者有關。
系統應用程式的執行與使用者環境可以是無關的,但與系統環境是相關的,所以當你登入時,你看到的提示資訊,比如日期、時間資訊的顯示格式與系統環境的lang是相關的,預設lang=en_us,如果系統環境lang=zh_cn,則提示資訊是中文的,否則是英文的。
對於使用者的shell初始化而言是先執行/etc/profile, 再讀取檔案/etc/environment.
對整個系統而言是先執行/etc/environment。這樣理解正確嗎?
/etc/enviroment -->/etc/profile --> $home/.profile -->$home/.env (如果存在)
/etc/profile 是所有使用者的環境變數
/etc/enviroment是系統的環境變數
登陸系統時shell讀取的順序應該是
/etc/profile ->/etc/enviroment -->$home/.profile-->$home/.env
原因應該是使用者環境和系統環境的區別了
如果同乙個變數在使用者環境(/etc/profile)和系統環境(/etc/environment) 有不同的值那應該是以使用者環境為準了。
備註:在shell中執行程式時,shell會提供一組環境變數。export可新增,修改或刪除環境變數,供後續執行的程式使用。export的效力僅及於該此登陸操作。
在登入linux時要執行檔案的過程如下:
在剛登入linux時,首先啟動/etc/profile 檔案,然後再啟動使用者目錄下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile檔案中的其中乙個,執行的順序為:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile檔案存在的話,一般還會執行 ~/.bashrc檔案。因為在 ~/.bash_profile檔案中一般會有下面的**:
if[ -f ~/.bashrc ] ; then
../bashrc
fi
~/.bashrc中,一般還會有以下**:
if[ -f /etc/bashrc ] ; then
./bashrc
fi
所以,~/.bashrc會呼叫/etc/bashrc檔案。最後,在退出shell時,還會執行~/.bash_logout檔案。
執行順序為:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc-> /etc/bashrc -> ~/.bash_logout
由以上分析可知:
/etc/profile全域性的,隨系統啟動設定【設定這個檔案是一勞永逸的辦法】
/root/.profile和/home/myname/.profile只對當前視窗有效。
/root/.bashrc和 /home/yourname/.bashrc隨系統啟動,設定使用者的環境變數【平時設定這個檔案就可以了】
那麼要配置ubuntu的環境變數,就是在這幾個配置檔案中找乙個合適的檔案進行操作了;如想將乙個路徑加入到$path中,可以由下面這樣幾種新增方法:
$path="$path:/my_new_path" (關閉shell,會還原path)
$sudo gedit /etc/profile
在裡面加入:
exportpath="$path:/my_new_path"
$ sudo gedit /root/.bashrc
在裡面加入:
export path="$path:/my_new_path"
後兩種方法一般需要重新登出系統才能生效,最後可以通過echo命令測試一下:
$ echo $path
輸出已經是新路徑了。
舉個列子,如果想把當前路徑加入到環境變數中去,就可以這樣做:
$ path ="$path:."
這樣執行自己編寫的shell指令碼時就可以不輸入./了
綜上所述,在ubuntu 系統中/etc/profile檔案是全域性的環境變數配置檔案,它適用於所有的shell。在我們登陸linux系統時,首先啟動/etc/profile檔案,然後再啟動使用者目錄下的~/.bash_profile、~/.bash_login或~/.profile檔案中的其中乙個,執行的順序和上面的排序一樣。如果~/.bash_profile檔案存在的話,一般還會執行~/.bashrc檔案。
ubuntu配置環境變數
在ubuntu上用android的adb工具發現環境變數有問題,就從網上看了會linux下環境變數的配置,對其環境變數的配置檔案有所了解,這裡單說一下可以配置環境變數的檔案 1.etc profile 首先是全域性的,適用於所有的shell 在登入時,作業系統配置使用者首選項使用的第乙個檔案,此檔案...
ubuntu 環境變數配置
vi etc profile 在最後的地方 多個環境變數 然後 source etc profile 臨時設定 export path opt android studio bin path 當前使用者的全域性設定 vim profile,新增行 export path opt android st...
Ubuntu 配置環境變數
開啟 bashrc 檔案 sudo vim bashrc在檔案末尾新增 可執行檔案程式的路徑 export path bin path gcc找到標頭檔案的路徑 export c include path include c include path g 找到標頭檔案的路徑 export cplus...