什么是环境变量?
Linux 环境变量是一个包含值的对象。简单来说,它是一组数据对象及其各自的值。如果对编程语言熟悉的话,那么这个环境变量是很好理解的,就类似于编程语言中的变量。Linux 环境变量的执行与变量在编程语言中具有相同的工作。都是用于定义一个变量值,能够在其它地方能够使用它。
如果对编程编程语言不熟悉的话,则可以将linux变量理解为一个存储值的一个容器,用于保存名称以及对应的变量值。此值可以是文件系统中所有可执行文件的位置、应使用的默认编辑器或系统区域设置,或者一个全局默认的值。
那么就举个例子来理解一下这个环境变量,比如通常在Linux系统中执行ls命令,ls 基本命令用于列出目录的内容。在 linux 中执行命令时,需要键入该命令的完整路径。才能够找到对应的执行文件,由于 ls 命令位于/bin目录中,因此用户应执行/bin/ls命令以列出当前目录中的文件。那么Linux环境变量的魔力来了。Linux 有一个 PATH 变量。在 PATH 变量的帮助下,不需要完整路径。bash shell 会自动在用户的 PATH 变量中列出的目录中搜索用户刚刚在命令行中键入的命令。当匹配的命令找到 shell 时,将运行它。通过这种方式,环境变量提供了一种在 Linux 中的多个应用程序和进程之间共享配置设置的简单方法。
第一部分:查看环境变量
如何展示环境变量
printenv或env命令可用于列出 linux 环境变量。coreutils包中包含printenv和env。使用 printenv 命令显示 linux 环境变量。
[root@sharplee ~]# printenvor[root@sharplee ~]# env
第二部分:如何设置环境变量
1,设置临时环境变量
使用export命令来设置临时环境变量,这个变量是只存在于设定环境变量的会话中,其它会话窗口是不会有该变量的,一旦会话结束或者会话退出,重新连接会话,该环境变量就不存在了,如果还需要使用的话还得继续设定该环境变量。比如PATH环境变量,是一个可执行文件的环境变量路径。下面就来设置一个环境变量加在PATH路径上,可以在任何地方执行该路径下的脚本,就不用在执行时还需要带上脚本路径。下面就来创建一个脚本路径。
[root@sharplee ~]# mkdir testPath
接下来在这个testPath目录下创建一个可执行脚本testscript.sh。
[root@sharplee testPath]# echo “echo 大乐学IT” >>testscript.sh
下面把这个可执行脚本的路径添加到PATH环境变量中去,可以在任何地方执行testscript.sh脚本。
[root@sharplee testPath]# export PATH=”${PATH}:/root/testPath”
接下来给这个可执行文件加一下执行权限。
[root@sharplee testPath]# chmod +x testscript.sh
最后来验证一下这个环境变量是否生效。
[root@sharplee ~]# testscript.sh
接着在新建一个会话,看一下该命令是否生效。
说明这个临时环境变量只在当前会话中生效,其它会话是不会生效的。那么如何设置环境变量让其它会话也生效呢?
2,设置环境变量永久的
通过上面可以看出,临时变量仅在当前会话上可用。那如何能让这个变量在多个会话上都能用呢?可以设置环境变量永久化。出于安全原因,如果对linux 系统没有充分的了解,建议不应定义全局环境变量。例如,一般都是将testPath添加到特定用户的 PATH 变量中。在这种情况下,请在本地定义它。因为这样的话就不会让系统上的所有其他用户也在其PATH中拥有它。
以下文件应用于系统上的局部环境变量:~/profile、~/.bash_profile、~/.bash_login 和 ~/.bash_logout。接下来,增加上面设置的testPath进入到~/.bash_profile中。
[root@sharplee ~]# vi ~/.bash_profile
编辑完成之后,执行”source ~/.bash_profile”使其立马生效。下面来测试一下,设置完环境变量之后,脚本是否能够正常执行。
最后,新登录一个会话,看是否还能进行脚本的执行。
从上图可以看出重新登录一个会话也是能够执行脚本的,PATH环境变量中也包含脚本的执行路径。那如果我们换个用户登录,看一下是否还能执行呢?
换个用户登录是执行不了脚本的。说明这种方式只能针对具体的用户永久化,有没有针对用户永久化的呢?
3,设置环境变量全局永久化
root 权限需要全局设置 linux 环境变量。RHEL 维护和管理大量文件中的环境变量。但是,可以不用注意可能包含环境变量的所有文件。按照 RHEL 建议,只应关注在某些特定文件中设置环境变量。以下文件应用于在系统上定义全局环境变量:/etc/profile、/etc/bash.bashrc 和 /etc/environment。/etc/profile.d目录用于定义全局脚本。下面就在/etc/profile.d目录下创建一个全局脚本,启动时就会运行该脚本。接着在/etc/profile中添加一个“export PATH=”${PATH}:/root/testPath“”命令,即可在任何用户下都能执行该脚本了。
[root@sharplee profile.d]# echo “echo 大乐学IT,测试全局环境变量”>>testglobal.sh
下面就来测试一下,这个全局脚本路径。是不是在所有用户下都能执行。
总结:通过上面几种方式都可以设置环境变量,第一种是临时环境变量,只在当前会话中使用,第二种是用户会话永久化,针对具体的用户的会话做环境变量永久化,特定用户无论开了多少会话窗口都能够执行,最后一种是针对所有用户的全局环境变量,就是所有用户可以共享的,在/etc/profile文件中设置环境变量,在所有用户中都能使用。但是强烈建议使用第一种,第二种方式,第三种方式一般不建议使用涉及安全问题。