ubuntu-設(shè)置系統(tǒng)環(huán)境變量

環(huán)境變量簡介

bash shell用一個叫做環(huán)境變量(environment variable)的特性來存儲有關(guān)shell會話和工作環(huán)境的信息.環(huán)境變量的使用大大方便了程序或者shell中運行的腳本查找和訪問內(nèi)存中存儲的數(shù)據(jù)和系統(tǒng)信息.

環(huán)境變量分為全局環(huán)境變量局部環(huán)境變量,標準的命名方式是:全局變量名用大寫字母命名,局部變量用小寫字母命名.

這里主要介紹全局環(huán)境變量.

bash shell中操作環(huán)境變量

聲明:在bash shell中對環(huán)境變量所做的所有操作只對當前shell有效,退出后再打開,之前的所有設(shè)置全部消失.

這里介紹如何在bash shell中查看/添加/刪除環(huán)境變量

查看所有全局環(huán)境變量有兩個命令:envprintenv.

yan@yanubuntu:~$ env
XDG_VTNR=7
XDG_SESSION_ID=c2
...
LESSCLOSE=/usr/bin/lesspipe %s %s
XAUTHORITY=/home/yan/.Xauthority
_=/usr/bin/env
yan@yanubuntu:~$ 

或者

yan@yanubuntu:~$ printenv
XDG_VTNR=7
XDG_SESSION_ID=c2
...
LESSCLOSE=/usr/bin/lesspipe %s %s
XAUTHORITY=/home/yan/.Xauthority
_=/usr/bin/printenv
yan@yanubuntu:~$ 

全局變量有很多,上面用了...表示省略.

查看某個環(huán)境變量,常用兩種方式:printenv 環(huán)境變量名或者echo $環(huán)境變量名.比如查看環(huán)境變量HOME的值:

yan@yanubuntu:~$ printenv HOME
/home/yan

或者

yan@yanubuntu:~$ echo $HOME
/home/yan

添加全局環(huán)境變量使用export命令:

假設(shè)我想添加一個環(huán)境變量DOWNLOAD,用它來表示默認的下載文件夾/home/yan/download.

檢驗一下,原來環(huán)境變量中不包含DOWNLOAD變量:

yan@yanubuntu:~$ printenv DOWNLOAD
yan@yanubuntu:~$ 

現(xiàn)在添加DOWNLOAD環(huán)境變量:

yan@yanubuntu:~$ DOWNLOAD=/home/yan/download
yan@yanubuntu:~$ export DOWNLOAD
yan@yanubuntu:~$ printenv DOWNLOAD
/home/yan/download
yan@yanubuntu:~$ 

DOWNLOAD環(huán)境變量添加成功.可以看出,添加過程包含兩步:首先使用DOWNLOAD=/home/yan/download創(chuàng)建一個局部變量;再用export DOWNLOAD將其導出成為全局環(huán)境變量.

當然,這兩步可以用下面一條命令代替:

export DOWNLOAD=/home/yan/download

以上是創(chuàng)建一個之前沒有的環(huán)境變量.如果某個環(huán)境變量已經(jīng)存在,我們要為這個環(huán)境變量添加值怎么處理?

比如最經(jīng)常用到的PATH環(huán)境變量,先查看PATH變量的值:

yan@yanubuntu:~$ echo $PATH
/usr/local/cuda-8.0/bin:/home/yan/anaconda2/bin:/home/yan/bin:/home/yan/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
yan@yanubuntu:~$ 

可以看到,PATH變量包含了多個值/路徑,每個值之間用冒號:隔開(注意windows下面用的是分號;隔開).

現(xiàn)在我們想新添加一條路徑/home/yan/anaconda2到PATH變量,采用以下命令:

export PATH=/home/yan/anaconda2:$PATH

或者

export PATH=$PATH:/home/yan/anaconda2

實際演示:

yan@yanubuntu:~$ echo $PATH
/usr/local/cuda-8.0/bin:/home/yan/anaconda2/bin:/home/yan/bin:/home/yan/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
yan@yanubuntu:~$ export PATH=/home/yan/anaconda2:$PATH
yan@yanubuntu:~$ echo $PATH
/home/yan/anaconda2:/usr/local/cuda-8.0/bin:/home/yan/anaconda2/bin:/home/yan/bin:/home/yan/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
yan@yanubuntu:~$ 

可以看到,新路徑已經(jīng)被添加進去了.

在某個環(huán)境變量添加新的值和添加一個新的環(huán)境變量相比(以PATH為例),多了一個$PATH:.

網(wǎng)上有人說的不錯,這個有點類似于i=i+1的味道.

刪除全局變量名使用unset命令,比如想要刪除掉剛才添加的DOWNLOAD變量:

yan@yanubuntu:~$ printenv DOWNLOAD
/home/yan/download
yan@yanubuntu:~$ unset DOWNLOAD
yan@yanubuntu:~$ printenv DOWNLOAD
yan@yanubuntu:~$

