前言

一、JDK是什么?

1、JDK : Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。

最主流的JDK是Oracle公司发布的JDK,除了Oracle之外,还有很多公司和组织都开发了属于自己的JDK,例如国外IBM公司开发了属于自己的JDK,国内淘宝也开发了属于自己的JDK,各个组织开发自己的JDK都是为了在某些方面得到一些提高,以适应自己的需求,比如IBM的JDK据说运行效率就比Oralce的JDK高的多。但不管怎么说,我们还是需要先把基础的Oracle JDK掌握好。

2、JDK是java开发工具包,在其安装目录下面有五个文件夹、一些描述文件、一个src压缩文件。bin、lib、 jre这四个文件夹起作用。可以看出来JDK包含JRE,而JRE包含JVM。

·bin:最主要的是编译器(javac.exe)

·lib:类库(开发中需要使用到的一些jdk提供的一些类)

·jre:java运行环境(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)

· 总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能

3、JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。

二、jdk和jre的区别?

JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。

一句话: jre就是Java程序运行的环境。

Windows

jvms工具

需要用到一个工具jvms

jvms项目地址

打开项目,点击右边Releases,下载工具,我下载的是jvms_v2.1.3_amd64.zip

解压工具

解压到你想放置的盘里

例如我放到D盘下,重命名为jvms,路径为D:\jvms

在jvms文件夹里新建两个子文件夹store和download

![image-20230517175753265](安装和切换多版本java (windows篇)/image-20230517175753265.png)

运行工具

然后以管理员身份运行cmd或者powershell

![image-20230517175644642](安装和切换多版本java (windows篇)/image-20230517175644642.png)

初始化工具

输入以下命令来初始化jvms配置文件

用 D:\jvms\jvms.exe init –help 命令 在OPTIONS选项中可以看到设置的默认值

OPTIONS:
–java_home value the JAVA_HOME location (default: “C:\Program Files\jdk”)
–originalpath value the jdk download index file url. (default: “https://raw.githubusercontent.com/ystyle/jvms/new/jdkdlindex.json")

1
D:\jvms\jvms.exe init

下载JDK

因为是国内网,访问raw.githubusercontent.com一般都会连不上,这时候有两种方法解决

第一种方法:

raw.github的ip经常更换,所以我们先去查一下该网址IP,打开IP查询然后输入

1
raw.githubusercontent.com

在今天 2023/05/17 查询得有4个ipv4的地址

1
2
3
4
185.199.108.133
185.199.109.133
185.199.110.133
185.199.111.133

修改hosts文件

位置:C:\Windows\System32\drivers\etc\hosts

直接在最下面添加上面查到的随便一个IP,保存

1
185.199.108.133 raw.githubusercontent.com

我用这个方法偶尔可以偶尔又不行,我放弃了

第二种方法:

直接在搜索引擎搜github国内镜像站,找一找应该能找到能用的,我找到的https://kgithub.com/,在今天2023/05/17 还能用

直接把原先的地址中的githubusercontent换成kgithub就行

或者用cdn加速的github镜像仓库

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
#我没有用作者的集成的jdk下载链接,我自己写了一个ZuluJDK(一个OpenJDK的发行版本)的下载链接
jvms init --originalpath https://fastly.jsdelivr.net/gh/AienH/jvms@master/openjdk.json

#列出可供下载的可用 jdk 版本
jvms rls
#这个是列出的版本
1) 20.0.1
2) 19.0.2
3) 17.0.7
4) 13.0.14
5) 11.0.19
6) 8.0.372
7) 7.0.352
8) 6.0.119
9) 21.0.0-ea
10) OpenJDK8U-jdk_x64_windows_hotspot_8u372b07

use "jvm rls -a" show all the versions

For a complete list, visit https://fastly.jsdelivr.net/gh/AienH/jvms@master/openjdk.json

#下载JDK17和JDK11
jvms install 11.0.19
jvms install 17.0.7

#查看下载的jdk版本
jvms ls

下载完后在D:\jvms\store目录下能看到下载的几个不同版本的jdk,在D:\jvms\download目录看到jdk的源码包

配置JAVA

C:\Program Files目录下新建文件夹jdk

D:\jvms\store目录下的所有jdk版本复制到C:\Program Files\jdk目录下

然后切换想要使用的ava版本

1
2
#使用jdk17
jvms switch 17.0.7

测试环境是否成功

1
java --version

手动下载JDK包

不通过jvms install在线下载

直接把自己下载好的jdk包解压到D:\jvms\storeC:\Program Files\jdk目录下

