/usr/lib/jvm 和 /usr/bin 是最核心的两个目录,下面我将详细解释不同安装方式下 Java 的位置、如何查找以及如何管理。
核心目录概览
| 目录 | 用途 | 常见安装方式 |
|---|---|---|
/usr/lib/jvm/ |
Java 虚拟机 的主目录,所有 JDK/JRE 的安装包都会被解压或安装到这里。 | apt (Debian/Ubuntu), yum/dnf (CentOS/RHEL), 手动安装 |
/usr/bin/ |
系统命令目录,包含了 java, javac, jar 等可执行文件的符号链接。 |
所有方式 |
/etc/alternatives/ |
替代系统,一个中央管理的符号链接目录,用于解决多个版本冲突。 | update-alternatives (Debian/Ubuntu), alternatives (CentOS/RHEL) |
/opt/ |
可选软件目录,一些手动下载的、非标准的 JDK(如 Oracle JDK, Adoptium Eclipse Temurin)会安装在这里。 | 手动安装 |
$HOME/.sdkman/ |
用户级 SDK 管理工具,SDKMAN 工具管理的 Java 版本会下载并解压到用户主目录下的这个文件夹中。 | SDKMAN (用户级) |
/usr/local/java/ |
本地编译软件目录,有时用户会手动将 JDK 解压到这里,以便全局使用。 | 手动安装 (较少见) |
不同安装方式的具体路径
使用包管理器安装 (推荐)
这是在 Linux 发行版上最常见、最标准的安装方式。
-
在 Debian/Ubuntu (使用
apt)-
安装 JDK:
# 安装 OpenJDK 11 sudo apt install openjdk-11-jdk # 安装 OpenJDK 17 sudo apt install openjdk-17-jdk
-
安装位置:
- JDK 主目录:
/usr/lib/jdk-11/或/usr/lib/jvm/java-11-openjdk-amd64/(具体路径可能因版本和架构而异) - 可执行文件:
/usr/bin/java,/usr/bin/javac等是真实文件或指向/etc/alternatives/的符号链接。
- JDK 主目录:
-
如何查找:
# 使用 apt 列出所有已安装的 Java 包 apt list --installed | grep openjdk # 查找所有 java 可执行文件的位置 which java # 输出: /usr/bin/java # 查看符号链接指向的真实位置 ls -l /usr/bin/java # 输出: /usr/bin/java -> /etc/alternatives/java # 查看最终指向的 JDK ls -l /etc/alternatives/java # 输出: /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java
-
-
在 CentOS/RHEL/Fedora (使用
yum或dnf)-
安装 JDK:
# 安装 OpenJDK 11 sudo yum install java-11-openjdk-devel # 安装 OpenJDK 17 (使用 dnf) sudo dnf install java-17-openjdk-devel
-
安装位置:
- JDK 主目录:
/usr/lib/jvm/java-11-openjdk-11.0.x.x.x86_64/ - 可执行文件:
/usr/bin/java,/usr/bin/javac等。
- JDK 主目录:
-
如何查找:
# 使用 yum 列出已安装的 Java 包 yum list installed | grep java-11-openjdk # 使用 alternatives 命令管理 (核心工具) sudo alternatives --config java sudo alternatives --config javac
-
手动安装 (下载 .tar.gz 或 .zip)
-
下载 JDK: 从 Adoptium (Eclipse Temurin), Oracle 等网站下载
.tar.gz文件。 -
解压并放置:
- 推荐位置:
/opt/目录,用于存放第三方软件。# 假设下载的文件是 jdk-17.0.8_linux-x64_bin.tar.gz sudo tar -xvf jdk-17.0.8_linux-x64_bin.tar.gz -C /opt/
- 解压后,
/opt/目录下会出现类似/opt/jdk-17.0.8的文件夹。
- 推荐位置:
-
配置环境变量:
- 为了让系统找到新的 Java,需要修改
/etc/profile或/etc/environment文件,或者在~/.bashrc,~/.zshrc等用户配置文件中添加。# 编辑用户配置文件 nano ~/.bashrc
在文件末尾添加以下内容 (请根据你的实际路径修改)
export JAVA_HOME=/opt/jdk-17.0.8 export PATH=$JAVA_HOME/bin:$PATH
保存后,让配置生效
source ~/.bashrc
- 为了让系统找到新的 Java,需要修改
-
如何查找:
# 检查 JAVA_HOME echo $JAVA_HOME # 输出: /opt/jdk-17.0.8 # 检查 java 命令路径 which java # 输出: /home/your_user/.sdkman/candidates/java/current/bin/java (SDKMAN 优先) 或 /opt/jdk-17.0.8/bin/java
使用 SDKMAN! (开发者首选)
SDKMAN! 是一个强大的命令行工具,用于在类 Unix 系统上管理多个软件开发工具包(包括 Java)。
-
安装 SDKMAN!:
curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh"
-
安装和管理 Java:
# 列出所有可用的 Java 版本 sdk list java # 安装一个特定的 Java 版本 (17.0.8-tem) sdk install java 17.0.8-tem # 切换当前使用的 Java 版本 sdk use java 17.0.8-tem # 查看当前使用的 Java java -version # 输出: # OpenJDK Runtime Environment Temurin-17.0.8+7 (build 17.0.8+7) # OpenJDK 64-Bit Server VM Temurin-17.0.8+7 (build 17.0.8+7, mixed mode, sharing) # 查看安装路径 echo $JAVA_HOME # 输出: /home/your_user/.sdkman/candidates/java/current
-
安装位置:
- 所有 SDKMAN! 安装的软件都会下载并解压到用户主目录下的
~/.sdkman/candidates/文件夹中,Java 会在~/.sdkman/candidates/java/。 ~/.sdkman/candidates/java/current是一个符号链接,指向当前激活的版本(如0.8-tem)。
- 所有 SDKMAN! 安装的软件都会下载并解压到用户主目录下的
如何检查和确认 Java 安装位置
无论你的 Java 是如何安装的,都可以通过以下命令来确认其位置:
-
java -version- 作用: 显示当前正在使用的 Java 版本和供应商信息。
- 输出示例:
openjdk version "17.0.8" 2025-07-18 OpenJDK Runtime Environment Temurin-17.0.8+7 (build 17.0.8+7) OpenJDK 64-Bit Server VM Temurin-17.0.8+7 (build 17.0.8+7, mixed mode, sharing)
-
echo $JAVA_HOME- 作用: 显示
JAVA_HOME环境变量的值,这是许多 Java 应用(如 Tomcat, Maven)启动时需要的关键变量。 - 输出示例:
/usr/lib/jvm/java-11-openjdk-amd64 # 或 /opt/jdk-17.0.8 # 或 /home/your_user/.sdkman/candidates/java/current - 注意:
JAVA_HOME未设置,此命令将不输出任何内容。
- 作用: 显示
-
which java- 作用: 显示
java命令的绝对路径。 - 输出示例:
/usr/bin/java # 或 /opt/jdk-17.0.8/bin/java
- 作用: 显示
-
ls -l $(which java)- 作用: 一个组合命令,先找到
java命令的位置,然后用ls -l查看它是否是符号链接,以及它指向的真实位置,这对于理解alternatives系统非常有用。 - 输出示例:
lrwxrwxrwx 1 root root 20 Aug 25 10:00 /usr/bin/java -> /etc/alternatives/java
- 作用: 一个组合命令,先找到
| 安装方式 | 主要目录 | 管理工具 | 特点 |
|---|---|---|---|
| 包管理器 | /usr/lib/jvm/, /usr/bin/ |
apt, yum, update-alternatives |
系统级,标准,易于管理,但版本可能不是最新的。 |
| 手动安装 | /opt/, /usr/local/java/ |
手动配置 PATH 和 JAVA_HOME |
灵活,可安装任意版本,但需要自己处理环境变量和版本切换。 |
| SDKMAN! | ~/.sdkman/candidates/ |
sdk 命令 |
用户级,多版本管理极其方便,是开发者的首选工具。 |
对于大多数用户,特别是初学者,使用包管理器安装是最简单、最不容易出错的方式,对于需要频繁切换 Java 版本的开发者,SDKMAN! 是不二之选。
