Linux:Ubuntu系統(tǒng)環(huán)境變量配置總結

摘要:Ubuntu,環(huán)境變量

環(huán)境變量簡介

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


總結結論

  • 環(huán)境變量的操作包括查看,添加,刪除,分別是printenv,export,unset命令
  • 直接在shell終端export可以臨時修改環(huán)境變量,如果要永久修改需要寫入文件,比如寫入/etc/profile,/etc/environment,~/.profile,~/.bashrc
  • /etc/profile和/etc/environment是針對所有用戶環(huán)境變量配置,~/.profile,~/.bashrc是對當下用戶配置,~代表用戶根目錄,即/home/用戶名
  • /etc/environment最好不要修改,因為是面向系統(tǒng)級別,防止修改導致系統(tǒng)其他功能受到影響,~/.profile實際上是調用的~/.bashrc
  • 如果要修改所有用戶的環(huán)境配置修改/etc/profile,修改單個用戶的額修改~/.bashrc
  • export對已經存在的環(huán)境變量做新增,將新的內容和舊的變量合并中間用冒號:隔開,并重新賦值給原環(huán)境變量名

臨時設置環(huán)境變量

在shell中可以直接使用命令操作環(huán)境變量,包括查看env、printenv添加export,刪除ubset
查看所有全局環(huán)境變量有兩個命令:env,printenv,不加參數(shù)則輸出所有全局環(huán)境變量

root@ubuntu:~# printenv
...

如果加入?yún)?shù)指定某個變量名,則輸出這個環(huán)境變量的值,比如輸出PATH環(huán)境變量的值

root@ubuntu:~# printenv PATH
.:/opt/java/jdk1.8.0_60/bin:/opt/anaconda3/bin:/opt/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/scala/bin:/usr/local/spark/bin:/usr/local/hbase/bin:/usr/local/scala/bin:/usr/local/spark/bin:/usr/local/mysql/bin

添加全局環(huán)境變量使用export命令,比如添加一個SCALA_HOME環(huán)境變量

root@ubuntu:~# export SCALA_HOME=/usr/local/scala/scala-2.11.11
root@ubuntu:~# printenv SCALA_HOME
/usr/local/scala/scala-2.11.11/bin

如果某個環(huán)境變量已經存在,需要給它添加值,則添加內容和原始內容用冒號:隔開,windows下是分號;,重新定義覆蓋該環(huán)境變量,比如PATH環(huán)境變量,現(xiàn)在將SCALA_HOME加入到PATH環(huán)境變量上

root@ubuntu:~# export PATH=$SCALA_HOME:$PATH
root@ubuntu:~# printenv PATH
/usr/local/scala/scala-2.11.11/bin:.:/opt/java/jdk1.8.0_60/bin:/opt/anaconda3/bin:/opt/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/scala/bin:/usr/local/spark/bin:/usr/local/hbase/bin:/usr/local/scala/bin:/usr/local/spark/bin:/usr/local/mysql/bin

刪除環(huán)境變量使用unset命令,比如把SCALA_HOME刪除

root@ubuntu:~# unset SCALA_HOME

PATH環(huán)境變量

PATH環(huán)境變量,作用是指定命令搜索路徑,當輸入一個可執(zhí)行命令的時候Linux會去查找PATH里面記錄的路徑
剛才將SCALA_HOME也就是scala對應文件的bin目錄加入到PATH環(huán)境變量后就可以在任意位置輸出scala命令進入scala shell

root@ubuntu:~# scala
Welcome to Scala 2.11.11 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60).
Type in expressions for evaluation. Or try :help.

scala> 

如果不增加到PATH環(huán)境變量則報錯命令找不到

root@ubuntu:~# scala

Command 'scala' not found, but can be installed with:

apt install scala

PATH環(huán)境變量是一個冒號分割字符串,命令會根據(jù)PATH從左到右的順序優(yōu)先級選擇找到路徑下的這執(zhí)行命令去執(zhí)行,以python命令為例,在多個路徑下存在該命令

root@ubuntu:~# /opt/anaconda3/bin/python
Python 3.7.6 (default, Jan  8 2020, 19:59:22) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
root@ubuntu:~# /usr/bin/python
Python 2.7.15+ (default, Nov 27 2018, 23:36:35) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

此時不指定路徑直接輸出python讓系統(tǒng)自動尋找路徑則是/opt/anaconda3/bin/python下的python,因為在PATH中位置靠前第一個被找到

root@ubuntu:~# python
Python 3.7.6 (default, Jan  8 2020, 19:59:22) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

如果修改一下PATH,修改一下順序

# 修改一下順序
export PATH=$PATH:/opt/anaconda3/bin
root@ubuntu:~# printenv PATH
.:/opt/java/jdk1.8.0_60/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/anaconda3/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/scala/bin:/usr/local/spark/bin:/usr/local/hbase/bin:/usr/local/scala/scala-2.11.11/bin:/usr/local/spark/bin:/usr/local/mysql/bin