例如:添加jdk 17.0.1

  1. 将 jdk 主文件夹复制到jvms/store
  2. 将文件夹重命名为17.0.1
  3. jvms list检查是否显示存在

前言

一、JDK是什么?

1、JDK : Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。

最主流的JDK是Oracle公司发布的JDK,除了Oracle之外,还有很多公司和组织都开发了属于自己的JDK,例如国外IBM公司开发了属于自己的JDK,国内淘宝也开发了属于自己的JDK,各个组织开发自己的JDK都是为了在某些方面得到一些提高,以适应自己的需求,比如IBM的JDK据说运行效率就比Oralce的JDK高的多。但不管怎么说,我们还是需要先把基础的Oracle JDK掌握好。

2、JDK是java开发工具包,在其安装目录下面有五个文件夹、一些描述文件、一个src压缩文件。bin、lib、 jre这四个文件夹起作用。可以看出来JDK包含JRE,而JRE包含JVM。

·bin:最主要的是编译器(javac.exe)

·lib:类库(开发中需要使用到的一些jdk提供的一些类)

·jre:java运行环境(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)

· 总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能

3、JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。

二、jdk和jre的区别?

JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。

一句话: jre就是Java程序运行的环境。

Linux

1.包管理安装

1.1centos7

随意使用一条命令便可以查询到java的安装信息

1
2
3
root@centos:~#yum list installed | grep java

root@centos:~#rpm -qa | grep java

出现内容,表明你系统已经安装了java,如果安装的版本不适合将要搭建的服务环境,你就需要卸载掉。

1
root@centos:~#yum -y remove java-11-openjdk* #卸载所有java-11-openjdk

查看所有JDK版本

1
root@centos:~#yum search java | grep jdk

选择版本并安装(这里我安装的是java8)

1
root@centos:~#yum install -y java-1.8.0-openjdk*

检查jdk是否安装成功


1
root@ubuntu:~#java --version

注意这里是–version

1.2ubuntu

查询已安装java的信息

1
root@ubuntu:~#java -version

注意这里是-version

先卸载之前的版本

1
2
3
4
#之前安装过jdk11
root@ubuntu:~#apt remove openjdk-11-jdk

root@ubuntu:~#apt autoremove

查看所有JDK版本

1
root@ubuntu:~#apt search openjdk

选择版本并安装(这里我安装的是java8)

1
root@ubuntu:~#apt install -y openjdk-8-jdk

检查jdk是否安装成功


1
root@ubuntu:~#java -version

2.源码包安装

这里就和windows安装java差不多了,linux是下载压缩包后,解压完添加环境变量即可使用

