前一阵子发现最新的kali的默认java已经不是1.8了,就会导致之前自己一直用的破解的burp就用不了了,然后想换一下kali的java环境,然后就查到了这样一条命令update-alternatives
可以直接修改kali的Java版本,有点神奇,而且比较实用,就省去解决各种软件版本问题的时间,尤其是python和java这种版本之间可能不兼容的软件,给大家分享一下。
简介(抄的)
update-alternatives
命令用于处理linux系统中软件版本的切换,在各个linux发行版中均提供了该命令,命令参数略有区别,但大致是一样的。
命令的原理
看起来很复杂,其实感觉挺简单的,就是一个软连接!的原理,首先你要用update-alternatives
设置好你的软件包路径和软连接到的地址(/usr/bin/下),然后当你使用这个命令切换软件版本的时候,这个update-alternatives
就会生成对应的软连接,这样如果你是连接到/usr/bin下就可以直接在命令行里面执行了,这个我说起来比较绕口,所以整两个例子:一个是针对应用程序,就是直接可以执行的,一个是针对软件包,需要配环境变量的。
演示
单个程序版本控制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| ~ ᐅ # 首先是Python ~ ᐅ # Ubuntu会自带Python,其映射关系如下 ~ ᐅ # lrwxrwxrwx 1 root root 9 Jun 11 05:40 python -> python2.7 ~ ᐅ # lrwxrwxrwx 1 root root 9 Jun 11 05:40 python2 -> python2.7 ~ ᐅ # -rwxr-xr-x 1 root root 3.5M Nov 27 2018 python2.7 ~ ᐅ # lrwxrwxrwx 1 root root 9 Jun 11 05:40 python3 -> python3.6 ~ ᐅ # -rwxr-xr-x 2 root root 4.4M Jan 14 2019 python3.6 ~ ᐅ # 虽然安装了两个版本的Python,但并没有使用update-alternatives注册 ~ ᐅ # 那就当做Python已经装好了,我们直接使用update-alternatives进行版本控制就可以了 ~ ᐅ # 第一步,将Python注册到update-alternatives ~ ᐅ ~ ᐅ ~ ᐅ ~ ᐅ # 注册python2.7 ~ ᐅ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 10 update-alternatives: 使用 /usr/bin/python2.7 来在自动模式中提供 /usr/bin/python (python) ~ ᐅ ~ ᐅ ~ ᐅ # install代表注册,后面四个参数分别是: ~ ᐅ # 要产生软连接的目标地址 ~ ᐅ # 注册的组件名(后面会使用这个控制版本,相同软件一定相同) ~ ᐅ # 是程序源地址 ~ ᐅ # 优先级,越大优先级越高 ~ ᐅ ~ ᐅ ~ ᐅ # 注册python3.6 ~ ᐅ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 20 update-alternatives: 使用 /usr/bin/python3.6 来在自动模式中提供 /usr/bin/python (python) ~ ᐅ ~ ᐅ ~ ᐅ # 查看python当前版本 ~ ᐅ python --version Python 3.6.8 ~ ᐅ ~ ᐅ # 交互式修改python版本 ~ ᐅ sudo update-alternatives --config python 有 2 个候选项可用于替换 python (提供 /usr/bin/python)。
选择 路径 优先级 状态 ------------------------------------------------------------ * 0 /usr/bin/python3.6 20 自动模式 1 /usr/bin/python2.7 10 手动模式 2 /usr/bin/python3.6 20 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:1 update-alternatives: 使用 /usr/bin/python2.7 来在手动模式中提供 /usr/bin/python (python) ~ ᐅ ~ ᐅ # 查看python版本 ~ ᐅ python --version Python 2.7.15+ ~ ᐅ ~ ᐅ ~ ᐅ # 非交互式修改 ~ ᐅ sudo update-alternatives --set python /usr/bin/python3.6 update-alternatives: 使用 /usr/bin/python3.6 来在手动模式中提供 /usr/bin/python (python) ~ ᐅ python --version Python 3.6.8 ~ ᐅ ~ ᐅ ~ ᐅ # 查看python状态 ~ ᐅ sudo update-alternatives --display python python - 手动模式 最佳链接版本为 /usr/bin/python3.6 链接目前指向 /usr/bin/python3.6 链接 python 指向 /usr/bin/python /usr/bin/python2.7 - 优先级 10 /usr/bin/python3.6 - 优先级 20 ~ ᐅ ~ ᐅ ~ ᐅ ~ ᐅ ~ ᐅ # 还有删除,设置手动模式啥的就不一一演示了 ~ ᐅ ~ ᐅ ~ ᐅ
|
程序包版本控制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| ~ ᐅ # 首先下载好软件包,解压好,存到自己想存的路径下(/usr/local) ~ ᐅ # 然后设置环境变量如下(设置环境变量可以修改/etc/profile,也可以~/.bash_profile,然后我用的zsh可以修改~/.zshrc。虽然文件不一样,但添加的内容是一样的) export JAVA_HOME=/usr/bin/jdk # 注意这里的jdk是软连接的目标地址 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=$PATH:${JAVA_HOME}/bin ~ ᐅ ~ ᐅ ~ ᐅ ~ ᐅ # 然后对我下载的三个jdk进行注册 ~ ᐅ sudo update-alternatives --install /usr/bin/jdk java /usr/local/jdk-12.0.1 20 update-alternatives: 使用 /usr/local/jdk-12.0.1 来在自动模式中提供 /usr/bin/jdk (java) ~ ᐅ sudo update-alternatives --install /usr/bin/jdk java /usr/local/jdk1.8.0_221 30 update-alternatives: 使用 /usr/local/jdk1.8.0_221 来在自动模式中提供 /usr/bin/jdk (java) ~ ᐅ sudo update-alternatives --install /usr/bin/jdk java /usr/local/jdk1.6 10 ~ ᐅ sudo update-alternatives --display java java - 自动模式 最佳链接版本为 /usr/local/jdk1.8.0_221 链接目前指向 /usr/local/jdk1.8.0_221 链接 java 指向 /usr/bin/jdk /usr/local/jdk-12.0.1 - 优先级 20 /usr/local/jdk1.6 - 优先级 10 /usr/local/jdk1.8.0_221 - 优先级 30 ~ ᐅ ~ ᐅ # 查看Java版本 ~ ᐅ # 可能需要重启一下,发现这个主题还可以计数 [oh-my-zsh] Random theme '/home/ssssdl/.oh-my-zsh/themes/skaro.zsh-theme' loaded... 1 ~ » java -version java version "1.8.0_221" Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode) 2 ~ » 2 ~ » 2 ~ » # 交互式修改Java版本 3 ~ » sudo update-alternatives --config java [sudo] ssssdl 的密码: 有 3 个候选项可用于替换 java (提供 /usr/bin/jdk)。
选择 路径 优先级 状态 ------------------------------------------------------------ * 0 /usr/local/jdk1.8.0_221 30 自动模式 1 /usr/local/jdk-12.0.1 20 手动模式 2 /usr/local/jdk1.6 10 手动模式 3 /usr/local/jdk1.8.0_221 30 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:1 update-alternatives: 使用 /usr/local/jdk-12.0.1 来在手动模式中提供 /usr/bin/jdk (java) 4 ~ » java -version java version "12.0.1" 2019-04-16 Java(TM) SE Runtime Environment (build 12.0.1+12) Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing) 5 ~ »
|
结语
到这整合命令就说完了,其实还有一些其他的参数,比如remove从列表中删除已经注册的程序等等吧,感觉个人使用的时候还是交互式修改比较常用,shell脚本啥的可能还是要用set直接修改,然后使用这种方法可以管理很多软件,尤其是对于一些经常需要好几个版本软件切换的小伙伴,然后工具原理比较简单,有时间可以在Windows上搞一个,来一波GitHub摘星啥的。要是感觉我没说全可以去网上再看看,就这样吧。。