1. 加载配置文件

linux程序启动后,会去读取加载配置文件。
登陆的终端分为:login-shell登陆系统,nologin-shell非登陆系统。不同的登陆终端,读取和加载的配置文件不同。
login-shell登陆系统,是以账号/密码登陆的终端,比如虚拟终端、远程登陆。
nologin-shell非登陆系统,是以GUI形式登陆的终端。
登陆模式和非登陆模式,启动所加载的配置文件不同。如下图所示:
image.png
遵循的大原则:

  1. 登陆模式,读取的主要是profile文件;非登陆模式,读取的主要是bashrc;
  2. /etc/xxx是全局配置,~/xxx是局部配置;
  3. 局部配置优先级高于全局配置,也就是说,会生效的是~/xxx局部配置。

login-shell登陆系统,读取的配置文件:

配置文件 解释
/etc/profile 全局配置
~/.bash_profile 局部配置,会覆盖全局配置
~/.bash_login 如果~/.bash_profile文件不存在,会读取~/.bash_login文件
~/.profile 如果~/.bash_profile和~/.bash_login文件都不存在,会读取~/.profile

依次按照顺序,首先读取全局配置,在读取局部配置,局部配置优先级高于全局配置,即局部配置会覆盖全局配置。

nologin-shell非登陆系统,读取的配置文件:

配置文件 解释
/etc/bashrc 全局配置
~/.bashrc 局部配置,局部配置会覆盖全局配置

2. 修改配置文件

在启动配置文件中,最重要的是~/.bashrc,login-shell模式,虽然没有直接使用~/.bashrc,但是在profile类型的配置文件中,可以查看有执行~/.bashrc文件。
直接通过vim修改相应的配置文件,其中修改较多的是$PATH环境变量。
$PATH是可执行程序的查找路径,以冒号分割开。比如输入ls命令,并不是在整个文件系统中查找,而是在$PATH环境路径中查找。
export可以操作环境变量,包括查看、删除、或赋值环境变量等。export的效用仅在此次登陆中。如下所示:

  1. export -p # 查看所有的环境变量
  2. export MYENV=7 # 定义环境变量并赋值

修改完配置文件后,怎样使其生效?有2种方式:1)可以直接关闭shell终端,重新打开终端后,会重新加载配置,新修改的配置即可生效;2)也可以强制执行配置文件,使其生效。

  1. source ~/.bashrc # 执行~/.bashrc配置文件

3. 应用

环境变量分为login in登陆模式和nonlogin in非登陆模式,每一种模式使用的配置,不完全相同,这也可以解释,为什么有时候修改了配置,并没有生效。
比如jenkins是以非登录模式运行,有时候在linux机器中可以正常运行,在jenkins中运行会报错“command not found”,这是因为jenkins没有读取profile的配置文件,可能找不到命令。