Linux:Ubuntu系统环境变量配置总结

摘要:Ubuntu环境变量

环境变量简介

bash shell用一个叫做环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息.环境变量的使用大大方便了程序或者shell中运行的脚本和命令查找和访问内存中存储的数据和系统信息


总结结论

  • 环境变量的操作包括查看,添加,删除,分别是printenvexportunset命令
  • 直接在shell终端export可以临时修改环境变量,如果要永久修改需要写入文件,比如写入/etc/profile/etc/environment~/.profile~/.bashrc
  • /etc/profile和/etc/environment是针对所有用户环境变量配置,~/.profile,~/.bashrc是对当下用户配置,~代表用户根目录,即/home/用户名
  • /etc/environment最好不要修改,因为是面向系统级别,防止修改导致系统其他功能受到影响,~/.profile实际上是调用的~/.bashrc
  • 如果要修改所有用户的环境配置修改/etc/profile,修改单个用户的额修改~/.bashrc
  • export对已经存在的环境变量做新增,将新的内容和旧的变量合并中间用冒号:隔开,并重新赋值给原环境变量名

临时设置环境变量

在shell中可以直接使用命令操作环境变量,包括查看envprintenv添加export删除ubset
查看所有全局环境变量有两个命令:env,printenv,不加参数则输出所有全局环境变量

root@ubuntu:~# printenv
...

如果加入参数指定某个变量名,则输出这个环境变量的值,比如输出PATH环境变量的值

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

添加全局环境变量使用export命令,比如添加一个SCALA_HOME环境变量

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

如果某个环境变量已经存在,需要给它添加值,则添加内容和原始内容用冒号:隔开,windows下是分号;,重新定义覆盖该环境变量,比如PATH环境变量,现在将SCALA_HOME加入到PATH环境变量上

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

删除环境变量使用unset命令,比如把SCALA_HOME删除

root@ubuntu:~# unset SCALA_HOME

PATH环境变量

PATH环境变量,作用是指定命令搜索路径,当输入一个可执行命令的时候Linux会去查找PATH里面记录的路径
刚才将SCALA_HOME也就是scala对应文件的bin目录加入到PATH环境变量后就可以在任意位置输出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环境变量则报错命令找不到

root@ubuntu:~# scala

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

apt install scala

PATH环境变量是一个冒号分割字符串,命令会根据PATH从左到右的顺序优先级选择找到路径下的这执行命令去执行,以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让系统自动寻找路径则是/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,为系统再带的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.
>>> 

永久设置环境变量

在shell命令行通过export设置的环境变量在退出当前shell就失效了,退出当前shell就无效了.要对环境变量的设置永久有效需要将变量写入系统文件,有以下几个相关文件:

  • /etc/profile:面向用户的设置所有用户的环境变量配置,只有一份
  • /etc/environment:面向系统的设置所有用户的环境变量配置,只有一份
  • ~/.profile:只对当前用户设置,每个用户根目录下有各自一份
  • ~/.bashrc:只对当前用户设置,每个用户根目录下有各自一份

(1)/etc/profile
此文件是设置环境变量时第一个系统读取的文件,且仅仅在第一次登录系统时才会全局运行,因此存在以下注意事项

  • 被其他环境变量文件覆盖:在它之后读取的文件设置环境变量将会会覆盖 /etc/profile 文件中配置的环境变量
  • 重启启动生效:仅仅在第一次登录系统时才会全局运行 /etc/profile,所以全局生效 /etc/profile 环境变量的正确方式是注销重登录或者直接重启系统

对/etc/profile进行修改只需要root权限下vim这个文件即可,修改完毕source立即生效

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

现在测试一下创建一个新用户,看/etc/profile下的环境变量是否有效

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文件之后,登录系统时读取环境信息使用的第二个文件就是 /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"

这个文件中也可以设置环境变量达到的效果也和 /etc/profile 文件的环境变量效果一样所有登录用户有效全局永久的环境变量,但是最好别通过这个文件添加或修改环境变量,因为 /etc/profile 文件是面对系统用户的, /etc/environment 文件是面对系统的,系统通过 /etc/environment 文件中的PATH去找对应的东西,以Ubuntu为例,如果不小心更改 /etc/environment 文件中把PATH影响到,就无法进入桌面界面了,也无法使用一些命令了,所以仅仅想要设置一个全局的环境变量,完全没有必要用这个文件

(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,因此如果要对当前用户修改环境变量可以直接修改用户根目录下的.bashrc文件

(4)~/.bashrc
这个文件是被上面的/.profile文件执行的,对当前用户有效,观察一下ubuntu用户和root用户的区别,他们的用户环境配置分别在/home/ubuntu/.bashrc和/root/.bashrc,现在切到root用户并且采用root的环境变量,在该环境下启动python是系统自带的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的环境变量,在该环境下依旧采用的是/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.
>>> 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容