winget给出了所有jdk的最新版本列表,winget查找JDK的网址==> whichjdk

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
winget search OpenJDK
Name Id Version Match Source
---------------------------------------------------------------------------------------------------------
ojdkbuild OpenJDK JRE 8 ojdkbuild.ojdkbuild 1.8.3221.6 winget
Java SE Development Kit 18 Oracle.JDK.18 18.0.2.0 Tag: openjdk winget
Java SE Development Kit 17 Oracle.JDK.17 17.0.4.0 Tag: openjdk winget
ojdkbuild OpenJDK JRE 17 ojdkbuild.openjdk.17.jre 17.0030.6.1 Tag: openjdk winget
ojdkbuild OpenJDK 17 ojdkbuild.openjdk.17.jdk 17.0030.6.1 Tag: openjdk winget
OpenJDK JRE 11 ojdkbuild.openjdk.11.jre 11.0.15.1 Tag: openjdk winget
OpenJDK 11 ojdkbuild.openjdk.11.jdk 11.0.15.1 Tag: openjdk winget
Microsoft Build of OpenJDK with Hotspot 17 Microsoft.OpenJDK.17 17.0.4.8 Tag: openjdk winget
Microsoft Build of OpenJDK with Hotspot 16 Microsoft.OpenJDK.16 16.0.2.7 Tag: openjdk winget
Microsoft Build of OpenJDK with Hotspot 11 Microsoft.OpenJDK.11 11.0.16.8 Tag: openjdk winget
Eclipse Temurin JRE with Hotspot 8 EclipseAdoptium.TemurinJRE.8 8.0.322.9 Tag: openjdk winget
Eclipse Temurin JRE with Hotspot 18 EclipseAdoptium.TemurinJRE.18 18.0.1.10 Tag: openjdk winget
Eclipse Temurin JRE with Hotspot 17 EclipseAdoptium.TemurinJRE.17 17.0.4.8 Tag: openjdk winget
Eclipse Temurin JRE with Hotspot 11 EclipseAdoptium.TemurinJRE.11 11.0.16.8 Tag: openjdk winget
Liberica JDK 8 Full BellSoft.LibericaJDK.8.Full 8.0.342.7 Tag: openjdk winget
Liberica JDK 8 BellSoft.LibericaJDK.8 8.0.342.7 Tag: openjdk winget
Liberica JDK 18 Full BellSoft.LibericaJDK.18.Full 18.0.2.10 Tag: openjdk winget
Liberica JDK 18 BellSoft.LibericaJDK.18 18.0.2.10 Tag: openjdk winget
Liberica JDK 17 Full BellSoft.LibericaJDK.17.Full 17.0.4.8 Tag: openjdk winget
Liberica JDK 17 BellSoft.LibericaJDK.17 17.0.4.8 Tag: openjdk winget
Liberica JDK 16 Full BellSoft.LibericaJDK.16.Full 16.0.2.7 Tag: openjdk winget
Liberica JDK 16 BellSoft.LibericaJDK.16 16.0.2.7 Tag: openjdk winget
Liberica JDK 15 Full BellSoft.LibericaJDK.15.Full 15.0.2.10 Tag: openjdk winget
Liberica JDK 15 BellSoft.LibericaJDK.15 15.0.2.10 Tag: openjdk winget
Liberica JDK 14 Full BellSoft.LibericaJDK.14.Full 14.0.2.13 Tag: openjdk winget
Liberica JDK 14 BellSoft.LibericaJDK.14 14.0.2.13 Tag: openjdk winget
Liberica JDK 11 Full BellSoft.LibericaJDK.11.Full 11.0.16.8 Tag: openjdk winget
Liberica JDK 11 BellSoft.LibericaJDK.11 11.0.16.8 Tag: openjdk winget
Azul Zulu JDK 7 Azul.Zulu.7 7.56.0.11 Tag: openjdk winget
Azul Zulu JDK 6 Azul.Zulu.6 6.22.0.3 Tag: openjdk winget
AdoptOpenJDK JDK with Hotspot 8 AdoptOpenJDK.OpenJDK.8 8.0.292.10 Tag: openjdk winget
AdoptOpenJDK JDK with Hotspot 16 AdoptOpenJDK.OpenJDK.16 16.0.1.9 Tag: openjdk winget
AdoptOpenJDK JDK with Hotspot 15 AdoptOpenJDK.OpenJDK.15 15.0.2.7 Tag: openjdk winget
AdoptOpenJDK JDK with Hotspot 14 AdoptOpenJDK.OpenJDK.14 14.0.2.12 Tag: openjdk winget
AdoptOpenJDK JDK with Hotspot 11 AdoptOpenJDK.OpenJDK.11 11.0.11.9 Tag: openjdk winget
Eclipse Temurin JDK with Hotspot 8 EclipseAdoptium.Temurin.8.JDK 8.0.332.9 Tag: openjdk winget
Eclipse Temurin JDK with Hotspot 11 EclipseAdoptium.Temurin.11.JDK 11.0.16.8 Tag: openjdk winget
Azul Zulu JDK 17 Azul.Zulu.17.JDK 17.36.15 Tag: openjdk winget
Eclipse Temurin JDK with Hotspot 20 (Beta) EclipseAdoptium.Temurin.20.JDK 20.0.0.5 Tag: openjdk winget
Eclipse Temurin JDK with Hotspot 19 (Beta) EclipseAdoptium.Temurin.19.JDK 19.0.0.30 Tag: openjdk winget
Eclipse Temurin JDK with Hotspot 18 EclipseAdoptium.Temurin.18.JDK 18.0.2.9 Tag: openjdk winget
Eclipse Temurin JDK with Hotspot 17 EclipseAdoptium.Temurin.17.JDK 17.0.4.8 Tag: openjdk winget
Eclipse Temurin JDK with Hotspot 16 EclipseAdoptium.Temurin.16.JDK 16.0.2.7 Tag: openjdk winget
Azul Zulu JDK 18 Azul.Zulu.18.JDK 18.32.11 Tag: openjdk winget
Azul Zulu JDK 16 Azul.Zulu.16.JDK 16.32.15 Tag: openjdk winget
Azul Zulu JDK 15 Azul.Zulu.15.JDK 15.42.15 Tag: openjdk winget
Azul Zulu JDK 13 Azul.Zulu.13.JDK 13.50.15 Tag: openjdk winget
Azul Zulu JDK 11 Azul.Zulu.11.JDK 11.58.17 Tag: openjdk winget
Azul Zulu JDK 8 Azul.Zulu.8.JDK 8.64.0.15 Tag: openjdk winget
OpenJDK 14 ojdkbuild.openjdk.14.jdk 14.0.1.1 winget
OpenJDK 13 ojdkbuild.openjdk.13.jdk 13.0.3.1 winget
AdoptOpenJDK JDK with Eclipse OpenJ9 17 AdoptOpenJDK.OpenJDK.17 17.0.0.18 winget
Update Watcher for AdoptOpenJDK tushev.org.AJUpdateWatcher 2.0.4.0 winget