此時python自動尋找路徑為/usr/bin/python,為系統(tǒng)再帶的python2版本

root@ubuntu:~# python
Python 2.7.15+ (default, Nov 27 2018, 23:36:35) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

永久設置環(huán)境變量

在shell命令行通過export設置的環(huán)境變量在退出當前shell就失效了,退出當前shell就無效了.要對環(huán)境變量的設置永久有效需要將變量寫入系統(tǒng)文件,有以下幾個相關文件:

  • /etc/profile:面向用戶的設置所有用戶的環(huán)境變量配置,只有一份
  • /etc/environment:面向系統(tǒng)的設置所有用戶的環(huán)境變量配置,只有一份
  • ~/.profile:只對當前用戶設置,每個用戶根目錄下有各自一份
  • ~/.bashrc:只對當前用戶設置,每個用戶根目錄下有各自一份

(1)/etc/profile
此文件是設置環(huán)境變量時第一個系統(tǒng)讀取的文件,且僅僅在第一次登錄系統(tǒng)時才會全局運行,因此存在以下注意事項

  • 被其他環(huán)境變量文件覆蓋:在它之后讀取的文件設置環(huán)境變量將會會覆蓋 /etc/profile 文件中配置的環(huán)境變量
  • 重啟啟動生效:僅僅在第一次登錄系統(tǒng)時才會全局運行 /etc/profile,所以全局生效 /etc/profile 環(huán)境變量的正確方式是注銷重登錄或者直接重啟系統(tǒng)

對/etc/profile進行修改只需要root權限下vim這個文件即可,修改完畢source立即生效

root@ubuntu:~# vim /etc/profile
root@ubuntu:~# source /etc/profile

現(xiàn)在測試一下創(chuàng)建一個新用戶,看/etc/profile下的環(huán)境變量是否有效

root@ubuntu:~# adduser test
Adding user `test' ...
Adding new group `test' (1001) ...
Adding new user `test' (1001) with group `test' ...
Creating home directory `/home/test' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
    Full Name []: 
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
Is the information correct? [Y/n] y
root@ubuntu:~# su - test
test@ubuntu:~$

查看在/etc/profile下的SCALA_HOME,可以查看到,說明/etc/profile對新用戶生效

test@ubuntu:~$ printenv SCALA_HOME
/usr/local/scala/scala-2.11.11

查看在/etc/profile下不存在的HBASE_HOME,查看不到,但是原用戶ubuntu可以查看到,因為在ubuntu的根目錄下的.bashrc文件指定了HBASE_HOME

test@ubuntu:~$ printenv HBASE_HOME
ubuntu@ubuntu:~$ printenv HBASE_HOME
/usr/local/hbase

(2)/etc/environment
在/etc/profile文件之后,登錄系統(tǒng)時讀取環(huán)境信息使用的第二個文件就是 /etc/environment 文件,打開這個文件查看內容

root@ubuntu:~# cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

這個文件中也可以設置環(huán)境變量達到的效果也和 /etc/profile 文件的環(huán)境變量效果一樣所有登錄用戶有效全局永久的環(huán)境變量,但是最好別通過這個文件添加或修改環(huán)境變量,因為 /etc/profile 文件是面對系統(tǒng)用戶的, /etc/environment 文件是面對系統(tǒng)的,系統(tǒng)通過 /etc/environment 文件中的PATH去找對應的東西,以Ubuntu為例,如果不小心更改 /etc/environment 文件中把PATH影響到,就無法進入桌面界面了,也無法使用一些命令了,所以僅僅想要設置一個全局的環(huán)境變量,完全沒有必要用這個文件

(3)~/.profile
用戶根目錄下的.profile文件,比如test用戶則文件在/home/test/.profile,它只是對當前用戶有效,看一下它的代碼

# 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 if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

可見它是直接引用的根目錄下的.bashrc文件,然后對PATH做了增添,添加了當前用戶根目錄下的bin和.local/bin,因此如果要對當前用戶修改環(huán)境變量可以直接修改用戶根目錄下的.bashrc文件

(4)~/.bashrc
這個文件是被上面的/.profile文件執(zhí)行的,對當前用戶有效,觀察一下ubuntu用戶和root用戶的區(qū)別,他們的用戶環(huán)境配置分別在/home/ubuntu/.bashrc和/root/.bashrc,現(xiàn)在切到root用戶并且采用root的環(huán)境變量,在該環(huán)境下啟動python是系統(tǒng)自帶的python2版本

ubuntu@ubuntu:~$ sudo su
root@ubuntu:~# python
Python 2.7.15+ (default, Nov 27 2018, 23:36:35) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

下一步采用root用戶但是還是采用ubuntu的環(huán)境變量,在該環(huán)境下依舊采用的是/home/ubuntu/.bashrc

ubuntu@ubuntu:~$ sudo -s
root@ubuntu:~# python
Python 3.7.6 (default, Jan  8 2020, 19:59:22) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容