用户级环境变量仅对当前用户生效,配置在~/.profile等家目录文件中;系统级环境变量对所有用户生效,配置在/etc/environment、/etc/profile等系统路径中,且同名时用户级覆盖系统级。

区分用户级和系统级环境变量,关键看作用范围和配置位置。系统级变量对所有用户生效,用户级变量只影响当前用户;前者改系统文件,后者改个人家目录下的文件。
看作用范围:谁会用到这个变量
系统级环境变量在登录时由系统统一加载,所有用户、所有 Shell 会话(包括图形界面启动的程序)都能读取。比如 PATH、LANG、EDITOR 这类基础设置,若放在系统级文件中,新创建的用户也能直接继承。
用户级环境变量仅限当前用户及其子进程使用。例如你给自己的账号加了一个 MYTOOL_HOME,别人登录后执行 echo $MYTOOL_HOME 就是空的。
看配置文件位置:改哪里决定生效范围
系统级变量通常写在这些路径:
-
/etc/environment:纯键值对格式(如KEY=VALUE),不支持命令或变量展开,图形登录和终端都读取 -
/etc/profile及/etc/profile.d/*.sh:Shell 登录时执行,支持脚本语法,适合需要逻辑判断的设置 -
/etc/bash.bashrc:仅对交互式 bash 终端生效,图形界面程序不读它
用户级变量推荐写在:
-
~/.profile:登录时执行一次,图形界面和终端都认,适合放 PATH、JAVA_HOME 等长期变量 -
~/.bashrc:每次新开终端都读,适合别名、函数等交互增强项,但不要放 PATH 类全局变量,否则重复追加 - 注意:
~/.bash_profile若存在,会替代~/.profile被读取(仅限登录 shell),Ubuntu 默认不创建它
验证方式:快速确认变量属于哪一级
用 echo $VARIABLE_NAME 查值只是第一步,还要结合以下方法判断来源:
- 切换到另一个普通用户,运行
echo $VARIABLE_NAME—— 如果有值,大概率是系统级 - 用
grep -r "VARIABLE_NAME" /etc/搜索系统配置目录 - 用
grep -r "VARIABLE_NAME" ~/.profile ~/.bashrc 2>/dev/null检查用户文件 - 在图形界面(如 GNOME)中打开终端或启动应用,观察变量是否可用——能用说明配置在
/etc/environment或~/.profile这类被桌面会话加载的位置
修改后怎么生效
改完配置文件不会自动更新当前终端:
- 系统级文件(如
/etc/profile):运行source /etc/profile,或新开终端,或重新登录 - 用户级文件(如
~/.profile):运行source ~/.profile;若刚改的是~/.bashrc,则用source ~/.bashrc - 特别注意:
/etc/environment不支持source,必须重新登录或重启显示管理器才能生效


