oracle官网下载Java压缩包

Java8:Java SE Development Kit 8 Downloads

![image-20230404181515372](安装和切换多版本java (linux篇)/image-20230404181515372.png)

注册登录后即可获得下载链接,这里注意自己的系统是arm64还是amd64

也可使用ZuluJDK(一个OpenJDK的发行版本)

我arm64架构的系统试过安装多个这种版本的openjdk,会报错,所以我重新选择了oracle的jdk

1
root@ubuntu:~#wget https://cdn.azul.com/zulu/bin/zulu8.66.0.15-ca-jdk8.0.352-linux_x64.tar.gz

2.1创建一个存放源码包的目录并解压

1
2
3
4
root@ubuntu:~#mkdir /usr/local/JDK
root@ubuntu:~#cd /usr/local/JDK
root@ubuntu:~#tar -xvf jdk-8u361-linux-i586.tar.gz -C /usr/local/JDK
root@ubuntu:~# mv jdk1.8.0_361 jdk8

3.配置环境

3.1添加环境变量的两种方法:

适用于centos,ubuntu

1)vim /etc/profile

  • 推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,缺点是可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的shell;
1
2
3
vim /etc/profile
# 使用source命令使修改立刻生效:
source /etc/profile

2)vi ~/.bashrc

修改.bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果需要给某个用户权限
使用这些环境变量,只需要修改其个人用户主目录下的.bashrc文件就可以了。

1
2
3
vi ~/.bashrc

source ~/.bashrc

3.2添加java环境变量

我用的是vi ~/.bashrc

1
2
3
4
5
6
7
8
9
10
11
12
root@ubuntu:~#vim ~/.bashrc

#然后在文本末端,加上这么几句
JAVA_HOME=/usr/local/JDK/jdk8 #安装java的路径,路径一定要对
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin/
export PATH JAVA_HOME CLASSSPATH


root@ubuntu:~#source ~/.bashrc

#执行java -version或java --version,到Java的版本号就成功了

4.切换java版本

  • 用包管理安装可能不是很全,没有自己需要的java版本,管理也不方便,所以一般都是用源码包方式来安装的多个版本的java

  • 不管理只使用的话也可以直接用包管理安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    root@Debian:~# apt search openjdk
    #比如我安装11和17
    root@Debian:~# apt install openjdk-11-jdk -y && apt install openjdk-17-jdk -y
    root@Debian:~# which java
    /usr/bin/java
    root@Debian:~# ls -l /usr/bin/java
    lrwxrwxrwx 1 root root 22 May 17 17:27 /usr/bin/java -> /etc/alternatives/java
    root@Debian:~# ls -l /etc/alternatives/java
    lrwxrwxrwx 1 root root 43 May 17 17:27 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java

    #用apt安装的不需要用update-alternatives --install 来添加链接,因为它自己会自动添加的
    root@Debian:~# update-alternatives --display java
    java - auto mode
    link best version is /usr/lib/jvm/java-17-openjdk-amd64/bin/java
    link currently points to /usr/lib/jvm/java-17-openjdk-amd64/bin/java
    link java is /usr/bin/java
    slave java.1.gz is /usr/share/man/man1/java.1.gz
    /usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1111
    slave java.1.gz: /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
    /usr/lib/jvm/java-17-openjdk-amd64/bin/java - priority 1711
    slave java.1.gz: /usr/lib/jvm/java-17-openjdk-amd64/man/man1/java.1.gz

    #切换java
    root@Debian:~# update-alternatives --config java

alternatives命令介绍

当我们频繁使用java的不同版本,不可能采用卸载java后在重新安装需要用的java的版本的方法,这时我们可以用到alternatives命令。

