JDK 18 Linux 64位压缩包安装教程:环境变量配置与多版本切换 📅 发布时间:2026/9/13 15:26:43 👁 浏览次数: 简介这是一份Java 18开发套件的Linux 64位免安装压缩包面向使用Ubuntu、CentOS等发行版的开发者与运维人员解决在无图形界面或需快速切换JDK版本时手动安装繁琐的问题。解压即可得到完整JDK目录按包内附带的配置说明设置JAVA_HOME、path、classpath后即可直接运行java、javac、jshell等命令。资源共387个文件压缩后约174.31MB包含71个jmod模块文件、38个so动态链接库、核心可执行命令及其man手册另附license、copyright等合规文档结构清晰便于排查缺失组件或进行裁剪。目前已有876人学习下载。该压缩包适合用于服务器环境初始化、容器镜像构建、内网离线部署也可作为学习Java 18模块化特性时的干净基础环境目录布局与官方发布版一致使用体验接近原生安装。1. JDK 18 linux 64位 压缩包解压即装重点是环境变量在 Linux 服务器上装一个 64 位的 JDK 18最省事的方式往往不是 apt/yum而是直接下载官方 tar.gz 压缩包解压后把 bin 目录写进 PATH。这个“解压即安装”的流程不依赖发行版仓库不受包管理器版本策略影响特别适合需要锁定 JDK 小版本的 CI 构建机、容器镜像或者只想临时验证某个特性的系统。JDK 18 本身只发布 64 位架构的包所以“64位”不是选择题真正要小心的是下载到 aarch64 包、解压目录少了顶层名、环境变量没写进 profile 这类问题。这篇按下载、解压、配置、验证的顺序把 JDK 18 linux 64 位压缩包的安装流程走完整并解释每个步骤背后的原因。2. 下载 JDK 18 的 tar.gz先确认 Linux 是 x86_64 还是 aarch64“64 位”三个字在 JDK 18 里几乎成了默认这个版本不再发布 32 位安装包所以你平时在 Windows 上纠结的 x86/x64 二选一在这里换成了 x64 和 aarch64 的选择。x64 对应 Intel/AMD 台式机和常见的云服务器aarch64 对应 ARMv8 的服务器。在 x86_64 机器上下载了 aarch64 包解压会成功但运行/opt/.../bin/java时会直接报 “cannot execute binary file”。因此下载前的第一件事必须是确认机器架构而不是看到页面带 64 位就直接点下载。2.1 用 uname -m 确认架构避免下错 aarch64 包先跑下面三句话确认当前系统是 64 位还是 32 位以及 CPU 架构是不是 x86_64uname -m getconf LONG_BIT lscpu | grep -E Architecture|CPU op-mode第一行输出x86_64表示 x86 64 位架构输出aarch64表示 ARM64。第二行得到 64 表示用户态是 64 位但如果系统是精简容器这个值有时会给出 32需要结合uname -a一起看。第三行能看到CPU op-mode: 32-bit, 64-bit这种输出说明 CPU 支持 64 位只是内核或用户态未必开了。不要用uname -p判断它在很多发行版上返回unknown没有参考价值。把结果和 JDK 18 压缩包对应起来uname -m 输出CPU 平台应该下载的 tar.gzx86_64Intel / AMD x64jdk-18_linux-x64_bin.tar.gzaarch64ARMv8 及以上jdk-18_linux-aarch64_bin.tar.gzi686 / i386老 32 位不能装JDK 18 没有 32 位包这套 Linux 常用命令其实适用于所有以压缩包分发的软件不只是 JDK。确认好架构之后再进入下载步骤能省掉后面一整轮排错。2.2 从官网下载 tar.gz手动核 sha256JDK 18 的官方压缩包以jdk-18_linux-x64_bin.tar.gz命名。Oracle 官网的下载页需要先点接受许可协议不过在已经拿到固定下载地址的情况下可以在命令行直接用 curl 取cd /tmp curl -L -C - -o jdk-18_linux-x64_bin.tar.gz \ https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz sha256sum jdk-18_linux-x64_bin.tar.gz-L是跟随重定向-C -是断点续传-o强制指定本地文件名。sha256sum会输出一串 64 位十六进制值把这个值和官网下载页列出的 SHA-256 比对完全一致再继续。如果是公司内网部署通常会搭一个 jdk 镜像网站把同样的文件同步到内网校验值也应该一致不一致就说明文件损坏或被动过。下载页同时还会提供.rpm包但那个安装方式会写系统文件、注册 RPM 数据库不属于“解压即可安装”的范畴。这里只认.tar.gz它才是真正的绿色压缩包。Oracle 的latest链接指向 JDK 18 的最新小版本比如 18.0.2 之后的修正版目录名会跟着变但这种变化不影响压缩包本身的解压逻辑。2.3 解压前先用 tar -tzf 看顶层目录拿到压缩包后别急着解压先看包内顶层目录避免解压后不知道 JDK 实际被放到了哪一层tar -tzf jdk-18_linux-x64_bin.tar.gz | head -5第一条输出通常是jdk-18.0.2/这个目录名会在下一步用到。用tar -tzf预检还有一个好处tar.gz 包内如果是 ASCII 路径解压时不会出现常见的 linux 解压文件乱码而 zip 包反而容易出现 GBK/UTF-8 混合文件名问题。看到顶层目录后下一章的解压命令就能写得更稳。如果是批量部署建议下载后就把压缩包缓存到/opt/pkg/cache避免每台机器都去官网拉一次。3. 解压即安装把 JDK 18 放进 /opt 并配置环境变量压缩包解压到/opt是 Linux 上最常见的部署位置因为普通用户只读/optroot 统一管理后续删除也干净。解压本身只有一条 tar 命令但大多数人卡在两点解压后的 JDK 目录名带小版本号导致脚本里路径不好写环境变量写进了/etc/profile但当前 shell 不生效误以为安装失败。这一章把这两个点拆开处理。3.1 用 tar --strip-components1 固定 JDK 安装目录我一般会先把 JDK 解压到一个固定的/opt/jdk18而不是直接保留包内jdk-18.0.2目录。这样可以避免环境变量里写死小版本号升级时也不怕目录名变化。命令如下sudo mkdir -p /opt/jdk18 sudo tar -xzf /tmp/jdk-18_linux-x64_bin.tar.gz -C /opt/jdk18 --strip-components1 ls -l /opt/jdk18/bin/java--strip-components1表示去掉包内第一层目录也就是jdk-18.0.2/把bin/,lib/,conf/直接解到/opt/jdk18下。-C指定进入目录后再解压目标目录必须存在所以先mkdir -p。这样JAVA_HOME/opt/jdk18是固定路径之后写环境变量、重启服务、打包到其它机器都不受版本号影响。如果你不想用strip也可以先解到/optsudo tar -xzf jdk-18_linux-x64_bin.tar.gz -C /opt再给自动带上版本的目录做一个软链接sudo ln -sf /opt/jdk-18.0.2 /opt/jdk18两种方式效果一样。差别在于strip不需要知道具体小版本号在自动化脚本里更稳软链接方式能保留原始目录结构方便你看到实际版本。解压到/opt/jdk18后建议顺手确认一下文件属主如果你用 root 解压普通用户可以读和执行如果你用普通用户解压后续 systemd 服务可能读不了需要执行sudo chown -R root:root /opt/jdk18。确认无误后压缩包本身可以删掉安装过程已经结束剩下的只是环境变量。3.2 JAVA_HOME 和 PATH 写进 profile.d还是 ~/.bashrc环境变量配置有两种常见落点全局配置写在/etc/profile.d/jdk18.sh当前用户配置写在~/.bashrc。写全局的好处是所有用户都能用适合专门跑构建任务的服务器写用户级的好处是不影响系统其它用户适合多环境共存。实际取舍看下表写入位置生效范围推荐场景/etc/profile.d/jdk18.sh所有新登录 shell单 JDK 服务器、CI 构建机~/.bashrc当前用户交互 shell个人开发机、多用户共用~/.profile当前用户登录 shell桌面环境、非 bash 登录 shell配置命令我一般这样写sudo tee /etc/profile.d/jdk18.sh /dev/null EOF export JAVA_HOME/opt/jdk18 export PATH$JAVA_HOME/bin:$PATH EOF source /etc/profile.d/jdk18.shtee以 root 权限写入文件/dev/null是丢掉 tee 在终端打印的内容。heredoc 的EOF加了引号变量不会被提前展开$JAVA_HOME会原样写进文件。source 让当前 shell 立刻生效但严格来说/etc/profile.d中的脚本只在这个用户通过登录 shell 进入时自动执行已经打开的终端还是要手动 source 一次。更保险的做法是source /etc/profile.d/jdk18.sh后立刻执行echo $JAVA_HOME看到/opt/jdk18才算配置完成。PATH里的$JAVA_HOME/bin:$PATH顺序也值得解释。把 JDK 的 bin 放到前面是为了覆盖系统可能自带的旧 Java如果反过来写成$PATH:$JAVA_HOME/binwhich java大概率还是指向/usr/bin/javaJava 版本不会被切换。多数人遇到“明明装了 18java -version 还是 11”就是这个顺序问题。3.3 环境变量配置失败的三类现场配置失败最常见的不是写错路径而是没有重新加载。第一种是你在一个终端里改了~/.bashrc然后直接开新窗口有些桌面终端不读取得source ~/.bashrc。第二种是用sudo -u user bash切换用户sudo默认会重置环境加载不到普通用户自己定义的 JAVA_HOME要模拟登录环境用sudo -i -u user。第三种是系统里已经装了openjdk-17-jdk这类包/usr/bin/java存在这时即使你新加的 PATH 在前面which java还是/usr/bin/java需要执行type -a java看完整搜索顺序。还有一种容易被忽略的在 systemd service 文件里写的EnvironmentJAVA_HOME/opt/jdk18只对那个服务生效和/etc/profile.d没有任何关系。容器镜像一般也加载不到 profile所以 Dockerfile 里要自己写ENV JAVA_HOME/opt/jdk18。区分清楚这些场景环境变量配置的成功率会高很多。4. 验证 JDK 18 安装结果java -version 之外的 4 个排错点很多 JDK 安装教程只验证java -version就收尾了这在生产环境远远不够。JDK 是整套工具链javac负责编译jlink负责生成精简运行时jar打包容错也不同。我在验证安装时会让四类命令逐个跑一遍通过全部验证之后才算 JDK 18 真的“解压即用”。4.1 用一套命令完成 JDK 18 最小验证echo JAVA_HOME$JAVA_HOME type -a java java -version javac -version jlink --version file $JAVA_HOME/bin/java前四行确认环境变量和命令搜索顺序java -version看运行时javac -version看编译器和对 JDK 版本的识别jlink看模块工具链。最后一行file比较容易被忽略它能直接告诉你这个java二进制是什么格式比如输出ELF 64-bit LSB pie executable, x86-64说明当前包和 x86_64 系统匹配。如果java -version输出里包含openjdk version 18.0.2紧接着是 Oracle JDK 或 OpenJDK 的标识说明运行正常。真正要注意的是which java指向了别处比如/usr/bin/java这通常意味着 PATH 里还有旧版本在抢位置需要回到上一章调整 PATH 顺序。对靠 crontab 跑 Java 任务的机器还建议在脚本顶部显式source /etc/profile.d/jdk18.sh否则 cron 环境不会加载 profile.d。4.2 “cannot execute binary fileExec format error” 的根因这个报错语义很明确内核认为这个文件不是能执行的格式。大多数情况是下载了错误的架构包。比如你在 ARM 服务器上下载了jdk-18_linux-x64_bin.tar.gz解压后运行就会这样报错。还有一类情况是机器内核是 64 位但用户态是 32 位容器glibc不满足 JDK 18 的最低要求同样会拒绝执行。排查顺序建议是uname -m file $JAVA_HOME/bin/java ldd $JAVA_HOME/bin/java | head -20ldd能看到它依赖的动态库是否都在。如果输出里有not found字样说明基础发行版缺少对应库若报GLIBC_2.32 not found这种错说明系统 glibc 版本低于 JDK 18 的需求。这类问题没法只靠解压解决要么换低版本 JDK要么升级基础系统。4.3 javac 输出乱码和处理 locale当系统区域设置不是 UTF-8 时Java 虚拟机打印的中文提示会变成问号或方块。这和压缩包本身没关系更不是解压文件乱码的问题。在中文环境中先看一眼当前 localelocale | head -3如果输出里没有任何UTF-8可以用export LANGzh_CN.UTF-8 LC_ALLzh_CN.UTF-8临时修正。LC_ALL的优先级高于LANG两个同时设为 UTF-8 能避免很多 Java 进程输出乱码。JDK 18 官方 tar.gz 包内部的文件名是 ASCII解压过程不会产生文件名乱码以前用unzip -O GBK处理 zip 包的方法在这里用不上。不过如果你把 JDK 目录通过 zip 传到远端再解压就可能引入乱码这也是我一直推荐直接传 tar.gz 的原因。验证和排错常用对应关系放到一起现象根因修复java: command not foundPATH 没写或没 source重看 3.2 节cannot execute binary file架构不匹配或 32 位环境按 2.1 下载正确架构包Error: could not open ...JAVA_HOME 目录路径错误echo $JAVA_HOMEjavac 输出乱码locale 不是 UTF-8设置 LANG 和 LC_ALL5. JDK 18 与旧版本共存用 update-alternatives 一键切换服务器上已经有一个 JDK 8 或 JDK 11这时再装 JDK 18不建议直接改全局 PATH。update-alternatives 是 Debian/Ubuntu 系 Linux 标准的版本切换工具不需要写复杂的符号链接脚本一条命令就能把/usr/bin/java指到想用的版本上。5.1 把 JDK 18 注册为 java 和 javac 的备选项sudo update-alternatives --install /usr/bin/java java /opt/jdk18/bin/java 1800 sudo update-alternatives --install /usr/bin/javac javac /opt/jdk18/bin/javac 1800 sudo update-alternatives --config java最后一条命令会列出系统里所有已注册的 JDK输入编号选择要默认用哪个。优先级数字 1800 是按版本号乘 100 得来的如果还有 JDK 11 和 JDK 8 的备选项优先级分别是 1100 和 800默认会选 JDK 18。你还需要对javac执行同样的--config因为java和javac是两个独立注册项不同步容易出现java -version是 18、javac -version还是 17 的割裂状态。更新完后用update-alternatives --list java能看到所有可切换的路径想要指定某个路径设为默认可以执行sudo update-alternatives --set java /opt/jdk18/bin/java。这个命令只改/usr/bin/java的软链接不影响你手动export JAVA_HOME的当前 shell。5.2 不碰系统只在当前终端用 JDK 18update-alternatives的缺点是操作是全局的会直接影响所有用户。如果你只是想在当前终端里做一次编译测试定义一个 shell 函数更合适use_jdk18() { export JAVA_HOME/opt/jdk18 export PATH$JAVA_HOME/bin:$PATH }把这个函数写进~/.bashrc新终端里敲use_jdk18就会切到 JDK 18。因为它只是改变当前进程的环境变量不会动/usr/bin系统其它进程依然使用原来的 JDK。表格对比一下两种方式方式作用范围适合场景update-alternatives全局 /usr/bin服务器默认 JDKshell 函数 export当前终端临时编译测试systemd 环境变量单个服务服务的运行时环境5.3 配合符号链接处理小版本升级如果你按第 3 章写死了/opt/jdk18那升级 JDK 18 的小版本时不需要改动任何环境变量和 alternatives 配置。把新压缩包用相同的--strip-components1解压到/opt/jdk18-new确认无误后执行sudo rm /opt/jdk18 sudo ln -s /opt/jdk18-new /opt/jdk18这样JAVA_HOME依旧指向/opt/jdk18PATH不用变服务的启动命令也不用改。在构建容器镜像时同理Dockerfile 里ENV JAVA_HOME/opt/jdk18即可不需要再跑 source。完成软链接后再执行一次java -version确认版本已经切换并顺手用ls -l /opt/jdk18/bin/java看看主程序软链接是否指向了新目录。本文还有配套的精品资源点击获取