Linux如何查看JDK版本?,查JDK版本命令是什么

想看 Linux 服务器装了哪个 JDK 版本,最直接的方式是执行 java -version 和 javac -version,再用 echo $JAVA_HOME、which java 交叉确认安装路径,四个命令各看一个维度,配合起来才能回答完整。

用 linux 查看 jdk 版本命令之前,先搞懂你看到的是什么

很多人在服务器上敲完 java -version,看到输出里有 “1.8.0_402” 或 “17.0.10”,就以为这是 JDK 版本,这个理解在多数场景下成立,但严格来说并不完全准确。

验证 JDK 是否安装成功
加载中
验证 JDK 是否安装成功
墨
墨雨塵
2223--
原视频地址

java -version 显示的是 JRE(Java Runtime Environment)的版本,JDK 自带 JRE,所以你平时用 java 跑程序没问题,但 JDK 还附带编译器 javac、打包工具 jar、文档生成器 javadoc,如果服务器上只装了 JRE,没装完整 JDK,java -version 一样有输出,但 javac -version 会提示找不到命令。

行业共识认为,判断一台服务器是否具备完整的 JDK 环境,至少要看两个输出:

  • java -version 确认运行时版本
  • javac -version 确认编译工具存在

java -version 输出里的关键信息怎么读

执行 java -version 后,通常会有三行输出,以 OpenJDK 17 为例:

openjdk version "17.0.10" 2026-01-16
OpenJDK Runtime Environment (build 17.0.10+7)
OpenJDK 64-Bit Server VM (build 17.0.10+7, mixed mode, sharing)

三行各自说明一件事:

  • 第一行:JDK 的版本号。0.10 里的 17 是主版本,10 是安全更新级别
  • 第二行:运行时环境的构建信息,括号里 0.10+7 代表具体的 build 编号
  • 第三行:虚拟机实现和运行模式。64-Bit 表示 64 位,Server VM 表示服务端虚拟机,mixed mode 表示解释执行和 JIT 编译混合运行

如果你跑的是 JDK 8,第一行会写成 8.0_402 这种格式,8 Java 8,这是 Java 8 时代特有的命名方式,看到 8 开头不代表装了 18 版,而是 8 版。

javac -version 验证编译器

javac -version 的输出比 java -version 简单得多:

javac 17.0.10

如果服务器只装了 JRE,这一步会直接提示:

-bash: javac: command not found

所以当别人问“linux 查看 jdk 版本用啥命令”,正确的回复是:先跑 java -version 和 javac -version,两个都跑一遍才算数。

linux 怎么查看 jdk 安装路径,有时需要多绕一步

版本号确认了,接着就要回答一个问题:JDK 到底装在哪个目录,这个信息很重要,配置 JAVA_HOME、部署 Tomcat、排查启动日志时都离不开它。

用 which 和 readlink 逐层拆解

最简单的命令是 which java,它会输出 java 可执行文件所在的路径,

/usr/bin/java

但 /usr/bin/java 通常不是你真正要找的路径,Linux 发行版的包管理器会把可执行文件放到 /usr/bin,实际 JDK 文件在 /usr/lib/jvm 或 /opt 下,/usr/bin/java 只是一个软链接。

这时候用 ls -l 看一下链接指向:

ls -l /usr/bin/java

输出可能是:

/usr/bin/java -> /etc/alternatives/java

这又是一个软链接,继续追:

ls -l /etc/alternatives/java

最终会指向真实的 JDK 主目录,

/etc/alternatives/java -> /usr/lib/jvm/java-17-openjdk-amd64/bin/java

为了省事,直接用 readlink -f 一步到位:

readlink -f $(which java)

它会自动解析所有中间层级的软链接,直接输出真实路径。

从环境变量找到 JAVA_HOME

如果服务器已经配置了 JAVA_HOME,查看的时候不用再去追软链接了:

echo $JAVA_HOME

输出像这样就是标准配置:

/usr/lib/jvm/java-17-openjdk-amd64

JAVA_HOME 指向的是 JDK 的根目录,而 which java 查到的是 bin/java 文件,日常运维写脚本时,引用 ${JAVA_HOME}/bin/java 比直接写死路径更稳妥,以后升级 JDK 版本只要改环境变量一处。

配置文件里查 JDK 路径

有些场景下命令行查不到结果,java -version 能跑,但 echo $JAVA_HOME 是空的,这说明 java 命令是通过 PATH 找到了可执行文件,但 JAVA_HOME 没有配置到位。

