这是一个非常重要的概念!这些文件加载时机不同、作用范围不同、优先级不同。
一、配置文件分类
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
发表回复