Linux系统环境变量

环境变量

1.1 环境变量概念

    环境变量是一个在操作系统中具有特定名字的对象,它包含了一个或者多个应用程序所将要使用的信息。

    在shell中经常会用环境变量来存储有关shell会话和工作环境的信息。通过环境变量,可以在内存中存储数据,以便程序或者shell运行脚本能够轻松访问它们。

    环境变量分为两类:全局变量、局部变量。

    全局变量对于shell会话和所有生成的子shell都是可见的(在子shell中修改或创建全局环境变量不会影响到父shell,修改或创建父shell的全局变量子shell的值也会改变),局部变量则只对创建它们的shell可见。

1.2 环境变量的加载

    当登入Linux系统启动一个bash shell时,默认情况下bash会在几个文件中查找命令。这些文件叫做启动文件或环境文件。bash检查的启动文件取决bash shell的启动方式。bash shell的启动方式有三种:登录时作为默认登录的shell、作为非登录shell的交互式shell、作为运行脚本的非交互式shell。

1.2.1 登录时默认shell

    当bash shell作为登录shell启动,会从如下5个不同的启动文件里读取命令:

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

    /etc/profile文件是系统上默认的bash shell主启动文件,每个用户登录都会执行这个启动文件。另外4个启动文件是针对用户的,可以根据个人需求进行定制。shell会按照$HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile的顺序查找要运行的环境文件,运行第一个被找到文件,余下的则会被忽略。$HOME/.bashrc这个环境文件通常是通过其他环境文件调用运行的。

1.2.2 交互式shell

    如果bash shell不是登录系统时启动的(如是在命令提示符下通过bash命令启动的shell),那么启动的shell叫做交互式shell。交互式shell不像登录shell一样运行,但是依然提供了命令提示符来输入命令。

    交互式shell不会访问/etc/profile环境文件,只会检查用户HOME目录中的.bashrc文件(但是通常会继承父shell的全局变量)。

1.2.3 非交互式shell

    非交互shell没有命令提示符,通常用户在执行shell脚本或者系统用户设定的定时器执行的定时脚本都是这类shell。

    当启动非交互式shell时会检查系统启动这个非交互式shell的用户的全局环境变量中的BASH_ENV的值,来查看要执行的环境文件,如果有指定文件,shell会执行该文件的命令,这通常包括shell脚本变量设置。但是大部分默认情况下BASH_ENV这个环境变量是没有值的。

    那就有个问题了,shell脚本去哪里获取环境变量呢。别忘了上面说的,脚本通常是被某个用户启动的,所有呢通常运行脚本shell就是用户的登录shell或登录shell的子shell。

    看个例子,在test.sh脚本中打印出环境变量HOME,通过HOME值就可以知道这个脚本运行在哪个登录用户下的了(根据其是在登录shell中还是登录shell的子shell中就可以知道脚本可以使用的环境变量)。同时用ps --forest查看shell的运行树:


    如上运行结果可以看出,脚本是运行在root用户环境下的,并且启动了个子shell来运行脚本。

1.3 设置永久的全局或者局部环境变量

    通常可以通过将环境变量添加入/etc/profile文件中来设置全局的永久环境变量,但是呢其实这不是最好的设置全局永久环境变量的方式。可以通过在/etc/profile.d目录(运行profile时会去轮询这个目录下的文件并执行)中创建一个以.sh结尾的文件把新的或者修改环境变量放置在这个文件中,可以避免系统升级导致/etc/profile文件被替换设置的全局永久环境变量消失。

    对于大多数的Linux发行版本中,存储个人永久性环境变量比较好的设置地方是$HOME/.bashrc文件中,多数的Linux系统版本中个人环境文件都会调用$HOME/.bashrc这个环境文件,如下/root/.bash_profile环境文件内容:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值