Shell變量有局部變量、環境變量之分。局部變量就是指在某個Shell中生效的變量,只在此次登錄中有效。環境變量通常又稱“全局變量”,雖然在Shell中變量默認就是全局的,但是為了讓子Shall繼承當前Shell的變量,需要使用export內建命令將其導出為環境變量。
一、linux系統變量的類型
按變量的生存周期划分:
永久的:需要修改配置文件,變量永久生效。
臨時的:使用export命令聲明即可,變量在關閉shell時失效。
在配置永久的環境變量時,又可以按照作用范圍分為:
用戶環境變量
系統環境變量。
系統環境變量對所有系統用戶都有效,用戶環境變量僅僅對當前的用戶有效。
二、設置環境變量
1. 直接運行export命令定義變量
在shell的命令行下直接使用[export 變量名=變量值] 定義變量。該變量只在當前的shell(BASH)或其子shell(BASH)下是有效的,shell關閉了,變量也就失效了,再打開新shell時就沒有這個變量,需要使用的話還需要重新定義。
2. 修改系統環境變量
系統環境變量一般保存在下面的文件中
/etc/profile
全局(公有)配置,不管是哪個用戶,登錄時都會讀取該文件。
/etc/bash.bashrc
它也是全局(公有)的 bash執行時,不管是何種方式,都會讀取此文件。
/etc/environment
不要輕易修改此文件
3. 修改用戶環境變量
用戶環境變量通常被存儲在下面的文件中:
~/.profile
若bash是以login方式執行時,讀取~/.bash_profile,若它不存在,則讀取~/.bash_login,若前兩者不存在,讀取~/.profile。
~/.bash_profile 或者~./bash_login
若bash是以login方式執行時,讀取~/.bash_profile,若它不存,則讀取~/.bash_login,若前兩者不存在,讀取 ~/.profile。
只有bash是以login形式執行時,才會讀取.bash_profile,Unbutu默認沒有此文件,可新建。 通常該配置文件還會配置成去讀取~/.bashrc。
~/.bashrc
當bash是以non-login形式執行時,讀取此文件。若是以login形式執行,則不會讀取此文件。
~/.bash_profile是交互式、login 方式進入 bash 運行的
~/.bashrc 是交互式 non-login 方式進入 bash 運行的通常二者設置大致相同,所以通常前者會調用后者。
4. 修改環境變量配置文件
如想將一個路徑加入到環境變量(例如$PATH)中,可以像下面這樣做(修改/etc/profile):
sudo vi /etc/profile
以環境變量PATH為例子,環境變量的聲明格式:
PATH=$PATH:PATH_1:PATH_2:PATH_3:------:PATH_N export PATH
你可以自己加上指定的路徑,中間用冒號隔開。環境變量更改后,在用戶下次登陸時生效,如果想立刻生效,則可執行下面的語句:
$source /etc/profile
三、環境配置文件的區別
1. profile、 bashrc、.bash_profile、 .bashrc介紹
bash會在用戶登錄時,讀取下列四個環境配置文件:
全局環境變量設置文件:/etc/profile、/etc/bashrc。 用戶環境變量設置文件:~/.bash_profile、~/.bashrc。
讀取順序:① /etc/profile、② ~/.bash_profile、③ ~/.bashrc、④ /etc/bashrc。
① /etc/profile:此文件為系統的每個用戶設置環境信息,系統中每個用戶登錄時都要執行這個腳本,如果系統管理員希望某個設置對所有用戶都生效,可以寫在這個腳本里,該文件也會從/etc/profile.d目錄中的配置文件中搜集shell的設置。 ② ~/.bash_profile:每個用戶都可使用該文件設置專用於自己的shell信息,當用戶登錄時,該文件僅執行一次。默認情況下,他設置一些環境變量,執行用戶的.bashrc文件。 ③ ~/.bashrc:該文件包含專用於自己的shell信息,當登錄時以及每次打開新shell時,該文件被讀取。 ④ /etc/bashrc:為每一個運行bash shell的用戶執行此文件,當bash shell被打開時,該文件被讀取。
2 .bashrc和.bash_profile的區別
.bash_profile會用在登陸shell, .bashrc 使用在交互式非登陸 shell 。簡單說來,它們的區別主要是.bash_profile是在你每次登錄的時候執行的;.bashrc是在你新開了一個命令行窗口時執行的。
當通過控制台進行登錄(輸入用戶名和密碼):在初始化命令行提示符的時候會執行.bash_profile 來配置你的shell環境。但是如果已經登錄到機器,在Gnome或者是KDE也開了一個新的終端窗口(xterm),這時,.bashrc會在窗口命令行提示符出現前被執行。當你在終端敲入/bin/bash時.bashrc也會在這個新的bash實例啟動的時候執行。
3. 建議
大多數的時候你不想維護兩個獨立的配置文件,一個登錄的一個非登錄的shell。當你設置PATH時,你想在兩個文件都適用。可以在.bash_profile中調用.bashrc,然后將PATH和其他通用的設置放到.bashrc中。
要做到這幾點,添加以下幾行到.bash_profile中:
if [ -f ~/.bashrc ]; then . ~/.bashrc fi
現在,當你從控制台登錄機器的時候,.bashrc就會被執行。
四、常用的環境變量
BASH Bash Shell的全路徑
CDPATH 用於快速進入某個目錄。
PATH 決定了shell將到哪些目錄中尋找命令或程序
HOME 當前用戶主目錄
HISTSIZE 歷史記錄數
LOGNAME 當前用戶的登錄名
HOSTNAME 指主機的名稱
SHELL 當前用戶Shell類型
LANGUGE 語言相關的環境變量,多語言可以修改此環境變量
MAIL 當前用戶的郵件存放目錄
PS1 基本提示符,對於root用戶是#,對於普通用戶是$
Reference
[1] /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc
http://blog.chinaunix.net/uid-26435987-id-3400127.html
[2] Linux如何修改env看到的環境變量? .bashrc和.bash_profile區別
http://blog.csdn.net/xifeijian/article/details/13355031
[3] linux環境變量,bashrc與bashprofile
http://blog.sina.com.cn/s/blog_43e5ad4e0101ei43.html
