kali系统下多版本JDK共存

news2024/9/28 3:23:40

0、前言

从上周末到这周都在做RCE(Remote Command/Code Execute,远程命令执行或者代码执行 )相关漏洞复现,像log4j2漏洞在复现过程用到的JDK有特定版本要求,我的kali虚拟机默认是JDK11,而我又不希望直接删除JDK11,可多个版本JDK共存,想用到哪个版本时切换,查询了相关资料,再自己实践后可行。因此整理了本文分享出来。

参考文章:
https://zhuanlan.zhihu.com/p/399295670
https://blog.csdn.net/u012804180/article/details/78858907

1、查看当前java版本号

查看版本号目的是为了方便后面要修改回这个版本时,切换命令的编写

#查看版本
java -version

# 结果
openjdk version "11.0.20-ea" 2023-07-18
OpenJDK Runtime Environment (build 11.0.20-ea+7-post-Debian-1)
OpenJDK 64-Bit Server VM (build 11.0.20-ea+7-post-Debian-1, mixed mode, sharing)

2、查看JDK安装目录

目的是想要把其他版本的JDK安装包放在一起,方便统一管理。先用which查看java在哪个目录下,使用cd切换目录时发现给出的路径不是目录,再使用ls -lrt命令来找到最终实际放JDK安装包的目录。

 # 使用which命令
which java

# 给出结果是,这个不是目录,cd时会提示
cd: 不是目录: /usr/bin/java

# 使用两次ls -lsr命令才找到实际放JDK安装包的目录
ls -lrt /usr/bin/java
ls -lrt /etc/alternatives/java

# 实际放JDK安装包的目录是/usr/lib/jvm
cd /usr/lib/jvm

在这里插入图片描述

3、下载目标版本的JDK

由于我需要的是jdk-8u191的,我到官网下载linux系统64位,我测试过使用jdk-8u401安装完最后,在使用命令java -version查看版本时一直报错:zsh: 可执行文件格式错误: java,但使用jdk-8u191和jdk-8u151都正常,如果有使用到jdk-8u401版本异常的话可换其他版本。

官网下载地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
下载时需要登录,如果嫌麻烦,可关注我的公众号:大象只为你,回复:jdk8,获取jdk-8u191和jdk-8u151适用linux系统64位的安装包。

下载完后复制到目录/usr/lib/jvm

4、安装JDK

4.1、解压压缩包

使用tar命令解压缩

# 解压压缩包
tar -zxvf jdk-8u191-linux-x64.tar.gz  

tar 命令的一般格式:
tar [选项] 文件或目录名
该命令对文件和目录进行打包。
选项及其含义如下。
-f:文件名:使用指定的存档文件。
-c:创建一个新的文档。
-r:用于将文件附加到已存在的文档后面。
-u:仅仅添加比文档文件更新的文件。
-x:从文档文件中恢复被备份的文件。
-t:用于列出一个文档文件中的被备份出的文件名。
-z:用 zip 命令压缩或用 unzip 命令解压。

4.2、安装和配置

使用update-alternatives命令进行安装和设置jdk,可使多个版本共存,先install再set。在install时需要填写优先级,填写jdk版本号,jdk8的去掉中间0 ,jdk11全部拼接上,目的是让优先级的位数一样。

命令说明:先install 再set
-安装命令
update-alternatives: --install <链接> <名称> <路径> <优先级>
-设置命令–默认为当前版本
update-alternatives: --set <名称> <路径>
-移除命令,当不需要该版本时可移除命令,不会删除安装包
update-alternatives: --remove <名称> <路径>
-多版本JDK管理,切换其他版本时可用该命令
update-alternatives --config <名称>

以安装jdk-8u191为例

update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_191/bin/java 18191
update-alternatives --set java /usr/lib/jvm/jdk1.8.0_191/bin/java
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_191/bin/javac 18191
update-alternatives --set javac /usr/lib/jvm/jdk1.8.0_191/bin/javac

如果不要该版本可用以下命令进行移除

update-alternatives --remove java /usr/lib/jvm/jdk1.8.0_191/bin/java 
update-alternatives --remove javac /usr/lib/jvm/jdk1.8.0_191/bin/javac

切换其他版本时可使用以下命令

# 配置指定java版本
update-alternatives --config java
# 配置对应java文档版本,如果没有安装则不用选择,跟java同时操作
update-alternatives --config javac

在这里插入图片描述

5、下期内容预告

下期会分享跟RCE相关的内容,会先以ctfhub—rce通关热身,敬请期待…

6、资料获取

如果需要jdk-8u191或jdk-8u151适用linux系统64位的安装包,请关注我的公众号:大象只为你,后台回复:jdk8。如果需要kali虚拟机,后台回复:虚拟机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1414468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue2:通过代理服务器解决跨域问题

一、场景描述 现在的项目大多数是前后端分离的。Vue前端项目通过ajax去请求后端接口的时候&#xff0c;会有同源策略的限制。从而产生跨域问题。 二、基本概念 1、什么是同源策略&#xff1f; 就是前端服务和后端服务的协议名&#xff0c;IP或主机名&#xff0c;端口号不完…

Linux进程间通信(IPC)机制之一:管道(Pipes)详解

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;Nonsense—Sabrina Carpenter 0:50━━━━━━️&#x1f49f;──────── 2:43 &#x1f504; ◀️ ⏸ ▶️ …

Maven讲解

介绍 Maven是一个流行的构建工具和项目管理工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目报告生成。Maven通过提供一致的项目结构、自动化的构建过程和强大的依赖管理&#xff0c;简化了项目的开发和维护过程。 下面是一些Maven的主要特点和用途&#xff1a; 项…

