Linux配置文件加载顺序

Linux配置文件加载顺序教程

在登录 Linux 系统并启动一个 bash shell 时,默认情况下 bash 会在若干个文件中查找 环境变量 的设置。这些文件统称为系统环境文件。bash 检查的环境变量文件的情况取决于系统运行的 shell 方式。

在启动时,Linux 会加载一些系统的配置文件,这些配置文件主要涉及到 /etc/profile、./bash_profile、./bash_rc、/etc/bashrc 和 /etc/profile.d/ 等。

Linux /etc/profile ~./bash_profile ~./bash_rc /etc/bashrc详解

配置文件 描述
/etc/profile 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从 /etc/profile.d 目录的配置文件中搜集 shell 的设置。
/etc/bashrc 为每一个运行 bash shell 的用户执行此文件,当 bash shell 被打开时,该文件被读取。
~/.bash_profile 每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的 .bashrc 文件。
~/.bashrc 该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该该文件被读取。
~/.bash_logout 当每次退出系统(退出bash shell)时,执行该文件。另外,/etc/profile 中设定的变量(全局)的可以作用于任何用户,而 ~/.bashrc 等中设定的变量(局部)只能继承 /etc/profile 中的变量,他们是 “父子” 关系。
~/.bash_profile 是交互式、login 方式进入 bash 运行的。

Linux配置文件加载顺序详解

在我们登录 Linux 时,有三种登录方式,即,通过系统用户登录默认运行的 shell 登录、非登录交互式运行 shell 以及执行脚本运行非交互式 shell。

当用户登录 linux 时,shell 会作为登录 shell 启动。此时的登录 shell 加载环境变量的顺序如图所示:

35_Linux配置文件加载顺序.png

用户登录系统后首先会加载 /etc/profile 全局环境变量文件,这是 Linux 系统上默认的 shell 主环境变量文件。系统上每个用户登录后都会加载这个文件。

当加载完 /etc/profile 文件后,才会执行 /etc/profile.d 目录下的脚本文件,这个目录下脚本有很多。

之后开始运行 $HOME/.bash_profile(用户环境变量文件),在这个文件中,又会去找 $HOME/.bashrc(用户环境变量文件),如果有,则执行 ,如果没有,则不执行。

在 $HOME/.bashrc 文件中又会去找 /etc/bashrc(全局环境变量文件),如果有,则执行 ,如果没有,则不执行。

如果用户的 shell 不是登录时启动的(比如手动敲下 bash 时启动或者其他不需要输入密码的登录以及远程 ssh 链接情况),那么这种非登录 shell 只会加载 $HOME/.bashrc(用户环境配置文件),并会去找 /etc/bashrc(全局环境变量文件)。

因此如果希望在非登录 shell 下也可读到设置的环境变量等内容,就需要将变量设定等写入 $HOME/.bashrc 或者 /etc/bashrc,而不是 $HOME/.bash_profile 或者 /etc/profile。

测试Linux配置文件加载顺序

思路

通过在不同的配置文件里面写入不同的内容,最终看输出的顺序。

案例

我们首先,使用 vim 命令打开 environment 文件,并写入内容,具体命令如下:

vim /etc/environment

按下回车,并输入内容,如下图所示:

36_Linux配置文件加载顺序.png

即,我们使用了 echo 命令,在其被加载的时候输出了一句话,同样,我们修改 profile 配置文件,具体命令如下:

vim /etc/profile

按下回车,并输入内容,如下图所示:

37_Linux配置文件加载顺序.png

再次,我们修改 bash.bashrc 配置文件,具体命令如下:

vim /etc/bash.bashrc

按下回车,并输入内容,如下图所示:

38_Linux配置文件加载顺序.png

再次,我们修改 profile.d/ 配置文件,具体命令如下:

vim /etc/profile.d/test.sh

按下回车,并输入内容,如下图所示:

39_Linux配置文件加载顺序.png

再次,我们修改 .profile 配置文件,具体命令如下:

vim ~/.profile

按下回车,并输入内容,如下图所示:

40_Linux配置文件加载顺序.png

再次,我们修改 .bashrc 配置文件,具体命令如下:

vim ~/.bashrc

按下回车,并输入内容,如下图所示:

41_Linux配置文件加载顺序.png

现在,我们重新使用 ssh 登录,我们看到,此时输出如下:

42_Linux配置文件加载顺序.png

即,我们通过在不同的配置文件里面写入不同的内容,测试了配置文件的加载顺序。

Linux配置文件加载顺序总结

login方式登录

比如使用 ssh 登录,读取顺序为:

/etc/profile -> (~/.bash_profile, ~/.bash_login, ~/.profile)

non-login方式登录

non-login 登录方式有:screen 命令,bash 命令,su 切换用户,从图形界面打开 teminal 等,加载顺序为:

Ubuntu:/etc/bash.bashrc -> ~/.bashrc Red Hat:~/.bashrc

其它

上述的读取顺序都是系统规定,不会被改变的顺序,但很多情况下,一个配置文件里还会读取另一些配置文件。例如,/etc/profile 中会有一段命令会执行 /etc/profile.d/*.sh 里的脚本。

Ubuntu下 的 /etc/profile 还会去执行 /etc/bash.bashrc,Red Hat 下的 ~/.bash_profile 会去执行 /.bashrc,/.bashrc 会去执行 /etc/bashrc。