理解Linux环境变量及配置文件执行顺序

每个用户都有自己专属的运行环境,这个环境是由一组变量所定义,这些变量称之为环境变量。用户可以修改环境变量以满足自己的要求。

设置环境变量:$export NAME="HELLOWORLD"  ( 临时变量,重启系统将失效)

显示环境变量:$echo $NAME

env 命令查看当前用户的环境变量


如果要想把环境保存于系统,以便下次开机还能生效就必须配置到以下文件中:

     /etc/profile;~/ .bash_profile~/ .bash_login~/.profile;~/ .bash_logout; 

    /etc/bash.bashrc;~/.bashrc;

那么他们之间有什么样的区别呢?

 

首先理解一下概念:

    login shell:用户通过终端登录凭借用户名和密码登录控制台的动作是login shell,也就是说最终会调用login命令的操作都可称之为login shell。

    non-login shell:用户在图形界面启动一个terminal,或者执行/bin/bash,/usr/bin/bash都属于non-login shell。

 

用户登录时,会读取login shell。读取文件的顺序是:

  1.   /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile

       即: /etc/profile 是必须要执行的,然后后面3个,按照顺序谁存在就执行谁,然后后面的就不会再执行。其逻辑可用代码表示为:

 

Java代码   收藏代码
  1. execute /etc/profile  
  2. IF ~/.bash_profile exists THEN  
  3.     execute ~/.bash_profile  
  4. ELSE  
  5.     IF ~/.bash_login exist THEN  
  6.         execute ~/.bash_login  
  7.     ELSE  
  8.         IF ~/.profile exist THEN  
  9.             execute ~/.profile  
  10.         END IF  
  11.     END IF  
  12. END IF  

注意:1. /etc/profile 是全局配置,任意一个用户登录的时候都会载入该配置文件内容,而~开头的几个配置文件只是在相应用户登录的时候才会载入

            2. 上面几个文件只会在用户登录的时候载入一次,在用户重新登录之前,即使配置文件被修改了,也不会在自动刷新

 

 退出交互控制台,会执行~/.bash_logout  :

 

Java代码   收藏代码
  1. IF ~/.bash_logout exists THEN  
  2.     execute ~/.bash_logout  
  3. END IF  

 

 对于 /etc/bash.bashrc 和~/.bashrc,是在non login shell 启动时执行,也就意味着在图形界面每开启一次terminal,就会读取一次该文件。

/etc/bash.bashrc是每个用户都有效的,而~/.bashrc是只对对应用户有效。

 

Java代码   收藏代码
  1. IF ~/.bashrc exists THEN  
  2.     execute ~/.bashrc  
  3. END IF  

 

 

在很多Redhad发行版中和Ubuntu发行版中,如果.bashrc存在于home目录,它将从.bash_profile或.profile中运行。即执行.bash_profile或.profile配置时会同时执行.bashrc配置文件内容。

下面是.bash_profile或.profile中有的代码

# Run .bashrc if it exists

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi



 总的来说,配置文件分两种:1. login shell 在登录时即生效

                                                     2. non login shell 在每次打开终端时都会生效


同时 login shell 又分为登录时和退出时两种情况。

 

注意: 1. /etc/environment是整个系统的环境,而/etc/profile是所有用户的环境,前者启动系统后就会去读取该文件,后者只有在用户登录的时候才去读取

             2. 当用户修改配置文件之后,系统不会自动更新,因此用户可以采用source指令 或 .指令(“点”指令)来手动刷新,操作方法为:

                          source 你要刷新的文件路径     或      . 你要刷新的文件路径

                 但是,在终端执行该指令时,只会对当前终端有效,对于其他所有终端无效。

                 因此,修改profile类配置文件,如/etc/profile、~/.profile之后,最有效的办法还是用户退出再登录。

                 而bashrc类配置文件由于跪在每次重开终端时就游戏,所以修改配置后关闭终端再重开即可。


本人现在是有/etc/profile;~/.profile;~/ .bash_logout

/etc/bash.bashrc;~/.bashrc;

因为比较好记忆,两个profile,两个bashrc,一个bash_logout

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值