设计模式—行为型模式之责任链模式

设计模式—行为型模式之责任链模式 责任链&#xff08;Chain of Responsibility&#xff09;模式&#xff1a;为了避免请求发送者与多个请求处理者耦合在一起&#xff0c;于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链&#xff1b;当有请求发生时&am…

Java设计模式-外观模式(11)

大家好,我是馆长!今天开始我们讲的是结构型模式中的外观模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。。 外观模式(Decorator Pattern) 定义 外观(Facade)模式一种通…

【活动回顾】CSDN 成都城市开发者社区年度聚会 - 圆满结束!

文章目录 前言一、活动介绍二、精彩分享内容2.1、《COC 成都社区情况和活动介绍》2.2、《2023 年你最关注的话题》2.3、《紧跟技术潮流》2.4、《2024 年抓住技术新红利》2.5、一起干饭啦2.6、合影留念 三、亚马逊云科技 User Group3.1、社区介绍3.2、持续招募3.3、微信交流群 总…

css3表格练习

1.效果图 2.html <div class"line"></div><h3>获奖名单</h3><!-- 表格 cellspacing内边距 cellpadding外边距--><table cellspacing"0" cellpadding"0" ><!-- thead表头 --><thead><tr>…

【JavaEE】网络原理: 网络编程套接字(概念)

目录 1.什么是网络编程 2.网络编程中的基本概念 2.1发送端和接收端 2.2请求和响应 2.3客户端和服务端 3.Socket套接字 4.Socket编程注意事项 1.什么是网络编程 网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信 (…

程序员的平均结婚年龄

关于程序员的平均结婚年龄&#xff0c;根据之前的信息&#xff1a; 一项对全球10000名在职程序员的调查数据显示&#xff0c;程序员第一次结婚的平均年龄是39.43周岁。而在中国的部分地区&#xff0c;如北京等地&#xff0c;程序员群体中普遍反映的结婚年龄是在30岁左右。 程序…

Title: 提升大型语言模型在知识图谱完成中的性能

基本信息 论文题目: Making Large Language Models Perform Better in Knowledge Graph Completion Making Large Language Models Perform Better in Knowledge Graph Completion (arxiv.org)https://arxiv.org/pdf/2310.06671.pdf 作者: Yichi Zhang, Wen Zhang 机构: Col…

25考研政治备考计划

各位小伙伴大家好&#xff0c;今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段&#xff0c;直接就是强化&#xff0c;强化的内容也就是听课&#xff0c;刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课&#xff0c;推荐刷肖1000 *9月中-10月中 背腿姐的背…

文件上传之大文件分块上传进度控制处理

在分块上传内容结束以后的事件监听&#xff0c;我们会实现 unlinkSync 删除临时文件操作&#xff0c;那么试想一下&#xff0c;在这个事件监听中&#xff0c;我们是否可以通过totalChunks以及currentChunk获取当前上传的进度情况呢&#xff1f; 后端 upload上传接口&#xff…

Go 知识chan

Go 知识chan 1. 基本知识1.1 定义1.2 操作1.3 操作限定1.4 chan 读写 2. 原理2.1 数据结构2.2 环形队列2.3 等待队列2.4 类型消息2.5 读写数据2.6 关闭chan 3. 使用3.1 操作符使用3.2 select3.3 for-range https://a18792721831.github.io/ 1. 基本知识 chan是go里面里面提供…

应用机器学习的建议

一、决定下一步做什么 在你得到你的学习参数以后&#xff0c;如果你要将你的假设函数放到一组新的房屋样本上进行测试&#xff0c;假如说你在预测房价时产生了巨大的误差&#xff0c;你想改进这个算法&#xff0c;接下来应该怎么办&#xff1f;实际上你可以考虑先采用下面的几种…

「QT」QString类的详细说明

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「

并查集:连通块中点的数量

import java.io.*; import java.util.Scanner;public class Main{static int N 100010;static int[] p new int[N]; //存储每个节点的父亲节点,一开始默认p[i]i;static int[] size new int[N]; //存储每个连通块里含有多少个节点static BufferedReader in new BufferedR…

数学知识第二期 约数

前言 约数也是很重要的基础数学知识&#xff0c;希望大家能够完全掌握&#xff01;&#xff01;&#xff01; 一、约数的知识 简介 约数&#xff0c;又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数&#xff0c;就说a能被b整除&#xff0c;或b能整除a。a称为b的…

【Java与网络6】实现一个自己的HTTP浏览器

前面我们讨论了HTTP协议的基本结构和Socket编程的基本原理&#xff0c;本文我们来整个大活&#xff1a;自己实现一个简单的浏览器。 目录 1.主线程循环体 2.readHostAndPort()方法的实现 3.readHttpRequest()方法的实现 4.sendHttpRequest()方法的实现 5.readHttpRespons…

vector迭代器失效

目录 迭代器失效的场景 insert插入元素时迭代器失效 erase删除元素时迭代器失效 本期我们主要进行vector迭代器失效问题的讨论。 迭代器失效的场景 insert插入元素时迭代器失效 先看代码&#xff1a; iterator insert(iterator pos, T val){assert(pos > _start);ass…

不知道如何批量处理图片

你是否曾经遇到过需要批量处理大量图片的情况&#xff1f;例如&#xff0c;需要将多张图片转换为统一格式、调整大小或进行美化处理。这种时候&#xff0c;如果一张张手动处理&#xff0c;不仅效率低下&#xff0c;还容易出错。那么&#xff0c;有没有一种方法可以快速、准确地…