环境变量配置文件区别详解

这是一个非常重要的概念!这些文件加载时机不同、作用范围不同、优先级不同

一、配置文件分类

1.1 按作用范围分

级别文件说明
系统级/etc/profile所有用户生效
系统级/etc/bashrc所有用户生效(bash特有)
用户级~/.bash_profile当前用户(登录Shell)
用户级~/.profile当前用户(通用)
用户级~/.bashrc当前用户(交互式Shell)
用户级~/.bash_login当前用户(登录Shell,较少用)

二、加载顺序

2.1 登录Shell(如ssh登录)

登录系统
    ↓
/etc/profile  (系统级,最先加载)
    ↓
按顺序查找第一个存在的:
    1. ~/.bash_profile
    2. ~/.bash_login  
    3. ~/.profile
    ↓
~/.bashrc (通常会被上面的文件调用)

2.2 交互式Shell(新开终端)

打开新终端
    ↓
~/.bashrc  (直接加载)
    ↓
/etc/bashrc (通常被.bashrc调用)

2.3 非交互式Shell(执行脚本)

执行脚本
    ↓
不加载这些文件!(除非脚本中指定)

三、详细解析

文件类型加载时机用途特点
/etc/profile系统级登录Shell系统全局配置所有用户,设置环境变量
/etc/bashrc系统级bash启动bash全局配置所有用户的bash设置
~/.bash_profile用户级登录Shell用户登录配置优先于.profile
~/.profile用户级登录Shell通用用户配置兼容其他Shell
~/.bashrc用户级交互式Shell用户bash配置最常用,别名/函数
~/.bash_login用户级登录Shell登录配置很少用,历史遗留

四、最佳实践

4.1 通常这样用

# 1. 环境变量放 ~/.bash_profile 或 ~/.profile
export JAVA_HOME=/usr/lib/jvm/java-11
export PATH=$JAVA_HOME/bin:$PATH

# 2. 别名和函数放 ~/.bashrc
alias ll='ls -la'
alias grep='grep --color'
function mkcd() { mkdir -p "$1" && cd "$1"; }

# 3. ~/.bash_profile 中调用 ~/.bashrc
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

4.2 典型文件内容

# ~/.bash_profile 示例
# 加载 .bashrc
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# 设置PATH
export PATH=$PATH:$HOME/.local/bin
# ~/.bashrc 示例
# 别名
alias ll='ls -la'
alias rm='rm -i'

# 提示符
export PS1='[\u@\h \W]\$ '

# 函数
function extract() {
    tar -xvf "$1"
}
# /etc/profile 示例
# 系统级PATH
export PATH=$PATH:/usr/local/bin
export EDITOR=/usr/bin/vim

五、总结

文件一句话记法
/etc/profile系统全局,登录加载
/etc/bashrc系统bash配置
~/.bash_profile用户登录配置(优先)
~/.profile用户通用配置(备选)
~/.bashrc用户日常配置(最常用)
~/.bash_login历史遗留,基本不用

日常记住

  • 改环境变量~/.bash_profile~/.profile
  • 改别名/函数~/.bashrc
  • 系统级配置/etc/profile
  • 修改后生效source ~/.bashrc

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注