在 Kali Linux 上安装 Java OpenJDK 8(详细指南)
前置知识
- Kali Linux:本文假设你使用的是最新版本的 Kali Linux,且具有管理员权限(
sudo或 root 权限)。 - OpenJDK 8:OpenJDK 是 Java Development Kit (JDK) 的开源实现,包含运行 Java 程序所需的 Java Runtime Environment (JRE) 和编译 Java 代码的工具(如
javac)。 - 为什么选择 8u202:某些遗留应用或工具可能需要特定的 Java 8 版本。本文使用 8u202 作为示例,但方法适用于其他 OpenJDK 8 版本。
- 所需工具:确保你的系统中已安装
wget、tar和文本编辑器(如mousepad或nano)。
如果你的系统中缺少这些工具,可以通过以下命令安装:
sudo apt update
sudo apt install wget tar mousepad -y
步骤 1:下载 Java OpenJDK 8 安装包
我们将从华为云的镜像仓库下载 OpenJDK 8u202 的 Linux 64 位版本。这是一个可靠的镜像源,下载速度较快。
- 打开终端,执行以下命令:
wget https://repo.huaweicloud.com:8443/artifactory/java-local/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
- 解释:
wget是一个命令行下载工具,用于从指定 URL 获取文件。- 下载的文件是一个压缩的 tarball(
.tar.gz格式),包含完整的 OpenJDK 8 安装包。 - 默认情况下,文件会保存在当前目录,通常是
~/Downloads(如果你在用户主目录执行命令)。
步骤 2:解压并安装 OpenJDK 8
我们需要将下载的压缩包解压到系统目录,通常是 /usr/lib/jvm,这是一个 Linux 系统存放 Java 虚拟机相关文件的标准路径。
- 切换到
/usr/lib/jvm目录:
sudo mkdir -p /usr/lib/jvm
cd /usr/lib/jvm
- 解释:
mkdir -p确保目录存在(如果不存在则创建),需要sudo权限因为/usr/lib是系统目录。
- 解压下载的安装包:
sudo tar -xvzf ~/Downloads/jdk-8u202-linux-x64.tar.gz
- 解释:
tar -xvzf是解压.tar.gz文件的命令,其中:x表示提取文件。v显示解压过程(可选,增加可见性)。z表示处理 gzip 压缩。f指定文件名。
sudo确保有权限写入/usr/lib/jvm。- 解压后会生成一个名为
jdk1.8.0_202的目录。
步骤 3:配置环境变量
为了让系统能够识别 java 和 javac 命令,我们需要将 OpenJDK 的可执行文件路径添加到系统的 PATH 环境变量中。
- 打开环境变量配置文件:
sudo mousepad /etc/environment
- 解释:
/etc/environment是全局环境变量配置文件,适用于所有用户。mousepad是 Kali Linux 的默认图形化文本编辑器。如果偏好终端编辑器,可替换为sudo nano /etc/environment。- 需要
sudo权限修改系统文件。
- 修改
PATH变量:
在文件中的PATH行末尾添加以下路径(注意用冒号:分隔):
/usr/lib/jvm/jdk1.8.0_202/bin:/usr/lib/jvm/jdk1.8.0_202/db/bin:/usr/lib/jvm/jdk1.8.0_202/jre/bin
- 解释:
/bin包含核心命令,如java和javac。/db/bin包含数据库相关工具(可选,视需求添加)。/jre/bin包含 Java 运行时环境的可执行文件。- 确保路径准确无误,避免拼写错误。
-
保存并关闭文件:
- 在
mousepad中,点击“保存”并关闭窗口。 - 如果使用
nano,按Ctrl+O保存,Enter确认,再按Ctrl+X退出。
- 在
-
使环境变量生效:
运行以下命令刷新环境变量:
source /etc/environment
- 验证环境变量:
检查PATH是否包含新路径:
echo $PATH
你应该看到类似 /usr/lib/jvm/jdk1.8.0_202/bin 的内容。如果没有,重新检查配置文件。
- 可能的错误:
- 如果文件编辑失败,检查是否有写权限(
sudo是否遗漏)。 - 如果
PATH未生效,尝试重启终端或运行export PATH=$PATH:/usr/lib/jvm/jdk1.8.0_202/bin临时验证。
- 如果文件编辑失败,检查是否有写权限(
步骤 4:注册 Java 和 Javac 命令
Kali Linux 使用 update-alternatives 工具管理多个 Java 版本。我们需要将新安装的 java 和 javac 命令注册到系统中。
- 注册
java命令:
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_202/bin/java" 0
- 解释:
--install将新命令添加到update-alternatives系统中。/usr/bin/java是系统命令的符号链接路径。"java"是命令的名称(用于管理)。/usr/lib/jvm/jdk1.8.0_202/bin/java是实际可执行文件的路径。0是优先级(数字越大优先级越高,0 表示最低优先级,适合测试)。
- 注册
javac命令:
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0_202/bin/javac" 0
- 解释:类似
java,这里注册的是 Java 编译器。
- 可能的错误:
- 如果提示路径不存在,检查
/usr/lib/jvm/jdk1.8.0_202/bin/中是否有java和javac可执行文件。 - 如果命令失败,确认是否遗漏
sudo。
- 如果提示路径不存在,检查
步骤 5:设置默认 Java 版本
如果系统中存在多个 Java 版本,可以手动设置默认版本为刚安装的 OpenJDK 8。
- 设置默认
java:
sudo update-alternatives --set java /usr/lib/jvm/jdk1.8.0_202/bin/java
- 设置默认
javac:
sudo update-alternatives --set javac /usr/lib/jvm/jdk1.8.0_202/bin/javac
- 解释:
--set强制指定默认版本。- 如果系统中只有一个 Java 版本,这一步可能无明显效果。
步骤 6:验证安装
安装完成后,验证 Java 和 Javac 是否正常工作。
- 检查 Java 版本:
java -version
预期输出:
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
- 检查 Javac 版本:
javac -version
预期输出:
javac 1.8.0_202
- 可能的错误:
- 如果提示
java: command not found,检查PATH是否包含/usr/lib/jvm/jdk1.8.0_202/bin。 - 如果版本不匹配,可能是
update-alternatives配置错误,运行以下命令检查:
- 如果提示
update-alternatives --display java
步骤 7:管理多个 Java 版本(可选)
如果你系统中安装了多个 Java 版本,可以通过 update-alternatives 切换:
sudo update-alternatives --config java
- 系统会列出所有注册的 Java 版本。
- 输入对应编号并按 Enter 选择默认版本。
类似地,切换 javac:
sudo update-alternatives --config javac
步骤 8:调试常见问题
以下是一些常见问题及解决方法:
-
下载链接失效:
如果华为云链接不可用,可尝试其他镜像源,如:- AdoptOpenJDK(https://adoptopenjdk.net/archive.html)
- Oracle 存档(需登录,https://www.oracle.com/java/technologies/java-archive-javase8-downloads.html)
-
权限问题:
确保所有操作(如解压、注册命令)使用sudo,否则可能提示“权限不足”。 -
环境变量未生效:
如果source /etc/environment无效,尝试:- 重启终端。
- 临时设置:
export PATH=$PATH:/usr/lib/jvm/jdk1.8.0_202/bin。 - 检查是否有语法错误(如多余空格或冒号)。
-
Java 版本冲突:
如果运行java -version显示其他版本,检查update-alternatives配置,或卸载不需要的 Java 版本:sudo apt remove openjdk-* -y
相关文章:
在 Kali Linux 上安装 Java OpenJDK 8(详细指南)
前置知识 Kali Linux:本文假设你使用的是最新版本的 Kali Linux,且具有管理员权限(sudo 或 root 权限)。OpenJDK 8:OpenJDK 是 Java Development Kit (JDK) 的开源实现,包含运行 Java 程序所需的 Java Run…...
Windows单机模拟MySQL主从复制
这里写自定义目录标题 下载MySQL ZIP压缩包安装主库1、创建配置文件2、安装服务3、初始化数据库4、启动服务5、配置主库 安装从库1、配置ini文件2、安装服务3、初始化数据库4、启动服务5、配置从库6、验证从库状态 操作主库验证 下载MySQL ZIP压缩包 https://dev.mysql.com/do…...
Wifi密码查看软件V1.0
⭐本软件用于查看电脑连接过所有WiFi密码,不具备破解功能。 可在忘记WiFi密码或他人输入密码自己不知道的情况下使用。 ⭐⭐为便于快速分享,加入双击【密码】列可将WIFI密码复制在粘贴板。 ⭐⭐⭐双击【名称】列可生成用于手机连接的二维码进行显示&…...
分布式日志治理:Log4j2自定义Appender写日志到RocketMQ
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
【口腔粘膜鳞状细胞癌】文献阅读3
文献 Single-cell transcriptomic analysis uncovers the origin and intratumoral heterogeneity of parotid pleomorphic adenoma 单细胞转录组学分析揭示了腮腺多形性腺瘤的起源和瘤内异质性 IF:10.8中科院分区:1区 医学WOS分区:Q1 摘要 多形性腺瘤 (PA&#…...
【2025“华中杯”大学生数学建模挑战赛】C题:就业状态分析与预测 详细解题思路
目录 2025“华中杯”大学生数学建模挑战赛C题 详细解题思路一、问题一1.1 问题分析1.2 数学模型 1.3 Python代码1.4 Matlab代码 二、问题二2.1 问题分析2.2 数学模型 2.3 Python代码2.4 Matlab代码 三、问题三3.1 问题分析 四、问题四4.1 问题分析与数学模型 2025“华中杯”大学…...
扫雷-C语言版
C语言扫雷游戏设计(完整版) 游戏背景 扫雷是一款经典的益智类单人电脑游戏,最早出现在1960年代,并在1990年代随着Windows操作系统而广为人知。游戏目标是在不触发任何地雷的情况下,揭开所有非地雷的格子。玩家需要根…...
【fisco bcos】基于ABI调用智能合约
参考官方文档:https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/sdk/java_sdk/assemble_transaction.html 先放一下智能合约: (就是一个很简单的插入和查找嗯) pragma solidity ^0.4.25; pragma experimental…...
Delphi Ini文件对UTF8支持不爽的极简替代方案
如题,没太多废话,直接复制走即可。 unit uConfig;interfaceuses classes, Sysutils;typeTConfig class privateFFileName: String;FConfig:TStringList; protectedpublicconstructor Create(ConfigFile:String);destructor Destroy;property FileName…...
【LangChain实战】构建下一代智能问答系统:从RAG架构到生产级优化
打破传统问答系统的次元壁 当ChatGPT在2022年掀起AI革命时,开发者们很快发现一个残酷现实:通用大模型在专业领域的表现如同拿着地图的盲人,既无法理解企业私有数据,也无法保证事实准确性。这催生了RAG(检索增强生成&a…...
C++编译与链接:从源码到可执行文件的魔法之旅(Visual Studio实践)
文章目录 **C++编译与链接:从源码到可执行文件的魔法之旅(Visual Studio实践)****一、C++编译器的工作流程****二、Visual Studio环境配置实战****三、示例项目:Hello World全流程解析****四、高级技巧与工具链****五、总结与参考资料**C++编译与链接:从源码到可执行文件的…...
RL中的rollout和episode的区别请问是啥
很好的问题兄弟,rollout 和 episode 在强化学习(RL)里经常一起出现,虽然有重叠,但含义和使用语境还是有区别的: ✅ 一句话总结: Episode 是一个完整的任务过程(从起点到终点…...
个人博客系统后端 - 用户信息管理功能实现指南(上)
本文记录了如何实现用获取户信息,用户信息更新,用户头像上传三大基础功能 先上接口实现截图: 一、项目结构概览 先介绍一下 个人博客系统采用了标准的 Spring Boot 项目结构,用户功能相关的文件主要分布在以下几个目录:…...
判断一个整数是否为素数
#include <stdio.h> #include <stdbool.h> // 引入布尔类型// 函数声明:判断一个整数是否为素数 bool isPrime(int num);int main() {int number;// 提示用户输入一个整数printf("请输入一个整数:");scanf("%d", &n…...
具身智能机器人学习路线全解析
一、引言 具身智能机器人作为融合了机器人学、人工智能、认知科学等多领域知识的前沿技术,正逐渐改变着我们的生活和工作方式。从工业制造到家庭服务,从医疗护理到太空探索,具身智能机器人都展现出了巨大的潜力。对于想要深入了解和学习这一…...
虚幻基础:ue引擎的碰撞
文章目录 碰撞:碰撞体间 运动后 产生碰撞的行为——由引擎负责,并向各自发送事件忽略重叠阻挡 碰撞体类型模式纯查询:不清楚具体作用可以阻挡 actor碰撞(武器:刀/子弹)子组件可以产生阻挡 角色的碰撞只有根组件可以阻挡࿰…...
写项目时一些疑惑:组件间的通信、createDownloadUrl和DownloadUrl,ArrayBuffer与Blob等
目录 一、[vite] Internal server error: No known conditions for "./lib/locale/lang/zh-cn" specifier in "element-plus" package 二、可以用vue和JS的代码片段,但是用不了html的代码片段 三、meta是什么东西 四、为什么代码保持一致,但是时间轴始…...
TAS启动与卸载
3. 启动TAS(Thin-Agent服务) TAS在安装完成后通常会自动启动,并在系统重启时自启。如需手动启动,请按以下步骤操作:  3.1 在Windows上启动TAS 1. 打开 Windows服务管理器: ◦ 按下 Win R&…...
对抗生成进化:基于DNA算法的AIGC检测绕过——让AI创作真正“隐形“
一、技术背景与核心思想 2025年,AIGC检测工具(如Originality.AI 5.0)的识别准确率已达99.3%。本研究提出基于染色体编码的对抗进化框架(CAEF),通过模拟生物进化过程动态优化生成模型,成功将检测…...
手动关闭ArcGIS与ArcGIS Online连接的方法
【关闭软件启动时ArcGIS与ArcGIS Online连接方法】 打开C盘找到文件夹“C:\Program Files (x86)\Common Files\ArcGIS\bin”,如下图,删除“ArcGISConnection.exe”与“ArcGISConnectionTest.exe”文件,软件下次启动的时候就不会建立与ArcGIS …...
SpringBoot条件注解全解析:核心作用与使用场景详解
目录 引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、ConditionalOnClass和ConditionalOnMissingClass2、ConditionalOnBean和ConditionalOnMissingBean3、ConditionalOnProperty4、ConditionalOnWebApplication和ConditionalOnNotWebApplication5、ConditionalO…...
android11通过白名单卸载安装应用
目录 1.源码路径: 2.准备文件package.conf: 3.安装方法installPackagesLI 4.卸载方法deletePackageX 1.源码路径: frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java public static final String WHITELIST_PATH="/data/misc/pa…...
大M法处理非线性约束线性化
在电力系统优化问题中,大M法(Big M Method)是一种经典的处理非线性约束线性化的技术,尤其适用于混合整数线性规划(MILP)问题。 其核心思想是通过引入足够大的常数M和辅助变量(如二元变量或松弛…...
【网络安全】谁入侵了我的调制解调器?(一)
文章目录 我被黑了159.65.76.209,你是谁?黑客攻击黑客?交出证据三年后我被黑了 两年前,在我家里使用家庭网络远程办公时,遇到了一件非常诡异的事情。当时,我正在利用一个“盲 XXE 漏洞”,这个漏洞需要借助一个外部 HTTP 服务器来“走私”文件。为了实现这一点,我在 AW…...
【Nokia 7360 ISAM局端】7360局端升级步骤
引言 Nokia 7360 ISAM局端是当前主流的OLT局端之一,在测试ONT产品中经常需要对接7360局端,特别是欧美等海外运营商。测试过程中经常需要升级OLT版本,以便对齐前方客户的现网环境。本文介绍将Nokia 7360 ISAM局端升级到L6GPAA65.669版本的详细步骤。 连接带外管理口 将维护…...
await 在多线程,子线程中的使用
await 在多线程,子线程中的使用 await self.send_reply(user, user, user, auto_content, reply) 这行代码是在一个异步函数里调用类的实例方法 send_reply 代码含义 1. await 关键字 在 Python 的异步编程里,await 关键字的作用是暂停当前异步函数的执行,直到 await 后…...
主数据管理:企业数字化转型的 “数据基石“ 如何为 AI 筑基?
引言:当数据成为新石油,谁在炼制 "高纯度燃料"? 在数字化转型的浪潮中,企业宛如行驶在数据海洋中的巨轮,AI 则是驱动巨轮破浪前行的引擎。但引擎能否高效运转,取决于燃料的纯度 —— 这正是主数…...
使用源码编译安装golang的docker版
编译规则 1.4之前用C写的,1.4可编译后续一直到1.9版本,后续版本实现了自举,后续版本是go写的,基本上相互低2个版本能编译出新版本。 Go < 1.4:C 工具链。 1.5 < Go < 1.19:Go 1.4 编译器。 1.20…...
使用 chromedriver 实现网络爬虫【手抄】
1、引用 selenium 包 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.29.0</version> </dependency> <dependency><groupId>org.seleniumhq.seleniu…...
Linux之 grep、find、ls、wc 命令
Linux之 grep、find、ls、wc 命令 “ 在 Linux 世界中,命令行是不可或缺的一部分,而掌握一些常用的命令可以帮助你更有效率地管理文件和系统。本文将为你介绍四個基礎而强大的 Linux 命令:grep、find、ls 和 wc,带你开启高效文件…...