去这几个文件里搜一下 JAVA_HOME 或 jdk 关键字:

  • /etc/profile
  • /etc/profile.d/ 目录下的脚本
  • ~/.bashrc
  • ~/.bash_profile

多数情况下,安装完 JDK 后配置会写在这些文件里,找到后就能确认路径。

用 linux 当前使用的 jdk 版本是什么,环境变量说了算

服务器上装多个 JDK 版本是常见的操作,一台机器可能装了 JDK 8 兼容老项目,又装了 JDK 17 跑新服务,问题是:命令行里敲 java,用的到底是哪一个?

这个问题的答案不在 JDK 安装位置上,而在 PATH 变量的搜索顺序里。

PATH 优先级高于 JAVA_HOME

Linux 执行 java 命令时,会按照 PATH 环境变量里记录的目录顺序,从头到尾逐个查找名为 java 的可执行文件,找到第一个就直接运行。

JAVA_HOME 只是个普通的变量,它不会主动影响系统选择哪个 java,系统不认识 JAVA_HOME,只知道 PATH,真正决定当前生效版本的是 PATH 中 java 所在的目录排在哪个位置。

看一下当前 PATH:

echo $PATH

假设输出为:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/lib/jvm/java-8-openjdk/bin

而 /usr/bin/java 指向 JDK 17,/usr/lib/jvm/java-8-openjdk/bin/java 是 JDK 8,因为 /usr/bin 排在 java-8 目录前面,所以直接敲 java -version 看到的是 17。

想确认当前究竟哪个目录的 java 先被命中,用 which java 看返回值,它返回的就是系统实际选中的那个文件路径。

临时切换 JDK 版本的命令

如果只是想在当前会话里用另一个 JDK,不需要修改系统配置,直接改 PATH:

export PATH=/usr/lib/jvm/java-8-openjdk/bin:$PATH

再执行 java -version,输出的就会变成 JDK 8,这个改动只对当前终端生效,退出重进终端就恢复原样。

update-alternatives 管理默认 JDK

如果希望永久切换系统的默认 JDK,多数 Linux 发行版提供了 update-alternatives 工具:

update-alternatives --config java

执行后会出现一个列表,列出系统里已注册的所有 JDK:

There are 3 programs which provide 'java'.
  Selection    Command
-----------------------------------------------
  1           /usr/lib/jvm/java-17-openjdk-amd64/bin/java
 + 2           /usr/lib/jvm/java-8-openjdk/bin/java
   3           /opt/jdk-21/bin/java
Enter to keep the current selection[+], or type selection number:

输入对应的数字回车,就完成了默认 JDK 的切换,同样地,javac 也需要单独切换一次,因为 javac 是独立的可执行文件:

update-alternatives --config javac

切换完后,重新执行 java -version 和 javac -version,确认两边版本一致。

怎么判断装的是 OpenJDK 还是 Oracle JDK

很多开发者拿到服务器权限后,看版本号不顺眼,就认定是某个厂商的 JDK,结果部署时发现行为不对,其实从输出信息就能直接辨别。

看 java -version 的第一行关键字

  • 输出 openjdk version 的是 OpenJDK
  • 输出 java version 或 Java(TM) SE Runtime Environment 的是 Oracle JDK

Oracle JDK 8 的输出:偏低

java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

OpenJDK 8 的输出:

openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-02)
OpenJDK 64-Bit Server VM (build 25.402-b02, mixed mode)

看到 Java(TM) 和 HotSpot(TM) Oracle 的商业版,看到 OpenJDK 字样就是开源版。

按发行版差异看安装来源

不同 Linux 发行版自带的 JDK 也有差异:

  • CentOS / RHEL 上通过 yum install java-17-openjdk 装的是 OpenJDK
  • Ubuntu / Debian 上通过 apt install openjdk-17-jdk 装的是 OpenJDK
  • 从 Oracle 官网下载 .tar.gz 解压包安装的是 Oracle JDK
  • 部分云厂商镜像里直接装了 OpenJDK

统计显示,云服务器厂商的公共镜像里预装的 JDK 绝大多数是 OpenJDK,因为它的开源许可允许直接随系统分发,如果你的服务器是云主机,登录后看到 OpenJDK 是正常现象,不影响生产使用。

运行 Alibaba Dragonwell 等衍生 JDK 的识别

