對(duì)于Linux初學(xué)者來(lái)說(shuō),環(huán)境變量是個(gè)很陌生的名詞,很多人不能理解它是到底是什么,可以用來(lái)干嘛。其實(shí),環(huán)境變量,在windows中也有,只是我們平時(shí)不怎么直接接觸它,所以我們下面也只針對(duì)Linux來(lái)講環(huán)境變量。
首先,在百度百科中,環(huán)境變量的解釋是這樣的:
環(huán)境變量(environment variables)一般是指在操作系統(tǒng)中用來(lái)指定操作系統(tǒng)運(yùn)行環(huán)境的一些參數(shù),如:臨時(shí)文件夾位置和系統(tǒng)文件夾位置等。
環(huán)境變量是在操作系統(tǒng)中一個(gè)具有特定名字的對(duì)象,它包含了一個(gè)或者多個(gè)應(yīng)用程序所將使用到的信息。例如Windows和DOS操作系統(tǒng)中的path環(huán)境變量,當(dāng)要求系統(tǒng)運(yùn)行一個(gè)程序而沒(méi)有告訴它程序所在的完整路徑時(shí),系統(tǒng)除了在當(dāng)前目錄下面尋找此程序外,還應(yīng)到path中指定的路徑去找。用戶通過(guò)設(shè)置環(huán)境變量,來(lái)更好的運(yùn)行進(jìn)程。
描述性文字理解起來(lái)還是太抽象了,我們還是用幾個(gè)簡(jiǎn)單的例子,來(lái)學(xué)習(xí)一下環(huán)境變量吧
首先,我們登陸上服務(wù)器,然后輸入ls
命令:
vip18 10:06:09 ~
$ ls
readme.txt
可以看到,在當(dāng)前用戶vip18
的家目錄~
下,有一個(gè)文件叫readme.txt
,但是,當(dāng)前目錄下面并沒(méi)有ls
命令所對(duì)應(yīng)的可執(zhí)行文件。真正的ls
命令的可執(zhí)行文件,其實(shí)是在別處,我們用which ls
可以查看到ls
所在的位置:
vip18 10:06:13 ~
$ which ls
/bin/ls
可以看到,ls
其實(shí)是保存在/bin/ls
這個(gè)目錄下的。而我們之所以可以隨時(shí)隨地的調(diào)用ls
,是因?yàn)?strong style="color: inherit;;">當(dāng)要求系統(tǒng)運(yùn)行一個(gè)程序而沒(méi)有告訴它程序所在的完整路徑時(shí),系統(tǒng)除了在當(dāng)前目錄下面尋找此程序外,還應(yīng)到path中指定的路徑去找。接下來(lái)我們看看當(dāng)前的環(huán)境變量PATH
是什么,用echo $PATH
可以查看到
vip18 10:11:28 ~
$ echo $PATH
/trainee/vip18/bin:/trainee/vip18/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
可以看到,PATH
記錄的是很多個(gè)目錄,這些目錄以冒號(hào):
作分割,為了讓大家看的清楚,我們把冒號(hào):
替換成\n
vip18 10:27:59 ~
$ echo $PATH|tr ':' '\n'
/trainee/vip18/bin
/trainee/vip18/.local/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
其實(shí),PATH
就是記錄了很多以bin
或者sbin
為結(jié)尾的目錄,這些目錄下面就包涵了很多可執(zhí)行文件,比如我們上面提到的ls
命令所在的目錄/bin
就是倒數(shù)第4個(gè)。感興趣的可以去看看其他命令對(duì)應(yīng)的可執(zhí)行文件都記錄在哪個(gè)目錄里面,這里不再展示。
修改環(huán)境變量,其實(shí)就是對(duì)環(huán)境變量進(jìn)行重新賦值,比如我們安裝了一個(gè)軟件叫aspera
# 下載
wget -c https://download.asperasoft.com/download/sw/connect/3.8.1/ibm-aspera-connect-3.8.1.161274-linux-g2.12-64.tar.gz
# 解壓
tar zxvf ibm-aspera-connect-3.8.1.161274-linux-g2.12-64.tar.gz
# 安裝
bash ibm-aspera-connect-3.8.1.161274-linux-g2.12-64.sh
這個(gè)軟件安裝好了之后,會(huì)在用戶的家目錄下的生成一個(gè)隱藏目錄.aspera
,需要用ls -a
來(lái)查看
進(jìn)一步查看這個(gè)目錄的結(jié)構(gòu):
bin
的目錄,包涵的可執(zhí)行文件有$ ls .aspera/connect/bin/
ascp asperaconnect asperaconnect.bin asperacrypt asunprotect
假如我們想像調(diào)用ls
那樣隨時(shí)隨地的調(diào)用這個(gè)軟件的命令,即~/.aspera/connect/bin/
目錄中的可執(zhí)行文件,那么就需要把這個(gè)路徑添加到環(huán)境變量里面去,方法是:
export PATH="~/.aspera/connect/bin/:$PATH"
# 注意這里要用雙引號(hào),不能用單引號(hào)
運(yùn)行上面這一行命令之后,就可以隨時(shí)隨地得調(diào)用了,如:
但是,這方法并不能一勞永逸,我們需要把它寫(xiě)進(jìn)去.bashrc
里面去
.bashrc
是一個(gè)配置文件,也是一個(gè)隱藏文件,存在于用戶的家目錄~
下,需要用ls -a
才能查看到,當(dāng)我們每次登陸服務(wù)器時(shí),這個(gè)文件就會(huì)被執(zhí)行一次,也就是說(shuō)文件內(nèi)的代碼會(huì)被運(yùn)行一遍。因此,當(dāng)我們把export PATH="~/.aspera/connect/bin/:$PATH"
這一行命令寫(xiě)入.bashrc
后,以后每次登陸服務(wù)器,系統(tǒng)就會(huì)幫我們把這一行命令執(zhí)行一次,我們就不能再自行運(yùn)行了,方法如下:
echo export PATH="~/.aspera/connect/bin/:$PATH" >>.bashrc
這樣我們就把這一行代碼寫(xiě)入到.bashrc
里面了,我們說(shuō)過(guò),.bashrc
是在登錄服務(wù)器的時(shí)候才會(huì)被執(zhí)行,因此,我們修改好了之后,要重新登錄服務(wù)器,或者重新運(yùn)行一下.bashrc
,方法如下:
source .bashrc
這里不建議新手采用vim
來(lái)編輯.bashrc
,除非你已經(jīng)知道如何使用vim
這個(gè)工具
一些其他軟件,如conda
,在安裝的時(shí)候會(huì)有一句提示,問(wèn)我們是否要把conda
的環(huán)境添加到.bashrc
如:
Do you wish the installer to prepend the Miniconda2 install location
to PATH in your /trainee/vip18/.bashrc ? [yes|no]
[no] >>>
我們直接輸入yes,這樣conda的環(huán)境就自動(dòng)添加到.bashrc里面了,不需要像上面那樣自己添加。
有一些初學(xué)者,在修改環(huán)境變量的時(shí)候,不小心改成了這樣:
echo export PATH="~/.aspera/connect/bin/:$ PATH" >>.bashrc
咋一看好像沒(méi)什么問(wèn)題,但其實(shí)這是個(gè)大問(wèn)題,后面的$
與PATH
之間按多了一個(gè)空格,重新激活.bashrc
后,就會(huì)出現(xiàn)下面的現(xiàn)象:
上面的這些命令都用不了了,報(bào)錯(cuò)信息都寫(xiě)著:xxx is not included in the PATH environment variable
但是同時(shí),報(bào)錯(cuò)信息也給出了非常重要的一點(diǎn),如:Command 'ls' is available in '/bin/ls'
,也就是告訴你了ls
命令的可執(zhí)行文件所在的路徑,那么,我們只需要采用全路徑調(diào)用的方法即可使用這些命令了。
當(dāng)然,我們最終的解決辦法還是要把環(huán)境變量改回來(lái),一個(gè)方法就是刪掉最后一行,也就是我們前面追加的一行代碼,如:
/bin/sed -i '$d' .bashrc
最后在重新登錄服務(wù)器就ok了。
后記
修改PATH也許并不是一個(gè)好習(xí)慣
如果每次安裝一個(gè)軟件就添加其路徑到環(huán)境變量,最后我們的PATH會(huì)變得非常臃腫,通常并不建議這種方式管理軟件。
另外一個(gè)比較常見(jiàn)的方式是設(shè)置文件鏈接到PATH的其中一個(gè)路徑,或者直接把可執(zhí)行的文件拷貝過(guò)去。
再或者設(shè)置 alias也可以,相信技能樹(shù)的粉絲高手眾多,也許會(huì)有自己的軟件管理技巧,歡迎留言分享自己的心得體會(huì)!
■ ■ ■
聯(lián)系客服