先说结论:
系统环境变量文件: /etc/profile
用户环境变量文件: ~/.profile
配置bash: ~/.bashrc
配置zsh: ~/.zshrc
1 profile
(1) 概念
profile 是专门用来设置环境变量的文件
查看环境变量: env
(2) 加载时机
在用户第一次登录时被加载,
ssh login, sudo su是典型的 interactive login shell, 会从上往下依次加载
/etc/profile # 系统环境变量 ~/.profile # 用户环境变量
2 bashrc
(1) 概念
bashrc 是专门用来给 bash 做初始化的, 比如bash 的代码补全, bash 的别名, bash 的颜色.
因为用户可以有多个 shell 比如 bash, sh, zsh 之类的, 所以还存在 shrc, zshrc 这样的文件
(2) 加载时机
在命令提示符状态下输入 bash 或者 ubuntu 默认设置下打开终端
这样开启的是 interactive no-login shell, 会从上往下依次加载
/etc/bash.bashrc # 系统bash配置 ~/.bashrc # 用户自定义的bash配置
3 环境变量
(1) export (对当前shell生效, shell关闭后失效)
export PATH=$PATH:/etc/python3.6/bin
(2) ~/.profile (对单用户生效, 永久)
vim ~/.profile
export PATH=$PATH:/etc/python3.6/bin
source ~/.profile # 重新加载文件, 使之立即生效
注: 编辑~/.bashrc也是相同的效果, 但这是一种误用, 应该用专门的文件profile来处理环境变量
(3) /etc/profile (对所有用户生效, 永久)
vim etc/profile
export PATH=$PATH:/etc/python3.6/bin
source etc/profile # 重新加载文件, 使之立即生效
(4) /etc/environment (与用户无关, 永久)
vim etc/environment
export PATH=$PATH:/etc/python3.6/bin
source etc/environment # 重新加载文件, 使之立即生效
4 环境变量加载顺序
(1) 系统启动时的加载顺序
从上往下依次加载
/etc/enviroment /etc/profile
(2) 系统登录时的加载顺序
从上往下依次加载
/etc/profile (~/.bash_profile | ~/.bash_login | ~/.profile) # 从左往右读, 只读取三个文件中的一个 ~/.bashrc /etc/bashrc ~/.bash_logout
这里又出现了几个新文件, 下面依次说明:
- ~/.bash_profile: 类似于~/.profile, 但它设置环境变量后还会执行~/.bashrc文件
- ~/.bash_login: 登录bash shell时, 执行该文件.
- /etc/bashrc: mac系统才有这个, 当bash shell被打开时,该文件被读取。
- ~/.bash_logout: 退出bash shell时, 执行该文件.
注意:
~/.bash_profile, ~/.bash_login, ~/.profile 这三个文件中是优先加载~/.bash_profile, 而且只加载这三个中的一个 这意味着, 如果你系统中有~/.bash_profile, 那你在~/.profile中配置用户环境变量是无效的, 因为它加载不到~/.profile, 所以最好删掉~/.bash_profile