Linux 系统中,三种配置文件 profilebash_profilebashrc,本文主要记录下不同配置文件的作用范围。

profile

profile,路径:/etc/profile,用于设置系统级的环境变量和启动程序,在这个文件下配置会对 所有用户 生效。

当用户登录(login)时,文件会被执行,并从 /etc/profile.d 目录的配置文件中查找 shell 设置。

在 profile 中设置环境变量

一般不建议/etc/profile 文件中添加环境变量,因为在这个文件中添加的设置会对所有用户起作用。

当必须添加时,我们可以按以下方式添加:

如,添加一个 HOST 值为 xx.cn 的环境变量:

1
export HOST=xx.cn

添加时,可以在行尾使用;号,也可以不使用。

一个变量名可以对应多个变量值,多个变量值需要使用:进行分隔。

添加环境变量后,需要重新登录才能生效,也可以使用 source 命令强制立即生效:

1
source /etc/profile

查看是否生效可以使用 echo 命令:

1
2
$ echo $HOST
xx.cn

bashrc

bashrc 文件用于配置函数或别名。bashrc 文件有两种级别:

  • 系统级

    系统级的位于/etc/bashrc,对所有用户生效。

  • 用户级

    用户级的位于~/.bashrc,仅对当前用户生效。

bashrc 文件只会对指定的 shell 类型起作用,bashrc 只会被 bash shell 调用。

bash_profile

bash_profile 只对单一用户有效,文件存储位于~/.bash_profile,该文件是一个用户级的设置,可以理解为某一个用户的 profile 目录下。

这个文件同样也可以用于配置环境变量和启动程序,但只针对单个用户有效。

和 profile 文件类似,bash_profile 也会在用户登录(login)时生效,也可以用于设置环境变理。

但与 profile 不同,bash_profile 只会对当前用户生效。

区别

主要区别:

  • /etc/profile/etc/bashrc 是系统全局环境变量设定;

  • ~/.profile~/.bashrc用户家目录下的私有环境变量设定。

当登入系统时候获得一个 shell 进程时,其读取环境设定档[1] 如下:

  • 首先读入全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如/etc/profile.d/etc/inputrc
  • 根据不同使用者帐号,于其家目录内读取~/.bash_profile
  • 读取失败则会读取~/.bash_login
  • 再次失败则读取~/.profile(这三个文档设定基本上无差别,仅读取上有优先关系);
  • 最后,根据用户帐号读取~/.bashrc

至于~/.profile~/.bashrc都具有个性化定制功能,但~/.profile可以设定本用户专有的路径、环境变量等,它只能登入的时候执行一次。

~/.bashrc也是某用户专有设定文档,可以设定路径、命令别名,每次 shell script 的执行都会使用它一次。


  1. https://zhuanlan.zhihu.com/p/405174594 ↩︎