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/article/782694.html

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

相关推荐

  • 我的世界测试版如何进ec服务器,ec服务器是什么?

    我的世界测试版玩ec服务器,核心路径是通过Eaglercraft网页端或Java版兼容客户端进入,但要注意测试版客户端本身无法直接连接ec服务器,必须匹配对应版本,如果你手上是基岩版测试版(Preview版),还需要额外走一层转换协议,下文会把三种主流玩法的具体操作全部拆开讲清楚,先搞清楚ec服务器的真实版本底……

    2026年10月9日
    200
  • AIoT有哪些岗位?AIoT行业热门职位推荐

    AIoT(智能物联网)行业的核心岗位布局已从单一的硬件或软件开发,演变为“端-边-云-用”全链路的协同生态,当前行业最紧缺的并非单一技能人才,而是具备跨学科整合能力的复合型专家,核心岗位主要集中在AIoT解决方案架构师、嵌入式AI工程师、物联网平台开发工程师以及智能硬件产品经理四大领域,这些岗位共同构成了智能物……

    2026年3月18日
    14400
  • 智慧社区停车如何实现新生态?社区智慧停车管理系统解决方案

    构建智慧社区停车新生态的核心在于打通“车-场-云”数据孤岛,通过物联网感知与AI算法实现车位动态分配,从而将通行效率提升30%以上并降低管理成本,随着城市化进程进入深水区,传统社区停车难、乱收费、管理混乱已成为制约居民生活品质的痛点,2026年的智慧社区不再仅仅是安装几个摄像头或开发一个APP,而是构建一个具备……

    2026年5月26日
    5500
  • SVN服务器怎么创建账号密码?,详细操作步骤有哪些

    在SVN服务器上创建账号密码,核心取决于你用的是svnserve还是Apache HTTP方式;svnserve直接编辑passwd文件,Apache用htpasswd命令生成密码文件,两者都不需要额外付费,怎么在svn服务器上创建账号密码?先分清两种主流方式SVN服务器不是只有一种跑法,有人用svnserve……

    2026年10月10日
    100
  • AIoT行业深度报告是什么?AIoT行业发展前景如何

    AIoT(人工智能物联网)行业正处于从“连接爆发”向“智能涌现”跨越的关键转折点,核心结论显示,未来三年内,AIoT将不再局限于简单的设备联网,而是全面进入“边缘智能”与“场景深度融合”的新阶段,行业增长逻辑已由硬件销售驱动,彻底转向数据价值挖掘与全栈服务交付驱动,对于企业而言,能否构建“端-边-云-网-智”一……

    2026年3月13日
    12300
  • 如何在ASP.NET小孔子CMS中添加修改数据 | 详细教程步骤解析

    在ASP.NET小孔子CMS中,高效、准确且安全地进行数据的添加(Create)与修改(Update)操作,是内容管理的核心任务,也是网站活力的源泉,掌握其内在机制和最佳实践,能显著提升网站运营效率和内容质量,以下是深入解析与专业指导: 数据添加(Create):构建内容基石数据添加是将新记录插入数据库的过程……

    2026年2月11日
    13500
  • RareCloudVPS测评靠谱吗,RareCloudVPS测评

    RareCloudVPS凭借德国节点10.9欧元/年的极致性价比与稳定的欧洲网络架构,成为2026年低成本建站与轻量级开发的首选方案,但在美国节点的全球延迟优化上略逊于顶级国际大厂,在2026年云计算市场内卷加剧的背景下,RareCloudVPS以其独特的定价策略和地域分布优势,重新定义了入门级虚拟专用服务器的……

    2026年5月18日
    4400
  • AIoT登录怎么操作?AIoT设备登录入口在哪里

    AIoT登录技术的核心价值在于实现“无感通行”与“极致安全”的完美统一,这已成为智能家居与工业物联网领域的关键基础设施,通过多模态生物识别与边缘计算技术的深度融合,现代登录系统已从单一的身份验证进化为智能服务的入口,极大地提升了用户体验与数据安全等级,AIoT登录的核心逻辑与技术架构传统的物联网登录方式往往依赖……

    2026年3月14日
    12100
  • 工控机和服务器都有IP地址怎么区分,有什么区别?

    工控机和服务器虽然都能分配IP地址,但它们的使命截然不同:工控机是为工业现场控制而生的耐造选手,服务器是为数据中心提供算力和服务的专业选手,区分它们的关键在于硬件架构、操作系统、稳定性和使用环境,工控机和服务器,为什么都有IP地址两者都需要联网通信,所以IP地址是标配,但IP地址背后的角色完全不同,工控机用IP……

    2026年8月20日
    900
  • 为什么CF登录总是服务器连接失败,怎么解决

    cf登录服务器连接失败,九成情况是本地网络与游戏客户端与服务器之间握手不畅,剩下少数才是官方服务器波动,先别急着重装游戏,按下面顺序排查,多数情况下几分钟就能恢复,为什么cf连接服务器超时——先分清是网络还是服务器问题很多玩家遇到“cf登陆服务器连接失败”第一反应是开加速器或者重启电脑,其实这个提示背后有完全不……

    2026年8月23日
    900

发表回复

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