Linux profile 和 bashrc 的区别

Linux 系统上有四个环境配置文件,分别为:

  • /etc/profile
  • /etc/bash.bashrc
  • ~/.profile
  • ~/.bashrc

1. 先从作用域来说

/etc 目录下的配置文件影响所有用户。
~/ 用户家目录下的配置文件只影响本用户。

2. 从加载时机来说

profile 是用户在登录系统的时候加载的。profile 在用户登录使用的过程中只加载一次。修改之后,需要重启系统生效。我们把 profile 叫做登录式 SHELL 配置文件,
bashrc 是用户在启动 bash shell 的时候加载的。也就是启动一个 terminal 终端的时候加载。修改之后,只要重启 terminal 就生效了。或者手动 source ~/.bashrc 也能生效。我们把 bashrc 叫做非登录式 SHELL 配置。

3. 各文件的加载流程

登陆式 SHELLL 配置文件加载顺序:/etc/profile > .bash_profile > .bash_login > .profile > .bash_logout
非登录式 SHELL 配置文件加载顺序:/etc/bash.bashrc > .bashrc

4. 知识点应用举例

问题:在 clion 中设置交叉编译环境,获取不到 .bashrc 中设置的 PATH 环境变量。

在 ~/.bashrc 中设置交叉编译工具环境变量

1
export PATH=$PATH:/media/deep/source-code/Hi3516/sourceCode/toolchain/arm-himix200-linux/bin

在 clion 中设置交叉编译工具

1
2
3
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER arm-himix200-linux-gcc)
set(CMAKE_CXX_COMPILER arm-himix200-linux-g++)

clion 中提示 arm-himix200-linux-gcc 找不到。但直接在 terminal 中执行 cmake 是可以编译成功的。

原因分析:clion 是由 gnome 桌面启动的。gnome 是由登录式 shell 启动的。因此环境变量是继承的登录式 shell 的环境变量。也就是 profile 配置的环境变量。profile 中没配置 arm-himix200-linux 路径,因此找不到。启动的终端是非登录式 shell。会加载 bashrc 文件, 因此能找到 arm-himix200-linux。

解决方案:在 ~/.profile 中设置编译工具环境变量,然后重启即可。

1
2
3
4
5
6
7
8
9
qiushao@qiushao-PC:~$ tail .profile 
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi

export PATH=$PATH:/media/deep/source-code/Hi3516/sourceCode/toolchain/arm-himix200-linux/bin

qiushao@qiushao-PC:~$