在开始介绍正文之前,先来了解下什么是linux的环境变量?

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,这些参数会对系统行为产生影响。

比如常用的PATH环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还会到PATH中指定的路径去找。你可以在终端使用printenv PATH/echo $PATH查看当前PATH变量的值。

Linux系统下修改/自定义环境变量的方法通常分为两类:临时修改和永久性修改。下面分别介绍两种修改环境变量的方法。在这里以修改linux系统下的PATH环境变量(该环境变量保存了linux系统下所有可执行的程序的目录,linux系统执行某个可执行程序时,会以该环境变量的值(路径)去寻找可执行的程序名)为例进行举例。
PATH环境变量:该环境变量保存了linux系统下所有可执行的程序的目录,linux系统执行某个可执行程序时,会以该环境变量的值(路径)去寻找可执行的程序名,如果找到,则可以执行,如果找不到则会提示:无法找到××命令的错误。

1、临时修改/自定义环境变量

(1)临时自定义环境变量。

注意,系统默认的环境变量名称一般为大写,自定义的环境变量名称一般为小写,这样是为了避免命名上的冲突。
自定义临时环境变量时,有两种办法,一种是在terminal终端命令行直接定义,如下:

麒麟系统设置java系统变量 麒麟系统修改环境变量_bash


注意,此时自定义的my环境变量的作用范围仅限于当前shell(此时定义的my变量实际上是局部变量),在当前shell的子shell中无法寻找到该自定义变量。直接在其子shell中无法直接使用它。要想在其子shell中使用,必须用export命令来导出它为全局变量。

麒麟系统设置java系统变量 麒麟系统修改环境变量_环境变量_02


如上图所示,在定义my环境变量的子shell中无法识别到my环境变量。

当定义完my环境变量后,利用export命令将其转化为全局变量:

麒麟系统设置java系统变量 麒麟系统修改环境变量_麒麟系统设置java系统变量_03


可以看到,使用export将my环境变量导出成全局变量后,在其子shell中也可以识别到。

**注意!!!!**使用export导出的my环境变量仅仅适用于当前的shell及其衍生shell中,退出当前shell后,my变量将不复存在。所以,这也是该方法被称为临时定义变量的原因。

自定义临时环境变量时,除了在terminal终端命令行直接定义外,还可以使用shell脚本的方法来事先定义好一个环境变量。并用source命令(或者 . 命令)(这么做是因为使用这两个命令是在当前shell中激活该脚本,不会产生子shell)在使用该变量的shell中激活该shell脚本即可。
例如,事先在test.sh脚本中定义好my环境变量,并导出为全局变量。在当前shell中激活test.sh脚本。

麒麟系统设置java系统变量 麒麟系统修改环境变量_麒麟系统设置java系统变量_04


在要用到my自定义变量的shell中激活test.sh文件:

麒麟系统设置java系统变量 麒麟系统修改环境变量_环境变量_05


实际上,第二中方法是第一种方法的shell脚本表达。

(2)临时修改环境变量。

这里修改的是PATH环境变量,为该变量添加一个可执行的shell脚本的路径:/home/mc146/shell_p/for_test.sh。自己操作时换成自己的目录即可。for_test.sh脚本的内容如下:

麒麟系统设置java系统变量 麒麟系统修改环境变量_bash_06


在命令行修改PATH环境变量,修改方法:PATH=$PATH:待添加的可执行程序目录.

麒麟系统设置java系统变量 麒麟系统修改环境变量_环境变量_07


同自定义环境的转为全局环境变量一样,该修改操作仅限于当前shell及其衍生的子孙shell中。一旦退出当前shell(最顶层shell),PATH环境变量仍会维持原值不变。

下面使用shell脚本的方法来临时修改PATH环境变量,方法与使用shell脚本的方法来自定义全局变量相同。下面是修改PATH环境变量的脚本。名字为test.sh。位于/home/mc146/Desktop/test.sh。

麒麟系统设置java系统变量 麒麟系统修改环境变量_自定义_08


