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

每一个用户都有本身专属的运行环境,这个环境是由一组变量所定义,这些变量称之为环境变量。用户能够修改环境变量以知足本身的要求。shell

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

显示环境变量:$echo $NAMEterminal

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

 

若是要想把环境保存于系统,以便下次开机还能生效就必须配置到如下文件中:~/.bashrc;~/ .bash_profile,;~/.profile; /etc/profile;etc/bash.bashrc,那么他们之间有什么样的区别呢?登录

 

首先理解一下概念:变量

login shell:用户经过终端登陆凭借用户名和密码登陆控制台的动做是login shell,也就是说最终会调用login命令的操做均可称之为login shell。配置

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

 

对于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  

 

 退出交互控制台,执行的文件是:

 

Java代码  收藏代码

  1. IF ~/.bash_logout exists THEN  

  2.     execute ~/.bash_logout  

  3. END IF  

 

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

 

Java代码  收藏代码

  1. IF ~/.bashrc exists THEN  

  2.     execute ~/.bashrc  

  3. END IF  

 

 

在不少Redhad发行版中和Ubuntu发行版中,若是.bashrc存在于home目录,它将从.bash_profile或.profile中运行,。多是有如下代码

# Run .bashrc if it exists

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

 

了解他们的执行顺序后,就知道环境变量该怎么放了。笔者将Java的环境变量都配置于~/.profile中。

 

另:/etc/environment是整个系统的环境,而/etc/profile是全部用户的环境,前者启动系统后就会去读取该文件,后者只有在用户登陆的时候才去读取

相关文章
相关标签/搜索