kali linux多版本java共存并自由切换 update-alternatives

news2024/11/24 19:59:29

在这里插入图片描述

Kali Linux通过`apt`和`dpkg`安装的Java不是一样的。 它们安装的Java版本和管理方式可能不同。
1. **apt 安装 Java:** 当您使用`apt`包管理器在Kali Linux上安装Java时,您实际上是安装了由Kali Linux官方仓库提供的Java版本。 这个版本通常是经过Kali Linux团队测试和验证的,以确保与Kali Linux系统的兼容性。 这通常是OpenJDK的一个特定版本。

2. **dpkg 安装 Java:** 当您使用`dpkg`工具手动安装Java时,您可以选择要安装的Java版本,而不受Kali Linux官方仓库的限制。 这意味着您可以选择不同的Java实现,例如Oracle JDK、OpenJDK等,并且可以选择特定的版本。

由于这两种方式可以安装不同版本的Java,并且可能会影响系统的配置和依赖关系,因此请根据您的需求和项目来选择正确的安装方式。 在Kali Linux上,推荐使用`apt`安装软件包,以确保与系统的稳定性和兼容性。 如果需要特定版本的Java或者需要手动控制Java的安装,那么可以选择使用`dpkg`或其他手动安装方式。 不过请谨慎操作,以避免破坏系统的稳定性。

以上为chatgpt给出的关于”kali linu通过apt安装的java和通过dpkg安装的java是一样的吗?“的回答,以上仅供参考。

一、apt方式安装OpenJDK 11

1.Kali Linux上安装OpenJDK 11

  • sudo apt update 我们先更新
  • sudo apt install openjdk-11-jdk 用以上命令安装OpenJDK 11

二、使用update-alternatives进行多版本java设置

用法

sudo update-alternatives --install link name path priority [ --slave slink sname spath]

选项注释:
sudo update-alternatives --install link name path priority

  • link是在/usr/bin/,/usr/local/bin/等默认PATH搜索目录
  • name是在/etc/alternatives目录中的链接名
  • path是真正的可执行程序的位置,可以在任何位置
  • priority是优先级
    根据各类文章写的都是通过命令 sudo update-alternatives --config name 在不同的Java版本之间切换的。
    在这里插入图片描述

那我们能不能直接也想win里面给不同版本的java设置成java8、java11、java15来运行不同版本的java呢?
通过了解我发现update-alternatives 是一个Debian和Ubuntu等Debian系Linux发行版中用于管理系统中多个可替代项的工具。在多版本Java的情况下,update-alternatives 允许您在不同的Java可执行文件之间进行选择,并管理系统中默认的Java版本。
它的原理是

1. **候选项列表:** 对于每个可替代项(例如不同版本的Java),`update-alternatives` 维护一个候选项列表。这个列表包括了可替代项的路径以及与之关联的优先级。

2. **管理命令:** 您可以使用 `update-alternatives` 命令来管理这些可替代项。以下是一些常用的命令:

   - `--install`:用于添加一个新的可替代项到列表中,并指定路径、名称和优先级。
   - `--config`:用于选择默认的可替代项。
   - `--display`:用于显示当前的可替代项配置。
   - `--remove`:用于从列表中删除一个可替代项。

3. **优先级:** 每个可替代项都有一个与之关联的优先级。较高优先级的项被认为是默认的项。当多个项具有相同的最高优先级时,系统会提示用户选择。

4. **系统链接:** 当您选择一个默认的可替代项时,`update-alternatives` 将会在系统的某些目录下创建符号链接,这些符号链接将指向所选的可替代项。这些系统链接通常位于 `/usr/bin/` 或 `/usr/local/bin/` 等目录下。

5. **自动更新环境变量:** `update-alternatives` 还可以自动更新系统环境变量,以确保所选的可替代项在终端会话中正确地生效。

通过使用 `update-alternatives`,您可以轻松地在多个Java版本之间切换,并选择默认的版本,而不必手动更改环境变量或修改系统链接。这对于在系统上管理多个Java应用程序或为不同的项目使用不同的Java版本非常有用。

在这里插入图片描述
通过以上了解我们如下构造命令

sudo update-alternatives --install /usr/bin/java11 java11 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1712 

在这里插入图片描述
让我们来验证一下看来是可行的。
不过对于一些只有使用系统的软件不好更改他的启动脚本的只能使用sudo update-alternatives --config java切换java了
在这里插入图片描述

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

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

相关文章

万字总结HTML超文本标记语言

一、前言:什么是网页? 网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 网页是构成网站的基本元素,它通常由图片、链接、文字、声音、视频等元素组成。通常…

MySQL 中的索引

文章目录 一、索引的创建二、聚簇索引与非聚簇索引三、B 树索引 一、索引的创建 创建索引的方式包括两种: 隐式创建:数据库一般会在创建 PRIMARY KEY 和 UNIQUE 约束列时自动创建索引。显示创建:使用 CREAT INDEX 语句创建,建立…

Java流式编程的使用

流式编程的使用步骤 使用流式编程的步骤就是: 设置数据源, 设置数据处理的方式,设置收集结果的方式。 使用filter方法实现过滤条件 例子为下&#xff08;查询年龄大于18的用户&#xff09;: Testpublic void streamTest1() {List<Student> students Arrays.asList(ne…

【Java 基础篇】Java Function 接口详解

在 Java 编程中&#xff0c;Function 接口是一个非常重要的函数式接口&#xff0c;它允许你定义一个接受一个参数并产生结果的函数。Function 接口通常在各种数据处理和转换操作中使用&#xff0c;例如集合处理、流处理以及函数式编程。 本文将详细介绍 Function 接口的使用方…

基于蚁群算法的航线规划

