1. 简介

操作系统使用环境变量(Environment Variables)来管理服务和应用程序。这些变量是字符串类型,用于存储数据。

在本教程中,我们将学习环境变量的两大主要分类:系统环境变量(System Variables)用户环境变量(User Variables),并了解它们之间的区别以及在实际开发和系统管理中的作用。

2. 变量与常量

变量和常量是编程语言中最基础的两个概念。它们用于存储数据,并影响程序的执行结果,类似于数学方程中的自变量。

  • 变量(Variable):值在程序运行期间可以被修改。
  • 常量(Constant):值在定义后不可更改。

变量由一个标识符(名称)和一个对应的值组成。某些语言还要求变量必须指定数据类型。

Variables and Constants

3. 环境变量简介

环境变量是一种名称-值对(Name-Value Pair, NVP),它的值可以在程序外部由操作系统或微服务设置。这些变量可以在运行时被多个进程访问。

操作系统使用环境变量来存储影响进程行为的配置信息。这些变量会影响应用程序的运行方式,例如:

  • 文件安装路径
  • 临时文件存储位置
  • 用户配置目录
  • 当前用户信息

环境变量分为两类:

  • 系统环境变量:对所有用户生效
  • 用户环境变量:仅对当前登录用户生效

Environment Variables

4. 系统环境变量

系统环境变量是由操作系统全局定义的变量,通常用于配置系统级行为。这些变量对所有用户和进程都可见。

例如:

  • PATH:指定系统在哪些目录中查找可执行文件
  • TEMP:临时文件的存储路径
  • OS:操作系统类型

优点:适用于所有用户,配置一次,全局生效
缺点:修改需谨慎,可能影响其他用户或系统功能

我们可以通过命令行工具查看或设置系统变量。例如在 Linux 中:

echo $PATH

在 Windows 中:

echo %PATH%

⚠️ 踩坑提醒:修改系统变量前务必备份,避免破坏系统路径导致命令无法执行。

5. 用户环境变量

用户环境变量是针对当前登录用户的个性化设置。每个用户都可以定义自己的环境变量,且互不影响。

例如:

  • HOME:用户的主目录路径
  • USERPROFILE:Windows 用户配置目录
  • 自定义变量:如 JAVA_HOMEPROJECT_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),优先设置为系统变量
  • 个性化或调试用途的变量,应设置为用户变量
  • 修改系统变量前务必备份,避免影响系统运行

✅ 推荐做法:开发环境优先使用用户变量,生产环境使用系统变量统一管理。



原始标题:What Is the Difference Between User Variables and System Variables?