簡介
環(huán)境變量是在操作系統(tǒng)中一個具有特定名字的對象见坑,它包含了一個或多個應(yīng)用程序?qū)⑹褂玫降男畔⑶眚恰inux是一個多用戶的操作系統(tǒng)违施,每個用戶登錄系統(tǒng)時都會有一個專用的運行環(huán)境,通常情況下每個用戶的默認(rèn)的環(huán)境都是相同的尚蝌。這個默認(rèn)環(huán)境就是一組環(huán)境變量的定義迎变。每個用戶都可以通過修改環(huán)境變量的方式對自己的運行環(huán)境進行配置。
分類
根據(jù)環(huán)境變量的生命周期我們可以將其分為永久性變量和臨時性變量飘言,根據(jù)用戶等級的不同又可以將其分為系統(tǒng)級變量和用戶級變量衣形。怎么分都無所謂,主要是對它的理解热凹。
對所有用戶生效的永久性變量(系統(tǒng)級)
這類變量對系統(tǒng)內(nèi)的所有用戶都生效泵喘,所有用戶都可以使用這類變量。作用范圍是整個系統(tǒng)般妙。?
設(shè)置方式: 用vim在/etc/profile文件中添加我們想要的環(huán)境變量纪铺。?
當(dāng)然,這個文件只有在root(超級用戶)下才能修改碟渺。我們可以在etc目錄下使用ls -l查看這個文件的用戶及權(quán)限鲜锚。?
利用vim打開/etc/ profile文件,用export指令添加環(huán)境變量苫拍。?
【注意】:添加完成后新的環(huán)境變量不會立即生效芜繁,除非你調(diào)用source /etc/profile 該文件才會生效。否則只能在下次重進此用戶時才能生效绒极。
對單一用戶生效的永久性變量(用戶級)
該類環(huán)境變量只對當(dāng)前的用戶永久生效骏令。也就是說假如用戶A設(shè)置了此類環(huán)境變量,這個環(huán)境變量只有A可以使用垄提。而對于其他的B,C,D,E….用戶等等榔袋,這個變量是不存在的。
設(shè)置方法:在用戶主目錄”~”下的隱藏文件 “.bash_profile”中添加自己想要的環(huán)境變量铡俐。?
查看隱藏文件: ls -a或ls -al?
利用vim打開文件凰兑,利用export添加環(huán)境變量。與上相同审丘。同樣注意吏够,添加完成后新的環(huán)境變量不會立即生效,除非你調(diào)用source ./.bash_profile 該文件才會生效滩报。否則只能在下次重進此用戶時才能生效锅知。
可以看到我在上圖中用紅框框住了兩個文件,.bashrc和.bash_profile露泊。原則上來說設(shè)置此類環(huán)境變量時在這兩個文件任意一個里面添加都是可以的喉镰。
~/.bash_profile是交互式login方式進入bash shell運行。?
~/ .bashrc是交互式non-login方式進入bash shell運行惭笑。
二者設(shè)置大致相同侣姆。通俗點說生真,就是.bash_profile文件只會在用戶登錄的時候讀取一次,而.bashrc在每次打開終端進行一次新的會話時都會讀取捺宗。
臨時有效的環(huán)境變量(只對當(dāng)前shell有效)
此類環(huán)境變量只對當(dāng)前的shell有效柱蟀。當(dāng)我們退出登錄或者關(guān)閉終端再重新打開時,這個環(huán)境變量就會消失蚜厉。是臨時的长已。
設(shè)置方法:直接使用export指令添加。?
設(shè)置環(huán)境變量常用的幾個指令
echo
查看顯示環(huán)境變量昼牛,使用時要加上符號“”例:echoPATH
export
設(shè)置新的環(huán)境變量?
export 新環(huán)境變量名=內(nèi)容?
例:export MYNAME=”LLZZ”
修改環(huán)境變量
修改環(huán)境變量沒有指令术瓮,可以直接使用環(huán)境變量名進行修改。?
例:MYNAME=”ZZLL”
env
查看所有環(huán)境變量
set
查看本地定義的所有shell變量
unset
刪除一個環(huán)境變量?
例 unset MYNAME
readonly
設(shè)置只讀環(huán)境變量贰健。?
例:readonly MYNAME
常用的幾個環(huán)境變量(一般都為大寫)
PATH
指定命令的搜索路徑胞四。通過設(shè)置環(huán)境變量PATH可以讓我們運行程序或指令更加方便。?
echo $PATH 查看環(huán)境變量PATH伶椿。?
每一個冒號都是一個路徑辜伟,這些搜索路徑都是一些可以找到可執(zhí)行程序的目錄列表。當(dāng)我們輸入一個指令時脊另,shell會先檢查命令是否是內(nèi)部命令导狡,不是的話會再檢查這個命令是否是一個應(yīng)用程序。然后shell會試著從這些搜索路徑偎痛,即PATH(上圖中路徑)中尋找這些應(yīng)用程序旱捧。如果shell在這些路徑目錄里沒有找到可執(zhí)行文件。則會報錯踩麦。若找到廊佩,shell內(nèi)部命令或應(yīng)用程序?qū)⒈环纸鉃橄到y(tǒng)調(diào)用并傳給Linux內(nèi)核。
舉個例子:?
現(xiàn)在有一個c程序test.c通過gcc編譯生成的可執(zhí)行文件a.out(功能:輸出helloworld)靖榕。我們平常執(zhí)行這個a.out的時候是使用?
①相對路徑調(diào)用方式: ./a.out (”.”代表當(dāng)前目錄,”/”分隔符)顽铸。?
②還可以使用絕對路徑調(diào)用方式:將其全部路徑寫出:/home/hry/test/a.out(此路徑是我的工作目錄路徑茁计,只是個例子,僅供參考)?
③通過設(shè)置PATH環(huán)境變量谓松,直接用文件名調(diào)用:?
在沒設(shè)置PATH前星压,我們直接使用a.out調(diào)用程序會報錯,因為shell并沒有從PATH已擁有的搜索路徑目錄中找到a.out這個可執(zhí)行程序鬼譬。?
使用export指令娜膘,將a.out的路徑添加到搜索路徑當(dāng)中,export PATH=$PATH:路徑?
我們就可以使用a.out直接執(zhí)行程序优质。?
HOME
指定用戶的主工作目錄竣贪,即為用戶登錄到Linux系統(tǒng)中時的默認(rèn)目錄军洼,即“~”。
HISTSIZE
指保存歷史命令記錄的條數(shù)演怎。我們輸入的指令都會被系統(tǒng)保存下來匕争,這個環(huán)境變量記錄的就是保持指令的條數(shù)。一般為1000爷耀。?
這些歷史指令都被保存在用戶工作主目錄“~”下的隱藏文件.bash_profile中甘桑。?
我們可以通過指令history來查看。?
LOGNAME
指當(dāng)前用戶的登錄名
HOSTNAME
指主機的名稱歹叮。
SHELL
指當(dāng)前用戶用的是哪種shell
LANG/LANGUGE
和語言相關(guān)的環(huán)境變量跑杭,使用多種語言的用戶可以修改此環(huán)境變量。
指當(dāng)前用戶的郵件存放目錄
PS1
命令提示符咆耿,root用戶是#德谅,普通用戶是$
PS2
附屬提示符,默認(rèn)是“>”
SECONDS
從當(dāng)前shell開始運行所流逝的秒數(shù)
總結(jié)
環(huán)境變量是和shell緊密相關(guān)的票灰,用戶登錄系統(tǒng)后就啟動了一個shell女阀,對于Linux來說一般是bash(Bourne Again shell,Bourne shell(sh)的擴展)屑迂,也可以切換到其他版本的shell浸策。bash有兩個基本的系統(tǒng)級配置文件:/etc/bashrc和/etc/profile。這些配置文件包含了兩組不同的變量:shell變量和環(huán)境變量惹盼。shell變量是局部的庸汗,而環(huán)境變量是全局的。環(huán)境變量是通過shell命令來設(shè)置手报。設(shè)置好的環(huán)境變量又可以被所以當(dāng)前用戶的程序使用蚯舱。