1. 简介
操作系统使用环境变量(Environment Variables)来管理服务和应用程序。这些变量是字符串类型,用于存储数据。
在本教程中,我们将学习环境变量的两大主要分类:系统环境变量(System Variables) 和 用户环境变量(User Variables),并了解它们之间的区别以及在实际开发和系统管理中的作用。
2. 变量与常量
变量和常量是编程语言中最基础的两个概念。它们用于存储数据,并影响程序的执行结果,类似于数学方程中的自变量。
- 变量(Variable):值在程序运行期间可以被修改。
- 常量(Constant):值在定义后不可更改。
变量由一个标识符(名称)和一个对应的值组成。某些语言还要求变量必须指定数据类型。
3. 环境变量简介
环境变量是一种名称-值对(Name-Value Pair, NVP),它的值可以在程序外部由操作系统或微服务设置。这些变量可以在运行时被多个进程访问。
操作系统使用环境变量来存储影响进程行为的配置信息。这些变量会影响应用程序的运行方式,例如:
- 文件安装路径
- 临时文件存储位置
- 用户配置目录
- 当前用户信息
环境变量分为两类:
- 系统环境变量:对所有用户生效
- 用户环境变量:仅对当前登录用户生效
4. 系统环境变量
系统环境变量是由操作系统全局定义的变量,通常用于配置系统级行为。这些变量对所有用户和进程都可见。
例如:
PATH
:指定系统在哪些目录中查找可执行文件TEMP
:临时文件的存储路径OS
:操作系统类型
✅ 优点:适用于所有用户,配置一次,全局生效
❌ 缺点:修改需谨慎,可能影响其他用户或系统功能
我们可以通过命令行工具查看或设置系统变量。例如在 Linux 中:
echo $PATH
在 Windows 中:
echo %PATH%
⚠️ 踩坑提醒:修改系统变量前务必备份,避免破坏系统路径导致命令无法执行。
5. 用户环境变量
用户环境变量是针对当前登录用户的个性化设置。每个用户都可以定义自己的环境变量,且互不影响。
例如:
HOME
:用户的主目录路径USERPROFILE
:Windows 用户配置目录- 自定义变量:如
JAVA_HOME
、PROJECT_HOME
等
用户变量通常用于:
- 存储用户专属路径
- 设置个性化配置
- 临时调试变量
在 Linux 中设置用户变量示例:
export MY_VAR="test"
在 Windows 中设置用户变量:
setx MY_VAR "test"
✅ 优点:灵活,不影响其他用户
❌ 缺点:仅当前用户生效,不适用于全局配置
6. 优先级规则
当用户变量与系统变量同名时,用户变量具有更高的优先级。也就是说,当前用户在使用该变量时,会优先读取用户变量的值。
举个例子:
变量名 | 系统变量值 | 用户变量值 | 当前用户读取值 |
---|---|---|---|
JAVA_HOME |
/usr/lib/jvm/java-11 |
/home/user/jdk-17 |
/home/user/jdk-17 |
⚠️ 特例:PATH
变量不会被用户变量覆盖,而是将用户 PATH
添加到系统 PATH
的前面或后面。
因此,用户变量中的 PATH
不会替代系统变量,而是作为补充。
7. 总结
环境变量是操作系统中非常重要的配置机制,分为两类:
类型 | 作用范围 | 是否可修改 | 优先级 |
---|---|---|---|
系统变量 | 所有用户 | 需管理员权限 | 较低 |
用户变量 | 当前用户 | 普通用户即可修改 | 较高(除 PATH 外) |
✅ 使用建议:
- 需要全局生效的配置(如
JAVA_HOME
),优先设置为系统变量 - 个性化或调试用途的变量,应设置为用户变量
- 修改系统变量前务必备份,避免影响系统运行
✅ 推荐做法:开发环境优先使用用户变量,生产环境使用系统变量统一管理。