alternatives是Linux下的一个功能强大的命令。只能在root权限下执行。如系统中有几个命令功能十分类似,却又不能随意删除,那么可以用 alternatives 来指定一个全局的设置。
alternatives常用于同一个系统中安装同一软件的多个版本。比如为了开发需要,我需要安装JDK16,同时还需要JDK8,我怎么样才能忽略安装路径,按照我自己的意思,使用我想要的java版本呢?
命令格式:
update-alternatives [options] command

1
2
3
4
5
6
7
8
9
10
update-alternatives
用法:alternatives --install <链接> <名称> <路径> <优先度>
[--initscript <服务>]
[--slave <链接> <名称> <路径>]*
alternatives --remove <名称> <路径>
alternatives --auto <名称>
alternatives --config <名称>
alternatives --display <名称>
alternatives --set <名称> <路径>
alternatives --list

4.1使用方法

通过以下指令来看我们安装了多少openJDK

我的用到ubuntu,centos命令则把apt改为yum

1
root@ubuntu:~#apt list installed | grep jdk

在这里我又下载了一个jdk17,解压放到了/usr/local/JDK/目录下

先修改添加的java环境变量,修改为

1
2
3
4
5
#在这里添加你想切换的jdk版本,例如我在8和17之间切换,如需更多版本则将路径添加到JAVA_HOME中(冒号添加路径)
JAVA_HOME=/usr/local/JDK/jdk8:/usr/local/JDK/jdk17
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin/
export PATH JAVA_HOME CLASSSPATH

使配置生效

1
root@ubuntu:~# source ~/.bashrc

然后用update-alternatives –install 命令

1
2
3
4
5
6
7
8
root@ubuntu:~#update-alternatives --install /usr/bin/java java /usr/local/JDK/jdk8/bin/java 8

root@ubuntu:~#update-alternatives --install /usr/bin/javac javac /usr/local/JDK/jdk8/bin/javac 8

root@ubuntu:~#update-alternatives --install /usr/bin/java java /usr/local/JDK/jdk17/bin/java 17

root@ubuntu:~#update-alternatives --install /usr/bin/javac javac /usr/local/JDK/jdk17/bin/javac 17

–install 选项

使用语法:
update-alternatives –install link name path priority [–slave link name path]…
其中link为系统中功能相同软件的 公共链接目录,比如/usr/bin/java(需绝对目录);

name为命令链接符名称,如java;

path为你所要使用新命令、新软件的所在目录;

priority为优先级, 当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;

–slave为从alternative。

alternative有两种模式:auto和manual,默认都为auto模式,因为大多数情况下update-alternatives命令都被postinst (configure) or prerm (install)调用的,如果将其更改成手动的话安装脚本将不会更新它了。

切换java版本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@ubuntu:~# update-alternatives --config java   #java是我设置的链接符名称
There are 2 choices for the alternative java (providing /usr/bin/java).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/local/JDK/jdk17/bin/java 17 auto mode
1 /usr/local/JDK/jdk8/bin/java 8 manual mode
2 /usr/local/JDK/jdk17/bin/java 17 manual mode


Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/local/JDK/jdk8 to provide /usr/local/JDK/ (java) in manual mode
update-alternatives: warning: not replacing /usr/local/JDK/ with a link
root@ubuntu:~# java -version
java version "1.8.0_361"
Java(TM) SE Runtime Environment (build 1.8.0_361-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)

5.切换其它的环境(例如python)

其实切换其它的依赖环境也是可以的,例如debian内置python2和python3,我的默认使用python2,然后切换成python3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
root@orangepi5:~# whereis python2
python2: /usr/bin/python2.7 /usr/bin/python2 /usr/lib/python2.7 /etc/python2.7 /usr/local/lib/python2.7 /usr/share/man/man1/python2.1.gz
root@orangepi5:~# whereis python3
python3: /usr/bin/python3.9-config /usr/bin/python3 /usr/bin/python3.9 /usr/lib/aarch64-linux-gnu/python3.9 /usr/lib/python3 /usr/lib/python3.9 /etc/python3 /etc/python3.9 /usr/local/lib/python3.9 /usr/include/python3.9 /usr/share/python3 /usr/share/man/man1/python3.1.gz


root@orangepi5:~# update-alternatives --install /usr/bin/python python /usr/bin/python2 100
root@orangepi5:~# update-alternatives --install /usr/bin/python python /usr/bin/python3 150
root@orangepi5:~# update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3 150 auto mode
1 /usr/bin/python2 100 manual mode
2 /usr/bin/python3 150 manual mode