在要执行for_test.sh这一脚本的shell中激活修改PATH环境变量的脚本即可:注意,在这里是使用.命令(source命令的别名)来激活test.sh文件。

麒麟系统设置java系统变量 麒麟系统修改环境变量_环境变量_09

同在命令行中修改PATH环境变量一样,该修改操作仅限于当前shell及其衍生的子孙shell中。一旦退出当前shell(最顶层shell),PATH环境变量仍会维持原值不变。

2、永久性修改/自定义环境变量。

Ubuntu系统包含两类环境变量:系统环境变量和用户环境变量。系统环境变量对所有系统用户都有效,用户环境变量仅仅对当前的用户有效。首先明确一点,永久性添加/修改的环境变量对所有的shell都有效,都是全局变量。想要永久性修改或定义环境变量,有以下两大类方法进行修改/添加环境变量:

(1)系统级修改/添加—对所有的用户都添加/修改。

系统级的环境变量的永久性修改以及添加可以通过一下几个文件或者目录进行操作即可:

/etc/profile
  
   /etc/profile.d(它是文件夹),可通过在该目录下面新建一个shell脚本来添加自定义环境变量。
    
   /etc/bash.bashrc

/etc/profile和/etc/profile.d都是常用的设置环境的地方。其中/etc/profile.d文件夹来源于/etc/profile,在该目录下的*.sh,即以sh为后缀的文件在登录系统时都会被加载作用到整个shell环境中。因此,可以通过在/etc/profile.d目录下定义一个用来修改或添加新环境变量的shell脚本(类似于上文中的test脚本)来修改或添加自定义(永久性)环境变量。

类似地,不推荐使用/etc/bash.bashrc,因为在图形界面环境下启动程序时,不会加载它里边的环境变量设置。

在这里,本文将要添加的/修改的环境变量操作放到:**/etc/profile文件**中。

本文中仍以添加my自定义变量和修改PATH环境变量(添加for_test.sh这一shell脚本的路径)为例。具体如下:

麒麟系统设置java系统变量 麒麟系统修改环境变量_环境变量_10


注意,要想使该操作完全生效,必须重启系统。如果单单是在某个shell中source 该文件的话,则该操作会退化为临时添加或者修改环境变量。

**重启后验证以下两个变量是否添加成功,结果有点意外,修改环境变量成功了,但是添加西自定义变量失败。。。。。:**如下图所示:

麒麟系统设置java系统变量 麒麟系统修改环境变量_麒麟系统设置java系统变量_11

不知道什么原因,自定义的my环境变量并没有通过/etc/profile文件添加成功。(本文所使用的系统为ubunt18.04LTS,不知道是不是系统的原因,各位大佬有类似成功的还望在评论区交流哈。在此谢过了。)

(2)用户级修改/添加—仅对当前用户添加/修改环境变量。

用户环境变量可存储在以下文件中:

~/.profile
 ~/.bashrc
 ~/.bash_profile
 ~/.bash_login

推荐将环境变量保存在~/.profile中,因为无论是通过控制台还是图形界面启动程序时,都会自动执行该文件。 而~/.bashrc, ~/.bash_profile,~/.bash_login这些文件,当通过shell启动程序时,它们也会被加载;但当通过图形界面环境启动程序时,这些文件中的环境变量设置便不可用了。

在这里,本文将要添加的/修改的环境变量操作放到:~/.bashrc文件中。

本文中仍以添加my自定义变量和修改PATH环境变量(添加for_test.sh这一shell脚本的路径)为例。具体如下:

麒麟系统设置java系统变量 麒麟系统修改环境变量_自定义_12


重启系统后,验证一下添加的my 自定义环境变量和修改的PATH环境变量的效果。

麒麟系统设置java系统变量 麒麟系统修改环境变量_环境变量_13


可以看到,对my自定义环境变量以及PATH环境变量的修改都成功了。

写在最后,本文在书写过程中,参考了一下两位大佬的博客,在此贴出来,以示尊敬: