- Shell 环境变量:这些变量定义了 Java 的安装路径、可执行文件位置等,是操作系统和 Shell 用来查找和运行 Java 程序的。
- Java 系统属性:这些是 Java 虚拟机在运行时内部使用的配置信息,Java 安装路径、版本号、虚拟机参数等。
下面我将详细介绍如何查看这两类变量,并提供一些常见问题的排查方法。

查看 Shell 环境变量
这些变量通常在你的 Shell 配置文件(如 ~/.bashrc, ~/.bash_profile, /etc/profile 等)中设置。
查看 JAVA_HOME
JAVA_HOME 是最重要的环境变量,它指向 JDK 的安装根目录。
# 使用 echo 命令查看 echo $JAVA_HOME
如果输出为空或者路径不正确,说明 JAVA_HOME 可能没有设置或者设置错误。
查看 PATH 变量中的 Java 路径
PATH 变量包含了系统在执行命令时会搜索的目录列表,Java 的可执行文件(java, javac, jar 等)通常被添加到 PATH 中,这样你就可以在任何目录下直接运行它们。

# 使用 echo 命令查看整个 PATH echo $PATH # 或者使用 grep 命令只查看包含 java 的部分 echo $PATH | grep java
你会看到类似 /usr/lib/jvm/java-11-openjdk-amd64/bin 或者 $JAVA_HOME/bin 这样的路径。
查看所有 Java 相关的环境变量
如果你想一次性看到所有与 Java 相关的环境变量,可以使用 env 或 printenv 命令,并结合 grep 进行过滤。
# 查看所有环境变量并过滤出 java 相关的 env | grep -i java # 或者使用 printenv printenv | grep -i java
-i 参数表示不区分大小写。
输出示例可能如下:

JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
PATH=...:/usr/lib/jvm/java-11-openjdk-amd64/bin:...
查看 Java 系统属性
这些信息是通过 Java 命令本身来获取的,反映了当前运行中或已安装的 Java 的详细信息。
查看 Java 安装路径 (java.home)
这个属性告诉你当前使用的 Java 运行时环境的安装路径。
# java.home 属性指向 JRE 的根目录 java -XshowSettings:properties -version 2>&1 | grep "java.home" # 或者更直接的方式 java -XshowSettings:properties -version 2>&1 | grep "java.home"
解释:
java -version: 运行 Java 版本信息。-XshowSettings:properties: 显示 Java 的系统属性。2>&1: 将错误流重定向到标准输出,确保信息能被捕获。grep "java.home": 从输出中筛选出包含java.home的行。
输出示例:
java.home = /usr/lib/jvm/java-11-openjdk-amd64
注意: java.home 通常指向 JRE 目录,而 JAVA_HOME 应该指向 JDK 目录,在 JDK 安装中,JRE 通常位于 jdk/jre 目录下。
查看所有 Java 系统属性
如果你想看到所有可用的系统属性,可以使用以下命令:
java -XshowSettings:properties -version 2>&1 | grep "^[[:space:]]*[^[:space:]]*="
这个命令会列出所有属性的键值对,格式如 key = value。
查看 Java 版本和供应商信息
这是最常用的命令,可以确认 Java 是否已安装以及其版本号。
java -version
输出示例:
openjdk version "11.0.16" 2025-07-19
OpenJDK Runtime Environment (build 11.0.16+8-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.16+8-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
从输出中你可以清晰地看到 版本号、运行时环境 和 虚拟机 信息。
常见问题排查与总结
你可能遇到 java -version 能运行,但 echo $JAVA_HOME 为空的情况,或者 JAVA_HOME 和 java -version 显示的路径不一致。
为什么 java -version 可以运行,但 JAVA_HOME 是空的?
因为 java 命令的路径可能被直接写死在系统的某个 PATH 配置文件中(/etc/profile 或 /etc/environment),而不是通过 $JAVA_HOME/bin 来引用。
解决方案:
检查你的 PATH 变量,看看是否直接包含了 JDK 的 bin 目录。
echo $PATH | grep jdk
如果找到了,说明是直接配置的路径,最佳实践是使用 JAVA_HOME 变量,然后在 PATH 中引用 $JAVA_HOME/bin。
如何找到 Java 的真实安装路径?
如果不确定 Java 安装在哪里,可以使用 which 或 whereis 命令。
# which 命令显示可执行文件的路径 which java # 输出可能是: /usr/bin/java # /usr/bin/java 通常是一个符号链接,指向真实的 Java 安装路径 ls -l /usr/bin/java # 输出可能是: lrwxrwxrwx 1 root root 22 May 10 10:00 /usr/bin/java -> /etc/alternatives/java # 继续跟下去 ls -l /etc/alternatives/java # 输出可能是: lrwxrwxrwx 1 root root 46 May 10 10:00 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java # 最终找到了真实的路径: /usr/lib/jvm/java-11-openjdk-amd64
这个路径就是你应该设置的 JAVA_HOME 的值。
系统中安装了多个 Java 版本,如何查看和管理?
Linux 系统常常使用 update-alternatives 工具来管理多个软件版本(包括 Java)。
# 查看当前系统管理的所有 Java 可执行文件 sudo update-alternatives --config java # 查看所有与 java 相关的链接(包括 javac, javadoc 等) sudo update-alternatives --display java
总结表格
| 目的 | 命令 | 说明 |
|---|---|---|
| 检查 Java 是否安装及版本 | java -version |
最基本、最常用的命令。 |
| 查看 JDK 根目录 | echo $JAVA_HOME |
Shell 变量,用于编译和构建。 |
| 查看 Java 可执行文件搜索路径 | echo $PATH \| grep java |
Shell 变量,决定命令行如何找到 java。 |
| 查看 Java 运行时安装路径 | java -XshowSettings:properties -version 2>\&1 \| grep "java.home" |
JVM 内部属性,通常指向 JRE。 |
查找 java 命令的真实位置 |
which java & ls -l |
用于排查 PATH 和 JAVA_HOME 不一致的问题。 |
| 管理多个 Java 版本 | sudo update-alternatives --config java |
当系统有多个 JDK 时切换默认版本。 |
希望这份详细的指南能帮助你全面地查看和管理 Linux 上的 Java 环境变量!