Press <enter> to keep the current choice[*], or type selection number: 2


root@orangepi5:~# python --version

6.centos7中安装python3后使用yum命令报错解决办法

1
vi /usr/bin/yum

把第一行#! /usr/bin/python后面的python改成 python2保存退出

1
vi /usr/libexec/urlgrabber-ext-down

同样把第一行#! /usr/bin/python后面的python改成 python2保存退出

介绍

几种通过自己服务器实现内网穿透的教程

基于Docker的FRP内网穿透部署

服务器搭建(FRPS)

创建配置文件

1
2
3
4
# 创建存放目录
sudo mkdir /etc/frp
# 创建frps.ini文件
nano /etc/frp/frps.ini

frps.ini内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板账号设置
dashboard_user = admin
dashboard_pwd = spoto1234
# 设置http及https协议下代理端口(非重要)
vhost_http_port = 7080
vhost_https_port = 7081


# 身份验证
token = 12345678
1
2
3
4
5
6
#服务器镜像:snowdreamtech/frps
#重启:always
#网络模式:host
#文件映射:/etc/frp/frps.ini:/etc/frp/frps.ini

docker run --restart=always --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

中转客户端配置(FRPC)

1
2
3
4
5
6
服务器镜像:snowdreamtech/frpc
重启:always
网络模式:host
文件映射:/路径/frp/:/etc/frp/

docker run --restart=always --network host -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc

配置文件示例:

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
[common]
# server_addr为FRPS服务器IP地址
server_addr = x.x.x.x
# server_port为服务端监听端口,bind_port
server_port = 7000
# 身份验证
token = 12345678

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2288

# [ssh] 为服务名称,下方此处设置为,访问frp服务段的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
# type 为连接的类型,此处为tcp
# local_ip 为中转客户端实际访问的IP
# local_port 为目标端口
# remote_port 为远程端口

[ssh]
type = tcp
local_ip = 192.168.1.229
local_port = 80
remote_port = 18022

[unRAID web]
type = tcp
local_ip = 192.168.1.229
local_port = 80
remote_port = 18088

[Truenas web]
type = tcp
local_ip = 192.168.1.235
local_port = 80
remote_port = 18188

[speedtest]
type = tcp
local_ip = 192.168.1.229
local_port = 6580
remote_port = 18190


[webdav]
type = tcp
local_ip = 192.168.1.235
local_port = 18080
remote_port = 18189

[RDP PC1]
type = tcp
local_ip = 192.168.1.235
local_port = 3389
remote_port = 18389
  • 如果监听服务可以有IP限制的设置,需要允许的访问IP为中转内网设备的内网IP;
  • FRP由于端口会暴露在互联网上,虽然说使用方便但安全性较差;

基于Zerotier根服务器的内网穿透部署

创建(伪)根服务器 | 项目地址:https://github.com/Jonnyan404/zerotier-planet

1
docker run --restart=on-failure:3 -d --name ztncui -e HTTP_PORT=4000 -e HTTP_ALL_INTERFACES=yes -e ZTNCUI_PASSWD=mrdoc.fun -p 4000:4000 keynetworks/ztncui

创建 moon 服务器 | 项目地址:https://github.com/jonnyan404/docker-zerotier-moon

1
2
3
4
5
#创建容器
docker run --name zerotier-moon -d -p 9993:9993 -p 9993:9993/udp -v /etc/ztconf/:/var/lib/zerotier-one jonnyan404/zerotier-moon -4 [公网ipx.x.x.x]

#查看moon ID
docker logs zerotier-moon

群晖 DSM 7.x 安装Zerotier客户端

登录SSH并创建虚拟网络设备TUN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#获取权限
sudo -i

#创建“创建虚拟网络设备TUN”的脚本,并设为开机自动运行
echo -e '#!/bin/sh -e \ninsmod /lib/modules/tun.ko' > /usr/local/etc/rc.d/tun.sh

#给予脚本运行权限
chmod a+x /usr/local/etc/rc.d/tun.sh

#运行脚本创建TUN
/usr/local/etc/rc.d/tun.sh

#确认TUN是否创建成功
ls /dev/net/tun

创建存放配置文件的目录

1
mkdir /var/lib/zerotier-one

创建Zerotier应用容器:

1
2
3
4
5
6
7
8
docker run -d           \
--name zt \
--restart=always \
--device=/dev/net/tun \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
-v /var/lib/zerotier-one:/var/lib/zerotier-one zerotier/zerotier-synology:latest

