一、环境变量的分类

1)按生效的范围分类。 系统环境变量:公共的,对全部的用户都生效。 用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。
2)按生存周期分类。 永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
临时环境变量:使用时在Shell中临时定义,退出Shell后失效。

二、常用的环境变量

1、查看环境变量

1)env命令

centos刷新 centos刷新环境变量_bash


2)echo命令

echo $环境变量名

注意,符号$不能缺少,这是语法规定。
2、常用的环境变量
1)PATH
可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序,PATH变量的具体用法本文后面的章节中有详细的介绍。

[root@ansible ~]# echo $PATH
/usr/jmeter/bin/:/opt/rh/rh-postgresql10/root/usr/bin:/opt/ark/arkdb/cellar/mysql57/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/ffmpeg:/root/bin

2)LANG

Linux系统的语言、地区、字符集,LANG变量的具体用法本文后面的章节中有详细的介绍。

[root@ansible ~]# echo $LANG
en_US.UTF-8

3)HOSTNAME

服务器的主机名。

4)SHELL

用户当前使用的Shell解析器。

5)HISTSIZE

保存历史命令的数目。

6)USER

当前登录用户的用户名。

7)HOME

当前登录用户的主目录。

8)PWD

当前工作目录。

9)CLASSPATH

JAVA语言库文件搜索的目录,它也不是Linux缺省的环境变量,但对JAVA程序员来说非常重要,具体用法本文后面的章节中有详细的介绍。

三、设置环境量

变量名='值'
export 变量名
或
export 变量名='值'
如果环境变量的值没有空格等特殊符号,可以不用单引号包含。
export ORACLE_HOME=/oracle/home
export ORACLE_BASE=/oracle/base
export ORACLE_SID=snorcl11g
export NLS_LANG='Simplified Chinese_China.ZHS16GBK'
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:.

采用export设置的环境变量,在退出Shell后就会失效,下次登录时需要重新设置。如果希望环境变量永久生效,需要在登录脚本文件中配置。

1、系统环境变量

系统环境变量对全部的用户生效,设置系统环境变量有三种方法。

1)在/etc/profile文件中设置。

用户登录时执行/etc/profile文件中设置系统的环境变量。但是,Linux不建议在/etc/profile文件中设置系统环境变量。

2)在/etc/profile.d目录中增加环境变量脚本文件,这是Linux推荐的方法。

/etc/profile在每次启动时会执行/etc/profile.d下全部的脚本文件。/etc/profile.d比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d下对应的 shell 脚本即可。

/etc/profile.d目录下有很多脚本文件,例如:

[root@ansible profile.d]# pwd
/etc/profile.d
[root@ansible profile.d]# cat ffmpeg.sh 
export FFMPEG_HOME=/usr/local/ffmpeg
export PATH=$PATH:$FFMPEG_HOME

3)在/etc/bashrc文件中设置环境变量。

该文件配置的环境变量将会影响全部用户使用的bash shell。但是,Linux也不建议在/etc/bashrc文件中设置系统环境变量。

2、用户环境变量

用户环境变量只对当前用户生效,设置用户环境变量也有多种方法。
在用户的主目录,有几个特别的文件,用ls是看不见的,用 ls .bash_* 可以看见。
1).bash_profile(推荐首选)
当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。
2).bashrc
当用户登录时以及每次打开新的Shell时该文件都将被读取,不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。
3).bash_logout
当每次退出系统(退出bash shell)时执行该文件。
4).bash_history
保存了当前用户使用过的历史命令。
3、环境变量脚本文件的执行顺序
环境变量脚本文件的执行顺序如下:
/etc/profile->/etc/profile.d->/etc/bashrc->用户的.bash_profile->用户的.bashrc
同名的环境变量,如果在多个脚本中有配置,以最后执行的脚本中的配置为准。
还有一个问题需要注意,在/etc/profile中执行了/etc/profile.d的脚本,代码如下:

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

所以,/etc/profile.d和/etc/profile的执行顺序还要看代码怎么写。

四、环境变量的生效

1)在Shell下,用export设置的环境变量对当前Shell立即生效,Shell退出后失效。
2)在脚本文件中设置的环境变量不会立即生效,退出Shell后重新登录时才生效,或者用source命令让它立即生效,例如:

source /etc/profile