一、背景 二、代码 main.m clear;clc; r21; %21*21 c21; intau20; xstart1; ystart3; %起点 xend20; yend18; %终点 gd1; xt[5,11,8,16,12,15,17,19]; %障碍物 yt[9,15,7,3,12,8,15,12];threat8; NCmax200; %迭代次数%初始化数据 Gamma_A0.9; Rho_A0.2; Alpha_A1; Beta_A3;…

SpringBoot集成easypoi实现execl导出

<!--easypoi依赖&#xff0c;excel导入导出--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version></dependency>通过Exce注解设置标头名字和单…

RocketMQ源码解析(下 )

一、Producer发送消息过程 1、普通发送消息过程 一般发送消息都是new一个DefaultMQProducer&#xff0c;所以先找到DefaultMQProducer类 先进行DefaultMQProducerImpl的初始化&#xff0c;所有Producer的启动过程&#xff0c;最终都会调用到DefaultMQProducerImpl#start方法…

Llama2-Chinese项目:2.3-预训练使用QA还是Text数据集?

Llama2-Chinese项目给出pretrain的data为QA数据格式&#xff0c;可能会有疑问pretrain不应该是Text数据格式吗&#xff1f;而在Chinese-LLaMA-Alpaca-2和open-llama2预训练使用的LoRA技术&#xff0c;给出pretrain的data为Text数据格式。所以推测应该pretrain时QA和Text数据格式…

C++11 - 右值引用

临时空间 临时空间具有常性&#xff0c;什么时候会产生临时空间呢&#xff1f; 1、函数传值返回 把aa拷贝给临时空间&#xff0c;如果是很大的对象并且进行深拷贝&#xff0c;消耗会很大 证明&#xff1a; 这是list模拟实现迭代器的和&#xff01;重载时&#xff0c;while( it…

Secrets

文章目录 主要内容一.命令行创建1.命令行创建代码如下&#xff08;示例&#xff09;: 2.解释 二.环境变量secret1.使用刚才创建的密码&#xff0c;创建Pod并进行尝试。代码如下&#xff08;示例&#xff09;: 2.解释 总结 主要内容 命令行创建环境变量secret 预备知识 Secrets…

车载软件架构 —— AUTOSAR Vector SIP包(二)

车载软件架构 —— AUTOSAR Vector SIP包(二) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在…

【小程序】通过微信提供方法实现条码或二维码的扫描

概述 实现扫码获取信息&#xff0c;对接相应接口 可实现详情查询&#xff0c;已经是完整代码了copy都难么 详细 一、前期准备工作 软件环境&#xff1a;微信开发者工具 官方下载地址&#xff1a;微信开发者工具下载地址与更新日志 | 微信开放文档​编辑 二、程序实现具体步…

机器学习之对神经网络的基本原理的了解

文章目录 神经网络与机器学习神经网络的结点 神经网络与机器学习 神经网络代替模型和用学习规则代替机器学习 神经网络代替模型&#xff1a; 神经网络是一种受到生物神经系统启发的计算模型&#xff0c;它由多个神经元层组成&#xff0c;这些神经元层之间有连接权重&#xff…

测试员有必要转测试开发吗?

为什么很多公司都在招测试开发&#xff1f; 质量保证和软件稳定性&#xff1a;测试开发人员在软件开发生命周期中扮演着关键的角色&#xff0c;他们负责编写和执行测试代码&#xff0c;以确保软件的质量和稳定性。他们可以帮助发现和修复潜在的问题和缺陷&#xff0c;提高软件…

现在公司都在用的CI/CD框架到底是什么?

目录 一&#xff0c;CI/CD到底是什么&#xff1f; 二&#xff0c;为什么要用CI/CD&#xff1f; 三&#xff0c;CI/CD的优缺点&#xff1f; 四&#xff0c;CI/CD都基于什么服务搭建&#xff1f; 五&#xff0c;CI/CD是否适用于所有类型的软件开发&#xff1f; 一&#xff0…

Quartus的2FSK调制解调verilog

名称&#xff1a;Quartus的2FSK调制解调verilog 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a;使用verilog实现2FSK的调制和解调&#xff0c;并进行仿真 代码下载&#xff1a;Quartus的2FSK调制解调verilog_Verilog/VHDL资源下载 代码网&#xff1a;…

SpringBoot之响应处理

文章目录 前言一、返回值处理器ReturnValueHandler流程关于HttpMessageConverters的初始化ReturnValueHandler与MappingJackson2HttpMessageConverter关联 二、内容协商内容协商原理底层源码 三、自定义MessageConverter总结 前言 包括返回值处理器ReturnValueHandler、内容协…

OpenGLES:绘制一个颜色渐变的圆

一.概述 今天使用OpenGLES实现一个圆心是玫红色&#xff0c;向圆周渐变成蓝色的圆。 本篇博文的内容也是后续绘制3D图形的基础。 实现过程中&#xff0c;需要重点关注的点是&#xff1a;如何使用数学公式求得图形的顶点&#xff0c;以及加载颜色值。 废话不多说&#xff0c…

FPGA的BPSK调制verilog

名称&#xff1a;BPSK调制verilog 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 一、设计说明 BPSK调制广泛应用于卫星通信、移动通信等领域。本题目要求设计一个基于直接数字频率合成技术的BPSK调制器&#xff0c;实现对输入周期数字比特流的BPSK调…

LVGL_基础知识

LVGL_基础知识 1、设置对象大小 lv_obj_t * obj lv_obj_create(lv_scr_act()); //lv_obj_set_width(obj, 300); //lv_obj_set_height(obj, 500); lv_obj_set_size(obj,200, 240);//和上面两句的效果一样2、获取对象大小 lv_obj_t * obj lv_obj_create(lv_scr_act()); //lv…