常用命令:

1
2
3
4
5
#查看zerotier状态
docker exec -it zt zerotier-cli status

#加入网络
docker exec -it zt zerotier-cli join [xxxxxxxxxxxx]
1
2
3
4
#加入moon服务器
docker exec zt zerotier-cli orbit [moon_ID] [moon_ID]
#确认是否加入
docker exec zt zerotier-cli listpeers

Windows 客户端加入moon服务器

1
2
cd C:\ProgramData\ZeroTier\One
zerotier-cli orbit [moon_id] [moon_id]

介绍

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页,这边就教大家怎么搭建Hexo并配置。大家可以参考Hexo官方文档配合使用。

安装前提

安装 Hexo 相当简单,只需要先安装下列应用程序即可:

  • Node.js (Node.js 版本需不低于 10.13,建议使用 Node.js 12.0 及以上版本)
  • Git

随着大前端的快速发展,node版本更新很快,我们在工作中,可以会有老版本的node的项目需要维护,也可能有新版本的node的项目需要开发,如果我们只有一个node版本的话将会很麻烦,nvm 应运而生,nvm 是 Mac 下的 node 管理工具,有点类似管理 Ruby 的 rvm,如果需要管理 Windows 下的 node,官方推荐使用 nvmwnvm-windows。不过,nvm-windows 并不是 nvm 的简单移植,他们也没有任何关系。但下面介绍的所有命令,都可以在 nvm-windows 中运行,nvm是node的版本管理器,可以方便地安装&切换不同版本的node

安装NVM

进入NVM-Windows项目发布地址: https://github.com/coreybutler/nvm-windows/releases ,选择最新发行版本nvm-setup.zip下载:

20210531232213538

安装需要注意两点

1、 把电脑上面的node环境先卸载干净(C:\Users\用户名\AppData\Roaming\node下面的文件也要解决干净)

2、 安装时,建议选择手动安装版,然后疯狂下一步就行,不要尝试改变安装目录。

如果不想放在C盘,例如放在D盘,安装路径是这样的:

第一步:D:/你想放的文件夹名

第二步:D:/你想放的文件夹名(最好不要中文名)/nodejs

检查安装是否成功

在搜索栏查找poweshell,选中x86powershell鼠标右击选择以管理员身份运行image-20221127134846193

Powershell下,输入NVM,即可发现安装完成:

配置国内源

到你NVM安装路径,*打开setting.txt文件(如果没有,则创建即可),更改为:

1
2
3
4
5
6
root: D:\NVM
path: D:\NVM\nodejs
arch: 64
proxy: none
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

解释参数:

  • root:NVM的安装地址。即上文的%NVM_HOME%
  • path:激活node.js时的存储路径,即上文的%NVM_SYMLINK%
  • arch:系统架构,如果你的Windwos不是x64,则填32
  • proxy:是否走代理
  • node_mirror:node.js的下载源,这里使用的是淘宝源
  • npm_mirror:npm的下载源,这里使用的是淘宝源

image-20230331220734968

使用NVM

在cmd或pwoershell使用命令

1
nvm list available

image-20220710002047715

1
2
3
4
5
6
7
8
9
10
2、安装方式 nvm install 版本号
current:当前最新的版本
LTS:稳定版本

nvm install 19.8.1 (当前稳定的最新版)

我安装了两个
nvm install 18.13.0
nvm install 16.15.1
使用nvm ls 或者 nvm list可以查看安装的不同node版本,*指向的就是当前版本

激活Node.js版本

我们安装好Node.js以后,需要激活它

1
2

nvm use 16.15.1

安装Git

无脑下一步!!!Git的官网地址

安装hexo

先在NVM安装目录内建立2个目录node_cache和node_global

image-20230331224443212

输入下面命令

1
2
npm config set prefix "D:\NVM\node_global"
npm config set cache "D:\NVM\node_cache"

更换源

1
npm config set registry=http://registry.npm.taobao.org 

所有必备的应用程序安装完成后,即可使用 npm 安装 Hexo。

使用Npm安装Hexo

1
npm install -g hexo-cli

如报错,更新一下npm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
npm install -g npm-windows-upgrade


set-ExecutionPolicy RemoteSigned

执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): y


npm-windows-upgrade
npm-windows-upgrade v6.0.1
? Which version do you want to install? 8.13.2
Checked system for npm installation:
According to PowerShell: D:\nodejs
According to npm: D:\nodejs
Decided that npm is installed in D:\nodejs
Upgrading npm... |

