环境变量一般分为用户环境变量系统环境变量,用户环境变量存储在用户主目录下,系统环境变量存储在 /etc 目录下,用户环境变量对当前用户有效,而系统环境变量对所有用户有效。

一、环境变量存储文件

用户环境变量通常的存储位置(不一定是这些,也不全是这些):

  • ~/.bashrc
  • ~/.bashrc_profile
  • ~/.profile

系统环境变量通常的存储位置(不一定是这些,也不全是这些):

  • /etc/bashrc
  • /etc/bashrc_profile(/etc/bash.bashrc)
  • /etc/profile
  • /etc/environment

环境变量是按照一定的顺序进行加载的,通常会先加载系统环境变量,后加载用户环境变量,如果有同名的环境变量,则后加载的环境变量会覆盖之前加载的环境变量。

系统环境变量和用户环境变量也通常按一定规则来顺序加载,通常的加载顺序为:

  • /etc/environment
  • /etc/profile
  • /etc/bashrc_profile
  • /etc/bashrc
  • ~/.profile
  • ~/.bashrc_profile
  • ~/.bashrc

二、读取环境变量

1. 使用 export 显示当前系统定义的所有环境变量。

$ export
declare -x CLUTTER_IM_MODULE="xim"
declare -x COLORFGBG="15;0"
declare -x COLORTERM="truecolor"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DESKTOP_SESSION="plasma"
declare -x DISPLAY=":0"
declare -x D_DISABLE_RT_SCREEN_SCALE="1"
declare -x GPG_AGENT_INFO="/run/user/1000/gnupg/S.gpg-agent:0:1"
...

2. 使用 env 显示当前系统定义的所有环境变量

$ env
SHELL=/bin/bash
SESSION_MANAGER=local/hollowman:@/tmp/.ICE-unix/2482,unix/hollowman:/tmp/.ICE-unix/2482
WINDOWID=130023437
QT_ACCESSIBILITY=1
COLORTERM=truecolor
XDG_CONFIG_DIRS=/home/hy/.config/kdedefaults:/etc/xdg:/usr/share/desktop-base/kf5-settings
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1
GTK_IM_MODULE=fcitx
LANGUAGE=zh_CN:zh
...
exportenv 显示的环境变量内容基本上相同,只是显示格式不相同有区别。

3. 使用 echo $环境变量名 输出指定环境变量的值。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export 命令修改的环境变量,仅对当前用户的当前终端有效,且立即生效,窗口关闭后失效。

三、配置环境变量

1. export 除了可以显示系统定义的所有环境变量,还可以通过 export 环境变量名=新的环境变量值 来临时修改环境变量的值

$ export WINEARCH=win32

生效说明:

  • 对当前用户立即生效
  • 当前终端有效,窗口关闭后失效
  • 如果环境变量之前有配置,为了防止覆盖原来配置信息,需在前面加上原来的配置变量名及一个冒号(:),如$PATH=$PATH:/path/to/exec,多个环境变量值是通过冒号进行分隔的。

2. 配置用户环境变量文件,如 ~/.bashrc , ~/.profile 等

生效说明:

  • 用户运行 source ~/环境变量文件 后,对当前用户生效
  • 永久生效
  • 注意后面如果还有加载别的环境变量文件,涉及同名环境变量时,会有覆盖可能。

3. 配置系统环境变量文件,如 /etc/bashrc ,/etc/profile 等

生效说明:

  • 用管理员权限运行 source /etc/环境变量文件 后,对所有用户生效
  • 永久生效
  • 注意后面如果还有加载别的环境变量文件,涉及同名环境变量时,会有覆盖可能。