ubuntu-设置环境变量
环境变量简介
bash shell用一个叫做环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息.环境变量的使用大大方便了程序或者shell中运行的脚本查找和访问内存中存储的数据和系统信息.
环境变量分为全局环境变量和局部环境变量,标准的命名方式是:全局变量名用大写字母命名,局部变量用小写字母命名.
这里主要介绍全局环境变量.
bash shell中操作环境变量
**声明:**在bash shell中对环境变量所做的所有操作只对当前shell有效,退出后再打开,之前的所有设置全部消失.
这里介绍如何在bash shell中查看/添加/删除环境变量.
查看所有全局环境变量有两个命令:env
和printenv
.
[root@web ~]# env
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:
SSH_CONNECTION=192.168.7.113 58891 192.168.3.13 22
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=web
XDG_SESSION_ID=6
USER=root
PWD=/root
HOME=/root
SSH_CLIENT=192.168.7.113 58891 22
SSH_TTY=/dev/pts/0
MAIL=/var/spool/mail/root
TERM=xterm
SHELL=/bin/bash
SHLVL=1
PYTHONPATH=/usr/local/python3/lib/python3.8:/home/commandserver:
LOGNAME=root
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
XDG_RUNTIME_DIR=/run/user/0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
HISTSIZE=1000
LESSOPEN=||/usr/bin/lesspipe.sh %s
_=/usr/bin/env
或者
[root@web ~]# env
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:
SSH_CONNECTION=192.168.7.113 58891 192.168.3.13 22
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=web
XDG_SESSION_ID=6
USER=root
PWD=/root
HOME=/root
SSH_CLIENT=192.168.7.113 58891 22
SSH_TTY=/dev/pts/0
MAIL=/var/spool/mail/root
TERM=xterm
SHELL=/bin/bash
SHLVL=1
PYTHONPATH=/usr/local/python3/lib/python3.8:/home/commandserver:
LOGNAME=root
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
XDG_RUNTIME_DIR=/run/user/0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
HISTSIZE=1000
LESSOPEN=||/usr/bin/lesspipe.sh %s
_=/usr/bin/env
全局变量有很多,上面用了...
表示省略.
查看某个环境变量,常用两种方式:printenv 环境变量名
或者echo $环境变量名
.比如查看环境变量HOME
的值:
[root@web ~]# printenv HOME
/root
或者
[root@web ~]# echo $HOME
/root
添加全局环境变量使用export
命令:
假设我想添加一个环境变量DOWNLOAD,用它来表示默认的下载文件夹/home/yan/download.
检验一下,原来环境变量中不包含DOWNLOAD变量:
[root@web ~]# printenv DOWNLOAD
[root@web ~]#
现在添加DOWNLOAD环境变量:
[root@web ~]# DOWNLOAD=/home/download
[root@web ~]# export DOWNLOAD
[root@web ~]# printenv DOWNLOAD
/home/download
[root@web ~]#
DOWNLOAD环境变量添加成功.可以看出,添加过程包含两步:首先使用DOWNLOAD=/home/yan/download
创建一个局部变量;再用export DOWNLOAD
将其导出成为全局环境变量.
当然,这两步可以用下面一条命令代替:
export DOWNLOAD=/home/download
以上是创建一个之前没有的环境变量.如果某个环境变量已经存在,我们要为这个环境变量添加值怎么处理?
比如最经常用到的PATH环境变量,先查看PATH变量的值:
[root@web ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@web ~]#
可以看到,PATH变量包含了多个值/路径,每个值之间用冒号:
隔开(注意windows下面用的是分号;
隔开).
现在我们想新添加一条路径/home/yan/anaconda2到PATH变量,采用以下命令:
export PATH=/home/yan/anaconda2:$PATH
或者
export PATH=$PATH:/home/web/anaconda2
实际演示:
[root@web ~]#$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@web ~]#$ export PATH=/home/anaconda2:$PATH
[root@web ~]#$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/anaconda2/bin
[root@web ~]#$
可以看到,新路径已经被添加进去了.
在某个环境变量添加新的值和添加一个新的环境变量相比(以PATH为例),多了一个$PATH
和:
.
网上有人说的不错,这个有点类似于i=i+1
的味道.
删除全局变量名使用unset
命令,比如想要删除掉刚才添加的DOWNLOAD
变量:
[root@web ~]#$ printenv DOWNLOAD
/home/download
[root@web ~]#$ unset DOWNLOAD
[root@web ~]#$ printenv DOWNLOAD
[root@web ~]#$
如果想要删除PATH变量中的某个路径怎么办?直接把当前shell关掉重开一个吧.
永久设置环境变量的几种方法
前面提到了,在bash shell中对环境变量的所有操作都是暂时性的,退出当前shell就无效了.如何使得对环境变量的设置永久有效?首先得认识以下几个文件:
- /etc/profile
- /etc/environment
- ~/.profile
- ~/.bashrc
设置/etc/profile
实际上,当我们登录Linux系统时,bash作为默认的shell,它会在几个文件中查找命令.这些文件称为启动文件或者环境文件.其中,/etc/profile文件就是系统默认的bash shell的第一启动文件.其中就涉及到了系统环境变量的读取文件.所以,可以直接打开/etc/profile文件,使用export命令在文件中添加系统环境变量.
这个文件的特点是:系统中所有用户登录时都会执行这个启动文件.所以,里面添加的所有环境变量都系统中的所有用户有效.
举个例子,我要将新安装的anaconda2中的python解释器作为系统默认的python解释器,为此,我需要将路径/home/yan/anaconda2/bin
添加到PATH环境变量中.可以使用以下命令打开/etc/profile文件:
[root@web ~]#$ sudo gedit /etc/profile
打开后在文件最后面添加以下语句:
export PATH=/home/anaconda2/bin:$PATH
保存退出,然后在bash中执行source /etc/profile
命令使其生效:
[root@web ~]#$ source /etc/profile
或者重启系统使其生效.
设置/etc/environment
参考Ubuntu环境变量——添加与删除,/etc/environment文件是登录Linux系统时的第二启动文件.
使用以下命令打开/etc/environment文件:
[root@web ~]#$ sudo gedit /etc/environment
发现里面只有一行内容:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
也就是只定义了PATH环境变量的值,同样的例子,我们可以将/etc/environment文件内容改为:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/yan/anaconda2/bin"
也就同样添加了anaconda2路径到PATH环境变量.同样需执行source命令或者重启系统使其生效.
同样,修改/etc/environment文件也是对所有登录用户有效.
设置~/.profile
设置~/.profile文件同样可以达到永久设置环境变量的目的,但是它只是对当前用户有效.
我们知道,Linux中的~
就代表了当前用户的主目录,比如此时,~/.profile就相当于/home/yan/.profile.
其中yan是我的登录用户名.因此,当前Linux系统中创建了几个用户,就有几个~/.profile文件.当然,对于个人笔记本而言,一般只有一个登录用户.
既然搞清楚了,同样的例子,使用以下命令打开~/.profile文件:
[root@web ~]#$ sudo gedit ~/.profile
同样在/.profile文件最后添加export命令,下面是/.profile文件内容,很短:
# ~/.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
同样保存后执行source命令或者重启系统使其生效.
设置~/.bashrc文件
最后还有一个/.bashrc文件,修改这个文件同样可以达到永久设置环境变量的目的,实际上,这个文件是被上面的/.profile文件执行的,以上~/.profile文件中有这两句:
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
好了,同样的,使用gedit编辑器打开~/.bashrc文件并在文件末尾加入export命令,保存后执行source命令或者重启系统使其生效.
同样,设置~/.bashrc文件修改的环境变量也只对当前用户有效.
永久设置ubuntu(我用的ubuntu16.04),修改以上任意一个文件都可以(其实还没总结完,好像还可以修改/etc/bash.bashrc,/root/bashrc等目录等可以,没去试,就试了以上几个,够用就行).当为了不影响系统上的其他用户,最好还是修改自己的*/.profile*文件或者*/.bashrc*文件吧.
作者:运动小爽
链接:https://www.jianshu.com/p/12fbfa8c7489
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。