如果想要刪除PATH變量中的某個路徑怎么辦?直接把當前shell關(guān)掉重開一個吧.

永久設(shè)置環(huán)境變量的幾種方法

前面提到了,在bash shell中對環(huán)境變量的所有操作都是暫時性的,退出當前shell就無效了.如何使得對環(huán)境變量的設(shè)置永久有效?首先得認識以下幾個文件:

  • /etc/profile

  • /etc/environment

  • ~/.profile

  • ~/.bashrc

設(shè)置/etc/profile

實際上,當我們登錄Linux系統(tǒng)時,bash作為默認的shell,它會在幾個文件中查找命令.這些文件稱為啟動文件或者環(huán)境文件.其中,/etc/profile文件就是系統(tǒng)默認的bash shell的第一啟動文件.其中就涉及到了系統(tǒng)環(huán)境變量的讀取文件.所以,可以直接打開/etc/profile文件,使用export命令在文件中添加系統(tǒng)環(huán)境變量.

這個文件的特點是:系統(tǒng)中所有用戶登錄時都會執(zhí)行這個啟動文件.所以,里面添加的所有環(huán)境變量都系統(tǒng)中的所有用戶有效.

舉個例子,我要將新安裝的anaconda2中的python解釋器作為系統(tǒng)默認的python解釋器,為此,我需要將路徑/home/yan/anaconda2/bin添加到PATH環(huán)境變量中.可以使用以下命令打開/etc/profile文件:

yan@yanubuntu:~$ sudo gedit /etc/profile

打開后在文件最后面添加以下語句:

export PATH=/home/yan/anaconda2/bin:$PATH

保存退出,然后在bash中執(zhí)行source /etc/profile命令使其生效:

yan@yanubuntu:~$ source /etc/profile

或者重啟系統(tǒng)使其生效.

設(shè)置/etc/environment

參考Ubuntu環(huán)境變量——添加與刪除,/etc/environment文件是登錄Linux系統(tǒng)時的第二啟動文件.

使用以下命令打開/etc/environment文件:

yan@yanubuntu:~$ sudo gedit /etc/environment

發(fā)現(xiàn)里面只有一行內(nèi)容:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

也就是只定義了PATH環(huán)境變量的值,同樣的例子,我們可以將/etc/environment文件內(nèi)容改為:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/yan/anaconda2/bin"

也就同樣添加了anaconda2路徑到PATH環(huán)境變量.同樣需執(zhí)行source命令或者重啟系統(tǒng)使其生效.

同樣,修改/etc/environment文件也是對所有登錄用戶有效.

設(shè)置~/.profile

設(shè)置~/.profile文件同樣可以達到永久設(shè)置環(huán)境變量的目的,但是它只是對當前用戶有效.

我們知道,Linux中的~就代表了當前用戶的主目錄,比如此時,~/.profile就相當于/home/yan/.profile.

其中yan是我的登錄用戶名.因此,當前Linux系統(tǒng)中創(chuàng)建了幾個用戶,就有幾個~/.profile文件.當然,對于個人筆記本而言,一般只有一個登錄用戶.

既然搞清楚了,同樣的例子,使用以下命令打開~/.profile文件:

yan@yanubuntu:~$ sudo gedit ~/.profile

同樣在/.profile文件最后添加export命令,下面是/.profile文件內(nèi)容,很短:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
?
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
?
# if running bash
if [ -n "$BASH_VERSION" ]; then
 # include .bashrc if it exists
 if [ -f "$HOME/.bashrc" ]; then
 . "$HOME/.bashrc"
 fi
fi
?
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
export PATH=/home/yan/anaconda2/bin:$PATH

同樣保存后執(zhí)行source命令或者重啟系統(tǒng)使其生效.

設(shè)置~/.bashrc文件

最后還有一個/.bashrc文件,修改這個文件同樣可以達到永久設(shè)置環(huán)境變量的目的,實際上,這個文件是被上面的/.profile文件執(zhí)行的,以上~/.profile文件中有這兩句:

if [ -f "$HOME/.bashrc" ]; then
 . "$HOME/.bashrc"

好了,同樣的,使用gedit編輯器打開~/.bashrc文件并在文件末尾加入export命令,保存后執(zhí)行source命令或者重啟系統(tǒng)使其生效.

同樣,設(shè)置~/.bashrc文件修改的環(huán)境變量也只對當前用戶有效.

永久設(shè)置ubuntu(我用的ubuntu16.04),修改以上任意一個文件都可以(其實還沒總結(jié)完,好像還可以修改/etc/bash.bashrc,/root/bashrc等目錄等可以,沒去試,就試了以上幾個,夠用就行).當為了不影響系統(tǒng)上的其他用戶,最好還是修改自己的~/.profile文件或者~/.bashrc文件吧.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容