简米云镜像里也预装了基于 OpenJDK 的 Alibaba Dragonwell,执行 java -version 输出会带 Alibaba Dragonwell 字样,这类 JDK 是 OpenJDK 的下游构建版,来自阿里内部对大规模 Java 应用经验的回馈,对国内场景做了特定优化,同样可以正常用于生产。

安装了新 JDK 但版本没变,常见原因排查

安装新版 JDK 后,执行 java -version 发现版本还是旧的,这种情况极其常见,不用急着重装,按下面几步排查。

检查 PATH 的排序

先看 which java 指向的文件路径,如果还是在旧的 JDK 目录,说明 PATH 里旧路径排在新路径前面,Linux 的 PATH 是按顺序搜索的,谁排在前面谁说了算。

解决办法:把新 JDK 的 bin 目录添加到 PATH 开头,或者删掉旧 JDK 在 /usr/bin 里的软链接。

检查用户级别配置覆盖系统配置

系统级配置写在 /etc/profile 里,但当前用户自己的 ~/.bashrc 或 ~/.bash_profile 如果有额外的 PATH 设置,~/.bashrc 通常后执行,会覆盖系统级配置。

执行以下命令确认加载顺序:

env | grep PATH

对比输出和 /etc/profile 里的设置是否一致,如果不一致,说明用户级配置生效了,需要改 ~/.bashrc。

检查环境中残留的旧 JDK 包

CentOS 系统上使用 yum 卸载 JDK,经常出现卸载不干净的情况,用包管理器查一下已安装的 JDK 包:

rpm -qa | grep jdk

如果有残留包,用 yum remove 移除,Ubuntu 系统查看:

dpkg -l | grep jdk

检查 shell 缓存

bash 会缓存命令的路径,重新安装或修改软链接后,当前终端的缓存没有刷新,执行 hash -r 清空缓存,或者直接关闭终端重开一个。

常见问题:linux 查看 jdk 版本相关疑问

为什么 java -version 和 javac -version 显示不同版本?

同一台服务器上安装了多个 JDK,PATH 目录里 java 和 javac 的来源不同。java 命中了 /usr/bin/java(指向 JDK 17),而 javac 命中了 /usr/lib/jvm/java-8-openjdk/bin/javac(JDK 8),排查方法是在两个命令前都加上 which,对比两个命令各自的实际路径,修正方向是统一 JAVA_HOME,确保 PATH 里的 java 和 javac 都来自同一 JDK 目录。

查看 JDK 位数只能用 java -version 吗?

java -version 第三行有 64-Bit 字样表示是 64 位 JDK,32 位的 JDK 不会在输出里写到 32-Bit,只写 Java HotSpot(TM) Server VM,也可以用 file 命令查看 java 可执行文件的架构信息:

file /usr/bin/java

输出的 ELF 64-bit 表示 64 位,日常使用中不建议在 64 位系统上混装 32 位 JDK,排查问题时先用 java -version 确认即可。

新装的 JDK 路径没有被系统识别怎么办?

确认安装目录完整后,把以下配置写入 /etc/profile 末尾:

export JAVA_HOME=/opt/jdk-17
export PATH=$JAVA_HOME/bin:$PATH

执行 source /etc/profile 让配置立即生效,再跑 java -version 验证,务必注意 PATH 赋值时把 $JAVA_HOME/bin 放在最前面,否则系统优先搜索 /usr/bin 后可能调用旧版本。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/linux%e5%a6%82%e4%bd%95%e6%9f%a5%e7%9c%8bjdk%e7%89%88%e6%9c%ac%ef%bc%9f%ef%bc%8c%e6%9f%a5jdk%e7%89%88%e6%9c%ac%e5%91%bd%e4%bb%a4%e6%98%af%e4%bb%80%e4%b9%88/

赞 (0)
上一篇 2026年11月5日 01:33
下一篇 2026年11月5日 01:35

