环境变量(environment variables)一般是指在操作系统中用来指定系统运行环境的一些参数,是一个具有特定名字的对象。用户通过设置环境变量,来更方便的运行进程。如PATH变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统如果在当前目录下找不到该程序,会到PATH中设置的路径下查找。
Linux中的环境变量分为全局环境变量和用户环境变量。全局环境变量对所有用户都生效,用户环境变量则只对设置了该变量的用户生效。设置环境变量时,如果该变量仅有某个用户使用,则只需要设置用户环境变量;如果需要提供全局使用,则设置全局环境变量。
注意:环境变量的变量名均为大写。
1、环境变量配置文件
全局环境变量配置文件:
/etc/profile
用户环境变量配置文件:
~/.bash_profile ~/.bashrc # ~/表示用户的家目录
当用户登录时,shell会首先执行系统全局配置文件/etc/profile,然后执行当前用户的用户环境变量~/.bash_profile,当~/.bash_profile不存在时则执行~/.bashrc。
环境变量初始化过程如下图所示:
2、环境变量相关命令
查看环境变量的值:
echo $变量名
列出已定义的环境变量:
env
临时新增、修改、删除环境变量(仅在本次登录中有效):
export [-fnp] [变量名称]{=[变量值]] # -f表示[变量名称]为函数名称 # -n表示删除指定的变量。实际上该变量并未删除,只是在本次执行环境中不会在生效 # -p列出所有的环境变量
删除环境变量:
unset 变量名
3、常用系统内置变量
- PATH:指定命令的搜索路径
- HOME:用户家目录
- HISTSIZE:保存历史命令记录的条数
- USER:当前用户
- HOSTNAME:主机名
- SHELL:当前用户使用的shell
- LANG:当前系统的语言
- PWD:用户当前目录
- MAIL:用户系统邮件存放路径
4、自定义环境变量
自定义环境变量时,如果仅当次登录生效,可以使用export命令临时设置;需要全局生效的环境变量可配置在/etc/profile文件中;为某个用户配置的环境变量可配置在~/.bash_profile文件中。以下以在当前系统中设置源码安装的Python 3.7的环境变量为例介绍环境变量的设置。
环境:
- 操作系统:CentOS 7.5.1804
- Python:3.7版本,通过源码安装在/usr/local/python37目录下
- Pyhton可执行文件:/usr/local/python/bin/python3.7
- 目的:通过环境变量的设置使在任意位置运行命令python3.7均可进入Python 3.7环境
这里是要使输入命令时能进入Python 3.7环境,实际上就是将Python 3.7的可执行文件路径加入到PATH环境变量中。
4.1、设置临时环境变量
直接输入以下命令:
[root@localhost ~]# export PATH=$PATH:/usr/local/python37/bin
测试:
# 输入python3.7直接进入Python 3.7环境 [root@localhost ~]# python3.7 Python 3.7.1 (default, Nov 15 2018, 10:57:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> # 查看PATH [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/python37/bin
这里可以看到环境变量设置成功。当退出这次登录后,这次设置的环境变量就失效了。
4.2、为root用户设置环境变量
为root用户设置环境变量,只要修改root用户家目录下的.bash_profile文件即可。原.bash_profile文件有以下内容:
[root@localhost ~]# more .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH
这里只要将“PATH=$PATH:$HOME/bin”改为:
PATH=$PATH:$HOME/bin:/usr/local/python37/bin
修改完成后需要即使生效须使用以下命令重载配置文件:
[root@localhost ~]# source .bash_profile
测试:
# 当前使用root用户 [root@localhost ~]# python3.7 Python 3.7.1 (default, Nov 15 2018, 10:57:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
root用户可以成功使用python3.7命令进入Python 3.7环境。当前系统还有另一个用户fangyu,使用su - fangyu切换到fangyu用户测试是否可以使用python3.7命令:
[fangyu@localhost ~]$ whoami fangyu [fangyu@localhost ~]$ python3.7 -bash: python3.7: 未找到命令
用户fangyu无法使用为root用户设置的环境变量。
4.3、设置全局环境变量
要设置全局环境变量,只要修改/etc/profile即可:
# 修改PATH变量,可以在以下内容后修改 pathmunge () { case ":${PATH}:" in *:"$1":*) ;; *) if [ "$2" = "after" ] ; then PATH=$PATH:$1 else PATH=$1:$PATH fi esac } # 添加 PATH=$PATH:/usr/local/python37/bin
测试:
# 当前登录用户root [root@localhost ~]# whoami root [root@localhost ~]# python3.7 Python 3.7.1 (default, Nov 15 2018, 10:57:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
root用户测试成功,下面使用su - fangyu命令切换到fangyu用户测试是否可以执行:
[fangyu@localhost ~]$ whoami fangyu [fangyu@localhost ~]$ python3.7 Python 3.7.1 (default, Nov 15 2018, 10:57:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
fangyu用户执行成功,说明全局环境变量设置成功。