Linux系统环境变量位置, 环境变量持久化

一.系统环境变量位置

  在上章中,知道了如何修改系统环境变量,如PATH变量,以及创建自己的全局环境变量和局部环境变量。这篇学习怎么让环境变量的作用持久化。在此之前,先了解下系统环境变量文件会在哪些位置,当使用bash shell时,bash是如何查找环境变量位置的。下面先来介绍几个文件,这些文件叫启动文件或叫环境文件。

  bash检查的启动文件(环境文件)取决于你启动bash shell的方式。启动bash shell有3种方式:

(1) 登录时的默认登录shell。

(2) 交互式shell。

(3) 运行脚本的非交互式shell。
    

  1.1 登录shell

    登陆shell是指:(1) 用户登陆时,输入用户名和密码后启动的shell(例如使用ssh登录远程主机等);(2) 通过带--login参数的命令:bash --login而启动的shell。当登录linux系统时,bash shell作为登录shell启动,登录shell会从5个不同的启动文件里读取命令。包括:/etc/profile,  $HOME/.bash_profile, $HOME/.bashrc, $HOME/.bash_login, $HOME/.profile。而/etc/profile文件是系统默认的bash shell的主启动文件。另外4个启动文件是针对用户的(不同发行版中,四个启动文件一般都只有一到二个),可根据个人需求定制。

     (1) /etc/profile文件

      只要登录了linux系统,bash就会执行/etc/profile启动文件中的命令(不同发行版的/etc/profile,有不同的设置和命令),profile文件内容如下图所示:
        

Linux系统环境变量位置, 环境变量持久化


      profile文件内容太长,截取了一段。 上图有个for语句,它用来循环读取/etc/profile.d目录下的所有文件。该文件目录包含以下文件,如下图所示:
        

Linux系统环境变量位置, 环境变量持久化


      上图启动文件中sh后缀的供bash shell 使用, csh后缀的供 c shell使用。lang.csh和lang.sh文件会尝试去判定系统上采用的默认语言字符集。对应LANG环境变量。
        

    (2) $HOME目录下的启动文件
      HOME目录下的隐藏文件,找到了$HOME/.bash_profile, $HOME/.bashrc。每个用户都可以编辑这些文件添加自己的环境变量,这此环境变量会在每次启动 bash sehll 会话时生效。 HOME目录如下图所示:
        
      .bash_profile启动文件会先去检查HOME目录下是不是有一个叫.bashrc的启动文件,如果有就会先执行里面的命令。bash_profile文件内容如下图所示:
        

Linux系统环境变量位置, 环境变量持久化


      上图中,可以看到在.bash_profile文件中给PATH变量添加了一个目录路径,并用export PATH 导入到全局中。在.bash_profile文件中加的变量可以持久化。

  1.2 交互式shell进程

    交互式shell是指:就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。命令行提示符输入命令,只会检查用户HOME目录中的.bashrc文件。 该文件两个作用:1是查看/etc目录下通用的bashrc文件,2是为用户提供一个定制自己的命令别名(前面讲alias命令)和私有脚本函数(后面介绍)。 .bashrc文件内容如下图所示:
      

Linux系统环境变量位置, 环境变量持久化



  1.3 非交互式shell

    非交互式shell是指:以shell script(非交互)方式执行。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。 系统执行shell脚本时用的这是这种shell。区别是它没有命令提示符。但当你的系统上运行脚本时,也许希望能够运行一些特定启动的命令。
    为了处理这种情况bash shell提供了BASH_ENV环境变量。当shell 启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。默认情况下并未设置该变量,使用printenv命令只返回提示符:
      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12496.html