用户变量仅对当前用户生效,系统变量对所有用户生效;区别在于配置位置(用户家目录vs全局路径)、作用范围(单用户vs全部用户)和修改权限(普通用户vs需root);同名变量用户配置优先覆盖系统配置。
用户变量只对当前登录用户生效,系统变量对所有用户都生效。区分的关键在于配置位置、作用范围和修改权限。
配置位置不同
用户变量写在当前用户的家目录下,常见文件有:
- ~/.bashrc:每次打开新终端时加载,适合日常命令别名或临时PATH追加
- ~/.profile(Ubuntu等)或 ~/.bash_profile(CentOS等):用户登录时执行一次,适合JAVA_HOME这类长期生效的变量
系统变量写在全局路径下,需root权限编辑:
- /etc/environment:纯键值对格式,不支持shell语法(如$PATH),重启或重新登录后生效
- /etc/profile:登录shell时执行,影响所有用户,但不推荐直接改它
- /etc/profile.d/*.sh:Linux官方推荐方式,新建.sh脚本放这里,自动被profile调用
生效范围与优先级
当同名变量同时存在于用户和系统配置中,用户变量会覆盖系统变量。例如:
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
- 你在/etc/profile.d/myenv.sh里设了
export PATH="/opt/bin:$PATH" - 又在~/.bashrc里写了
export PATH="/home/user/local/bin:$PATH" - 最终生效的PATH以~/.bashrc为准,且/home/user/local/bin排在最前
验证方式直观可靠
不用猜,直接查:
- 看当前用户能读到什么:
env | grep 变量名或echo $变量名 - 切换用户测试:
su - otheruser -c 'echo $变量名',若为空说明不是系统级 - 检查配置文件来源:
grep -r "变量名" /etc/profile.d/ ~/.bashrc ~/.profile 2>/dev/null
操作建议
普通用户装软件、配开发环境,一律用~/.bashrc或~/.profile;系统管理员部署服务或统一策略,才动/etc/profile.d/。改完记得source ~/.bashrc或重新登录,否则不生效。

















