一、環境變量的概念
1、環境變量的含義
程序(操作系統命令和應用程序)的執行都需要運行環境,這個環境是由多個環境變量組成的。
2、環境變量的分類
1)按生效的范圍分類。
系統環境變量:公共的,對全部的用戶都生效。
用戶環境變量:用戶私有的、自定義的個性化設置,只對該用戶生效。
2)按生存周期分類。
永久環境變量:在環境變量腳本文件中配置,用戶每次登錄時會自動執行這些腳本,相當於永久生效。
臨時環境變量:使用時在Shell中臨時定義,退出Shell后失效。
3、Linux環境變量
Linux環境變量也稱之為Shell環境量變,以下划線和字母打頭,由下划線、字母(區分大小寫)和數字組成,習慣上使用大寫字母,例如PATH、HOSTNAME、LANG等。
二、常用的環境變量
1、查看環境變量
1)env命令
在Shell下,用env命令查看當前用戶全部的環境變量。
上圖只截取了部分環境變量,並非全部。
用env命令的時候,滿屏顯示了很多環境變量,不方便查看,可以用grep篩選。
env|grep 環境變量名
例如查看環境變量名中包含PATH的環境變量。
env|grep PATH
2)echo命令
echo $環境變量名
注意,符號$不能缺少,這是語法規定。
2、常用的環境變量
1)PATH
可執行程序的搜索目錄,可執行程序包括Linux系統命令和用戶的應用程序,PATH變量的具體用法本文后面的章節中有詳細的介紹。
2)LANG
Linux系統的語言、地區、字符集,LANG變量的具體用法本文后面的章節中有詳細的介紹。
3)HOSTNAME
服務器的主機名。
4)SHELL
用戶當前使用的Shell解析器。
5)HISTSIZE
保存歷史命令的數目。
6)USER
當前登錄用戶的用戶名。
7)HOME
當前登錄用戶的主目錄。
8)PWD
當前工作目錄。
9)LD_LIBRARY_PATH
C/C++語言動態鏈接庫文件搜索的目錄,它不是Linux缺省的環境變量,但對C/C++程序員來說非常重要,具體用法本文后面的章節中有詳細的介紹。
10)CLASSPATH
JAVA語言庫文件搜索的目錄,它也不是Linux缺省的環境變量,但對JAVA程序員來說非常重要,具體用法本文后面的章節中有詳細的介紹。
三、設置環境量
變量名='值'
export 變量名
或
export 變量名='值'
如果環境變量的值沒有空格等特殊符號,可以不用單引號包含。
示例:
export ORACLE_HOME=/oracle/home
export ORACLE_BASE=/oracle/base
export ORACLE_SID=snorcl11g
export NLS_LANG='Simplified Chinese_China.ZHS16GBK'
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:.
采用export設置的環境變量,在退出Shell后就會失效,下次登錄時需要重新設置。如果希望環境變量永久生效,需要在登錄腳本文件中配置。
1、系統環境變量
系統環境變量對全部的用戶生效,設置系統環境變量有三種方法。
1)在/etc/profile文件中設置。
用戶登錄時執行/etc/profile文件中設置系統的環境變量。但是,Linux不建議在/etc/profile文件中設置系統環境變量。
2)在/etc/profile.d目錄中增加環境變量腳本文件,這是Linux推薦的方法。
/etc/profile在每次啟動時會執行/etc/profile.d下全部的腳本文件。/etc/profile.d比/etc/profile好維護,不想要什么變量直接刪除/etc/profile.d下對應的 shell 腳本即可。
/etc/profile.d目錄下有很多腳本文件,例如:
在以上示例中,/etc/profile.d目錄中的oracle.sh是Oracle數據庫的環境變量配置文件,內容如下:
3)在/etc/bashrc文件中設置環境變量。
該文件配置的環境變量將會影響全部用戶使用的bash shell。但是,Linux也不建議在/etc/bashrc文件中設置系統環境變量。
2、用戶環境變量
用戶環境變量只對當前用戶生效,設置用戶環境變量也有多種方法。
在用戶的主目錄,有幾個特別的文件,用ls
是看不見的,用 ls .bash_*
可以看見。
1).bash_profile(推薦首選)
當用戶登錄時執行,每個用戶都可以使用該文件來配置專屬於自己的環境變量。
2).bashrc
當用戶登錄時以及每次打開新的Shell時該文件都將被讀取,不推薦在里面配置用戶專用的環境變量,因為每開一個Shell,該文件都會被讀取一次,效率肯定受影響。
3).bash_logout
當每次退出系統(退出bash shell)時執行該文件。
4).bash_history
保存了當前用戶使用過的歷史命令。
3、環境變量腳本文件的執行順序
環境變量腳本文件的執行順序如下:
/etc/profile->/etc/profile.d->/etc/bashrc->用戶的.bash_profile->用戶的.bashrc
同名的環境變量,如果在多個腳本中有配置,以最后執行的腳本中的配置為准。
還有一個問題需要注意,在/etc/profile中執行了/etc/profile.d的腳本,代碼如下:
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
所以,/etc/profile.d和/etc/profile的執行順序還要看代碼怎么寫。
四、重要環境變量的詳解
1、PATH環境變量
可執行程序的搜索目錄,可執行程序包括Linux系統命令和用戶的應用程序。如果可執行程序的目錄不在PATH指定的目錄中,執行時需要指定目錄。
1)PATH環境變量存放的是目錄列表,目錄之間用冒號:分隔,最后的圓點.表示當前目錄。
export PATH=目錄1:目錄2:目錄3:......目錄n:.
2)PATH缺省包含了Linux系統命令所在的目錄(/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin),如果不包含這些目錄,Linux的常用命令也無法執行(要輸入絕對路徑才能執行)。
示例:
3)在用戶的.bash_profile文件中,會對PATH進行擴充,如下:
export PATH=$PATH:$HOME/bin
4)如果PATH變量中沒有包含圓點.,執行當前目錄下的程序需要加./或使用絕對路徑。
示例:
2、LANG環境變量
LANG環境變量存放的是Linux系統的語言、地區、字符集,它不需要系統管理員手工設置,/etc/profile會調用/etc/profile.d/lang.sh腳本完成對PATH的設置。
CentOS6.x 字符集配置文件在/etc/syscconfig/i18n文件中。
CentOS7.x 字符集配置文件在/etc/locale.conf文件中,內容如下:
3、LD_LIBRARY_PATH環境變量
C/C++語言動態鏈接庫文件搜索的目錄,它不是Linux缺省的環境變量,但對C/C++程序員來說非常重要。
LD_LIBRARY_PATH環境變量存放的也是目錄列表,目錄之間用冒號:分隔,最后的圓點.表示當前目錄,與PATH的格式相同。
export LD_LIBRARY_PATH=目錄1:目錄2:目錄3:......目錄n:.
4、CLASSPATH
JAVA語言庫文件搜索的目錄,它也不是Linux缺省的環境變量,但對JAVA程序員來說非常重要。
CLASSPATH環境變量存放的也是目錄列表,目錄之間用冒號:分隔,最后的圓點.表示當前目錄,與PATH的格式相同。
五、環境變量的生效
1)在Shell下,用export設置的環境變量對當前Shell立即生效,Shell退出后失效。
2)在腳本文件中設置的環境變量不會立即生效,退出Shell后重新登錄時才生效,或者用source命令讓它立即生效,例如:
source /etc/profile
六、應用經驗
雖然設置環境變量的方法有多種,但是建議系統環境變量建議在/etc/profile.d目錄中配置,用戶環境變量在用戶的.bash_profile中配置,不建議在其它腳本文件中配置環境變,會增加運維的麻煩,容易出錯。
七、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!