相关推荐

  • Excel如何读取导入数据?Excel导入csv乱码怎么解决

    Excel读取与导入的核心在于根据数据源格式(如CSV、XLSX)选择正确的解析引擎,并通过明确的字段映射和异常处理机制,确保数据从文件到数据库或业务系统的准确、高效流转,避免常见的人为错误和格式冲突,在数字化转型的浪潮中,企业每天面临海量的表格数据,无论是销售报表、库存清单还是客户信息,Excel依然是最普及……

    2026年7月12日
    18700
  • CloudCone VPS低至14.99美元/年值得买吗,洛杉矶KVM VPS优惠

    CloudCone 2025年Q4推出的洛杉矶KVM VPS促销活动中,最低配置仅需$14.99/年,并标配2TB流量与1Gbps带宽,是追求极致性价比用户的优选方案,在服务器租赁市场,价格波动与配置调整往往让选择变得复杂,对于预算有限但需要稳定海外节点的用户而言,CloudCone 2025年Q4的这次促销活……

    2026年7月5日
    10400
  • AIoT开源有哪些好项目?AIoT开源平台推荐

    AIoT的开源并非简单的代码共享,而是通过降低硬件适配门槛与算法部署成本,加速智能设备从“连接”向“认知”演进的核心驱动力,开源生态如何重塑AIoT开发范式过去,物联网设备往往处于孤岛状态,而人工智能算法又深藏在云端服务器中,当这两者结合时,开发者面临着巨大的技术鸿沟,开源项目的出现,就像是为这道鸿沟搭建了一座……

    2026年6月10日
    3900
  • AI应用部署促销活动有哪些优惠,怎么参加最划算?

    企业数字化转型已进入深水区,人工智能不再是锦上添花的实验性工具,而是决定业务生死存亡的核心生产力,高昂的算力成本、复杂的运维环境以及技术人才的短缺,构成了阻碍AI落地的“三座大山”,在此背景下,抓住AI应用部署促销活动的窗口期,不仅是降低财务支出的战术动作,更是加速业务落地、抢占市场先机的战略选择,通过合理利用……

    2026年2月19日
    17100
  • 为什么创建游戏同步id连接服务器失败,怎么办

    创建游戏同步id连接服务器失败,通常是因为网络不稳定、官方服务器临时维护、设备时间不同步或游戏缓存异常,按照以下顺序逐项排查,绝大多数情况都能解决,为什么创建游戏同步id连接服务器失败?先弄清这几个常见诱因遇到提示的那一刻,很多人第一反应是”游戏又出bug了”,创建游戏同步id连接服务器失败,真正原因往往出在客……

    2026年10月12日
    100
  • 我的世界hz2t服务器到底怎么用,进不去怎么办

    我的世界hz2t服务器怎么用,核心就三步:拿到服主公布的完整地址和端口,把客户端版本切到服务器要求的版本,再按Java版或基岩版入口添加服务器并完成登录或白名单验证,我的世界hz2t服务器怎么进?Java版与基岩版入口对比先别急着输地址,hz2t服务器可能开的是Java版,也可能开的是基岩版,两种版本的入口、端……

    2026年9月27日
    100
  • AIoT是什么意思?AIoT技术应用领域有哪些

    AIoT是人工智能(Artificial Intelligence)与物联网(Internet of Things)的缩写,它代表了将智能算法嵌入物理设备,实现从单纯的数据采集到自主决策的跨越,过去我们谈论物联网,更多是在说“连接”,比如家里的智能灯泡能用手机开关,这属于物联网范畴,因为它解决了远程控制和基础数……

    2026年6月10日
    7900
  • ASP.NET期末如何高效复习?| 考试重点速成攻略

    ASP.NET 核心技术精要与实践指南ASP.NET 作为微软成熟的Web应用开发框架,是计算机相关专业期末考核的重点,其核心在于高效构建安全、可扩展、高性能的企业级Web应用,深入理解其架构思想与关键组件是成功通过考核并应用于实际项目的基石,核心架构模式:MVC 与 Web API 的深度解析MVC (Mod……

    2026年2月11日
    14030
  • DNF游戏一直连接服务器失败怎么办,怎么回事?

    DNF连接服务器失败通常由本地网络、服务器状态或客户端文件导致,按照以下步骤依次排查即可快速恢复,DNF连接服务器失败怎么解决?首先检查网络环境网络问题是导致连接失败最常见的因素,多数情况下,调整本地网络设置就能直接解决问题,不需要重装游戏或联系客服,网络连接测试打开电脑的命令提示符,输入 ping dnf.q……

    2026年8月3日
    2600
  • 徽商银行APP连不上服务器?,徽商银行手机银行连不上网怎么办

    徽商银行app连不上服务器,绝大多数情况下不是你的手机坏了,而是银行端系统正在维护、网络链路出现波动,或APP版本过旧导致的,按文中的排查顺序操作,通常几分钟内就能定位问题,先分清是哪一端的锅遇见“连不上服务器”,先别急着卸载重装,服务器连接失败这个提示,背后无非三种可能:你的手机网络到银行服务器之间的链路不通……

    程序编程 2026年11月5日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注