摘要:文章介绍了CentOS7
环境变量的相关知识,以及具体配置环境变量时的注意事项及建议。
参考文章
文章来源:C语言技术网
文章作者:码农有道
原文链接:https://www.cnblogs.com/wucongzhou/p/12579468.html
一、环境变量的概念
1、环境变量的含义
程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的。
2、环境变量的分类
- 按生效的范围分类。
系统环境变量:公共的,对全部的用户都生效。
用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。 - 按生存周期分类。
永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
临时环境变量:使用时在Shell
中临时定义,退出Shell
后失效。
3、Linux环境变量
Linux
环境变量也称之为Shell
环境量变,以下划线和字母打头,由下划线、字母(区分大小写)和数字组成,习惯上使用大写字母,例如PATH
、HOSTNAME
、LANG
等。
二、常用的环境变量
1、查看环境变量
env
命令echo
命令
2、常用的环境变量
PATH
:可执行程序的搜索目录,可执行程序包括Linux
系统命令和用户的应用程序,PATH
变量的具体用法本文后面的章节中有详细的介绍。LANG
:Linux
系统的语言、地区、字符集,LANG
变量的具体用法本文后面的章节中有详细的介绍。HOSTNAME
:服务器的主机名。SHELL
:用户当前使用的Shell
解析器。HISTSIZE
:保存历史命令的数目。USER
:当前登录用户的用户名。HOME
:当前登录用户的主目录。PWD
:当前工作目录。LD_LIBRARY_PATH
:C/C++
语言动态链接库文件搜索的目录,它不是Linux
缺省的环境变量,但对C/C++
程序员来说非常重要,具体用法本文后面的章节中有详细的介绍。CLASSPATH
:JAVA
语言库文件搜索的目录,它也不是Linux
缺省的环境变量,但对JAVA
程序员来说非常重要,具体用法本文后面的章节中有详细的介绍。
三、设置环境量
如果环境变量的值没有空格等特殊符号,可以不用单引号包含。
采用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
脚本即可。
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、环境变量脚本文件的执行顺序
环境变量脚本文件的执行顺序(由上到下)如下:1
2
3
4
5/etc/profile
/etc/profile.d
/etc/bashrc
用户的.bash_profile
用户的.bashrc
同名的环境变量,如果在多个脚本中有配置,以最后执行的脚本中的配置为准。
还有一个问题需要注意,在/etc/profile
中执行了/etc/profile.d
的脚本,所以,/etc/profile.d
和/etc/profile
的执行顺序还要看代码怎么写。代码如下:1
2
3
4
5
6
7
8
9for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
四、重要环境变量的详解
1、PATH
环境变量
可执行程序的搜索目录,可执行程序包括Linux
系统命令和用户的应用程序。如果可执行程序的目录不在PATH
指定的目录中,执行时需要指定目录。
1)PATH
环境变量存放的是目录列表,目录之间用冒号:
分隔,最后的圆点.
表示当前目录。1
export PATH=目录1:目录2:目录3:......目录n:.
2)PATH
缺省包含了Linux
系统命令所在的目录/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
,如果不包含这些目录,Linux
的常用命令也无法执行(要输入绝对路径才能执行)。
3)在用户的.bash_profile
文件中,会对PATH
进行扩充,如下:1
export PATH=$PATH:$HOME/bin
4)如果PATH
变量中没有包含圆点.
,执行当前目录下的程序需要加./
或使用绝对路径。
2、LANG环境变量
LANG
环境变量存放的是Linux
系统的语言、地区、字符集,它不需要系统管理员手工设置,/etc/profile
会调用/etc/profile.d/lang.sh
脚本完成对PATH
的设置。
- CentOS6.x 字符集配置文件在
/etc/syscconfig/i18n
文件中。 - CentOS7.x 字符集配置文件在
/etc/locale.conf
文件中,内容如下:1
2
3
4-bash-4.2# cat /etc/locale. conf
LANG=zh_CN.gbk
#LANG=zh_CN.utf8
#LANG=zh_CN.gb18030
3、LD_LIBRARY_PATH
环境变量
C/C++
语言动态链接库文件搜索的目录,它不是Linux
缺省的环境变量,但对C/C++
程序员来说非常重要。LD_LIBRARY_PATH
环境变量存放的也是目录列表,目录之间用冒号:
分隔,最后的圆点.
表示当前目录,与PATH
的格式相同。1
export LD_LIBRARY_PATH=目录1:目录2:目录3:......目录n:.
4、CLASSPATH
JAVA
语言库文件搜索的目录,它也不是Linux
缺省的环境变量,但对JAVA
程序员来说非常重要。CLASSPATH
环境变量存放的也是目录列表,目录之间用冒号:
分隔,最后的圆点.
表示当前目录,与PATH
的格式相同。
五、环境变量的生效
1)在Shell
下,用export
设置的环境变量对当前Shell
立即生效,Shell
退出后失效。
2)在脚本文件中设置的环境变量不会立即生效,退出Shell
后重新登录时才生效,或者用source
命令让它立即生效,例如:1
source /etc/profile
六、应用经验
虽然设置环境变量的方法有多种,但是建议系统环境变量建议在/etc/profile.d
目录中配置,用户环境变量在用户的.bash_profile
中配置,不建议在其它脚本文件中配置环境变,会增加运维的麻烦,容易出错。