Upgrade finished. Your new npm version is 8.13.2. Have a nice day!

安装好以后,测试一下:

1
hexo

没有出现未知命令,说明安装成功。可以接下来操作了。

如果出现hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micros oft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1。

那是因为你用的是win11系统,你需要在设置->隐私和安全性->开发者选项->允许本地powershell脚本在为签名的情况下运行image-20230308210045396

应用之后,重新打开新的powershell,再次输入hexo即可。

创建hexo

创建你的博客的空白文件夹,然后打开文件夹,我们已经安装好Git,所以我们直接是由鼠标右键的Git Bash Here

image-20220710233249939

在博客目录内初始化博客

初始化目录:

1
2
# 进目录之后,在Git bash里面输入下面目录初始化
hexo init

初始化后回生成许多文件

image-20230331230347045

输入命令后,它会自动爬取hexo的初始化目录,在国内网络是非常不好的,如果出错需要删除目录内容重新执行命令直到成功。

构建hexo

初始化Hexo后,其实Hexo就可以使用了;构建Hexo:

1
2

hexo g

启动Hexo内建服务器

其实,整个public文件就是一个博客了,但是我们还要部署Nginx等网络环境或者使用HBuilderX等根据,启动Web服务器才能用浏览器本地IP(即:127.0.0.1localhost)加端口进行访问;为了减少麻烦,可以使用Hexo内建服务器:

1
2

hexo s

image-20220710234306097

我们可以去127.0.0.1:4000网址看看初始化页面的样子image-20220710234335015

部署Hexo到github

上述操作,我们已经把Hexo部署在本地;接下来,我们来看看怎么部署到远程平台,部署到远程平台后,公网用户就可以访问了(也就是可以让你小伙伴通过浏览器访问到你的博客)。

创建github仓库

image-20230407151939650

需要注意的是作为网站访问的这个仓库,仓库名称一定是,拥有者名+github.io

生成ssh keys

在博客文件夹根目录下,右键,调用git bash here功能

输入命令,本地生成ssh keys ,有回车按回车,有(y/n)?就输入y

1
ssh-keygen -t ed25519 -C "your_email@example.com"

注意:如果你使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:

1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

出现这个则生成成功

image-20230407152653491

在电脑打开生成公钥的文件夹

路径:C:/用户/你的用户名/.ssh

找到后打开id_rsa.pub(默认记事本打开),复制公钥(ctrl+A全选, ctrl+C复制)

打开github,头像箭头,下拉选项setting(设置)-SSH与GPG keys -new ssh keys(新建ssh秘钥)

tilte随便起,然后ctrl+V粘贴到key里面

image-20230416135608274

测试是否绑定成功

1
ssh -T git@github.com

image-20230416134842427

yes,然后按回车

出现successfully字样则绑定成功

上传博客到github仓库

修改配置文件

在创建博客文件夹的根目录下修改-config.yml文件

image-20230407163241369

输入时注意冒号后面有空格,然后保存退出

安装hexo-deployer-git

1
2
3
#注意这些插件是安装在博客目录内的,所以是跟随博客内容一起走的
#这个插件是提供上传git能力
npm install hexo-deployer-git --save

因为github在国外,有些时候推送会出现ssl出错,其实就是网络差,我们在Git Bash里面输入下面这行命令,不验证ssl:

1
git config --global http.sslVerify "false"

博客推送

在博客目录下命令窗口/终端输入

1
2
3
4
5
6
7
8
9
#配置git push的信息
git config --global user.email "your_email"
git config --global user.name "your_name"

#查看和检查配置的信息
git config --list

# hexo d就是推送博客到指定的地方(本博客推送的地方是Github)
hexo cl && hexo g && hexo d

博客主题

打开hexo的主题网站

image-20230508003429447

比如打开Ayer这款主题,打开后能看到主题的效果

image-20230508003515559

一般在博客主题内会有github的项目链接或者安装和使用的指南

image-20230508003741044

打开github项目有下面有个README.md的安装教程,其安装步骤我就不一一展示了,按教程来有手就行[doge]

image-20230508003943456

解决图片不显示问题

更改hexo配置文件

1
vim _config.yml #配置_config.yml里面的post_asset_folder:false 设置为 true 如图

031161b88a660fd50ecc872d942c43fa

安装npm插件

1
npm install https://github.com/CodeFalling/hexo-asset-image --save

修改Typora设置

打开文件菜单的偏好设置

image-20240514232927394

打开图像选项,设置如下图

image-20240514233130356

0%