linux中常用shell脚本整理

linux常见shell脚本整理

备份日志

#!/bin/bash  
# 每日创建新的备份日志-根据日期备份
tar  -czf  log-`date +%Y%m%d`.tar.gz  /var/log  
# 通过crontab 每日定时启动
00  03  *  *  5  /root/logbak.sh  

监控内存和磁盘容量,小于给定值时报警

#!/bin/bash  # 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员  # 提取根分区剩余空间  
disk_size=$(df / | awk '/\//{print $4}')  # 提取内存剩余空间  
mem_size=$(free | awk '/Mem/{print $4}')  
while :  
do  
# 注意内存和磁盘提取的空间大小都是以 Kb 为单位  
if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]  
then  mail  ‐s  "Warning"  root  <<EOF  Insufficient resources,资源不足  
EOF  
fi  
done  

监控网段中的主机状态

#!/bin/bash  myping(){  
ping ‐c 2 ‐i 0.3 ‐W 1 $1  &>/dev/null  
if  [ $? -eq 0 ];then  echo "$1 is up"  
else  echo "$1 is down"  
fi  
}  
for i in {1..254}  
do  myping 192.168.4.$i &  
done    

根据文件创建用户名密码

#!/bin/bash  for i in `cat user.txt`  
do  useradd  $i  echo "123456" | passwd ‐‐stdin $i  
done  

查看连接本机的Ip

#!/bin/bash 
netstat -atn  |  awk  '{print $5}'  | awk  '{print $1}' | sort -nr  |  uniq -c 

统计时间段内访问量

#!/bin/bash 
# 统计时间段内的访问量 
awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"' /var/log/httpd/access_log |wc -l 
# 统计时间段内的访问Ip
awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"{print $1}' /var/log/httpd/access_log  

Nginx启动脚本

#!/bin/bash  program=/usr/local/nginx/sbin/nginx  
pid=/usr/local/nginx/logs/nginx.pid  
start(){  
if [ -f $pid ];then  echo  "nginx 服务已经处于开启状态"  
else  $program  
fi  
stop(){  
if [ -! -f $pid ];then  echo "nginx 服务已经关闭"  
else  $program -s stop  echo "关闭服务 ok"  
fi  
}  
status(){  
if [ -f $pid ];then  echo "服务正在运行..."  
else  echo "服务已经关闭"  
fi  
}  case $1 in  
start)  start;;  
stop)  stop;;  
restart)  stop  sleep 1  start;;  
status)  status;; 
*)  echo  "你输入的语法格式错误"  
esac  

自动切割nginx日志文件

#mkdir  /data/scripts  
#vim   /data/scripts/nginx_log.sh    
#!/bin/bash  # 切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)   
logs_path="/usr/local/nginx/logs/"  
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log  
kill -USR1  `cat /usr/local/nginx/logs/nginx.pid`  # chmod +x  /data/scripts/nginx_log.sh  
# crontab  ‐e                    #脚本写完后,将脚本放入计划任务每天执行一次脚本  
0  1  *  *   *   /data/scripts/nginx_log.sh 

检测Mysql数据库连接数量

#!/bin/bash  # 检测 MySQL 数据库连接数量   # 本脚本每 2 秒检测一次 MySQL 并发连接数,可以将本脚本设置为开机启动脚本,或在特定时间段执行  
# 以满足对 MySQL 数据库的监控需求,查看 MySQL 连接是否正常  
# 本案例中的用户名和密码需要根据实际情况修改后方可使用  
log_file=/var/log/mysql_count.log  
user=root  
passwd=123456  
while :  
do  sleep 2  count=`mysqladmin  -u  "$user"  -p  "$passwd"   status |  awk '{print $4}'`  echo "`date +%Y‐%m‐%d` 并发连接数为:$count" >> $log_file  
done  

检测mysql服务是否存活

#!/bin/bash  # 检测 MySQL 服务是否存活   # host 为你需要检测的 MySQL 主机的 IP 地址,user 为 MySQL 账户名,passwd 为密码  
# 这些信息需要根据实际情况修改后方可使用  
host=192.168.51.198  
user=root  
passwd=123456  
mysqladmin -h '$host' -u '$user' -p'$passwd' ping &>/dev/null  
if [ $? -eq 0 ]  
then  echo "MySQL is UP"  
else  echo "MySQL is down"  
fi

备份Mysql

#!/bin/bash  # 备份 MySQL 的 shell 脚本(mysqldump版本)   # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签)  
# dbname(需要备份的数据库名称,根据实际需求需要修改该变量的值,默认备份 mysql 数据库)  user=root  
passwd=123456  
dbname=mysql  
date=$(date +%Y%m%d)  # 测试备份目录是否存在,不存在则自动创建该目录  
[ ! -d /mysqlbackup ] && mkdir /mysqlbackup  
# 使用 mysqldump 命令备份数据库  
mysqldump -u "$user" -p "$passwd" "$dbname" > /mysqlbackup/"$dbname"-${date}.sql  

根据md5校验码,检测文件是否修改

#!/bin/bash  # 根据 md5 校验码,检测文件是否被修改   
# 本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件  
# 本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次  
# 将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件  
for i in $(ls /etc/*.conf)  
do  md5sum "$i" >> /var/log/conf_file.log  
done  

非交互生成ssh秘钥文件

#!/bin/bash  # 非交互自动生成 SSH 密钥文件   
# ‐t 指定 SSH 密钥的算法为 RSA 算法;‐N 设置密钥的密码为空;‐f 指定生成的密钥文件>存放在哪里  
rm  -rf  ~/.ssh/{known_hosts,id_rsa*}  
ssh‐keygen -t RSA -N '' -f ~/.ssh/id_rsa

监控http服务器状态

#!/bin/bash  # 监控 HTTP 服务器的状态(测试返回码)  # 设置变量,url为你需要检测的目标网站的网址(IP 或域名),比如百度  
url=http://http://183.232.231.172/index.html  # 定义函数 check_http:  
# 使用 curl 命令检查 http 服务器的状态  
# ‐m 设置curl不管访问成功或失败,最大消耗的时间为 5 秒,5 秒连接服务为相应则视为无法连接  
# ‐s 设置静默连接,不显示连接时的连接速度、时间消耗等信息  
# ‐o 将 curl 下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)  
# ‐w 设置curl命令需要显示的内容%{http_code},指定curl返回服务器的状态码  
check_http()  
{  status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)  
}  while :  
do  check_http  date=$(date +%Y%m%d‐%H:%M:%S)  # 生成报警邮件的内容  echo "当前时间为:$date  $url 服务器异常,状态码为${status_code}.  请尽快排查异常." > /tmp/http$$.pid  # 指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志  if [ $status_code -ne 200 ];then  mail -s Warning root < /tmp/http$$.pid  else  echo "$url 连接正常" >> /var/log/http.log  fi  sleep 5  
done  

删除目录下大小为0的文件

#!/bin/bash  
# 删除某个目录下大小为 0 的文件  
#/var/www/html 为测试目录,脚本会清空该目录下所有 0 字节的文件  
dir="/var/www/html"  
find $dir -type f -size 0 -exec rm -rf {} \;  

查找linux系统中的僵尸进程

#!/bin/bash  # 查找 Linux 系统中的僵尸进程  
# awk 判断 ps 命令输出的第 8 列为 Z 是,显示该进程的 PID 和进程命令  
ps aux | awk '{if($8 == "Z"){print $2,$11}}'

生成随机密码

#!/bin/bash  # 生成随机密码(urandom 版本)   
tr -dc '_A‐Za‐z0‐9' </dev/urandom | head -c 10  ## 

生成随机密码(指定字符串)

# 生成随机密码(字串截取版本)   # 设置变量 key,存储密码的所有可能性(密码库),如果还需要其他字符请自行添加其他密码字符  
# 使用$#统计密码库的长度  
key="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"  
num=${#key}  
# 设置初始密码为空  
pass=''  
# 循环 8 次,生成随机密码  
# 每次都是随机数对密码库的长度取余,确保提取的密码字符不超过密码库的长度  
# 每次循环提取一位随机密码,并将该随机密码追加到 pass 变量的最后  
for i in {1..8}  
do    index=$[RANDOM%num]  pass=$pass${key:$index:1}  
done  
echo $pass  

获取本地的一些信息

#!/bin/bash  # 获取本机 MAC 地址  
ip a s | awk 'BEGIN{print  " 本 机 MAC 地 址 信 息 如 下 :"}/^[0‐9]/{print $2;getline;if($0~/link\/ether/){print $2}}' | grep -v lo:  ## 显示本机系统上所有开放的端口列表
ss -nutlp | awk '{print $1,$5}' | awk -F"[: ]" '{print "协议:"$1,"端口号:"$NF}' | grep "[0‐9]" | uniq  

修改linux系统最大打开文件数量

#!/bin/bash  # 修改 Linux 系统的最大打开文件数量   # 往/etc/security/limits.conf 文件的末尾追加两行配置参数,修改最大打开文件数量为 65536  
cat >> /etc/security/limits.conf <<EOF  
* soft nofile  65536  
* hard nofile  65536  
EOF  

一次部署memcache

#!/bin/bash  # 一键部署 memcached   
# 脚本用源码来安装 memcached 服务器  
# 注意:如果软件的下载链接过期了,请更新 memcached 的下载链接  
wget http://www.memcached.org/files/memcached-1.5.1.tar.gz  
yum -y install gcc  
tar -xf  memcached‐1.5.1.tar.gz  
cd memcached‐1.5.1  
./configure  
make  
make install  

打印各种格式的时间

  
echo "显示星期简称(如:Sun)"  
date +%a  
echo "显示星期全称(如:Sunday)"  
date +%A  
echo "显示月份简称(如:Jan)"  
date +%b  
echo "显示月份全称(如:January)"  
date +%B  
echo "显示数字月份(如:12)"  
date +%m  
echo "显示数字日期(如:01 号)"  
date +%d  
echo "显示数字年(如:01 号)"  
date +%Y echo "显示年‐月‐日"  
date +%F  
echo "显示小时(24 小时制)"  
date +%H  
echo "显示分钟(00..59)"  
date +%M  
echo "显示秒"  
date +%S  
echo "显示纳秒"  
date +%N  
echo "组合显示"  
date +"%Y%m%d %H:%M:%S"  

生成签名秘钥和证书

read -p "请输入存放证书的目录:" dir  
if [ ! -d $dir ];then  echo "该目录不存在"  exit  
fi  
read -p "请输入密钥名称:" name  
# 使用 openssl 生成私钥  
openssl genrsa -out ${dir}/${name}.key  
# 使用 openssl 生成证书 #subj 选项可以在生成证书时,非交互自动填写 Common Name 信息  
openssl req -new -x509 -key ${dir}/${name}.key -subj "/CN=common" -out ${dir}/${name}.crt  

定时启动Python程序

  • 需要保证job.py文件可执行
  • chmod u+x /root/s1.sh 保证sh文件的执行权限
  • crontab -e 编辑定时任务
    • */1 * * * * /root/s1.sh # 设置每分钟执行一次
#!/bin/bash
python3 /root/job.py
echo 'Python脚本执行成功,时间:' >> /root/log
date >> /root/log

开启和关闭jar操作

  • jar包名称为 uid-consumer-1.1.0-SNAPSHOT.jar
#!/bin/sh# 该脚本为Linux下启动java程序的脚本
# 特别注意:
# 该脚本使用系统kill命令来强制终止指定的java程序进程。
# 所以在杀死进程前,可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,
# 根据实际情况来修改以下配置信息 ################################### JAVA应用程序的名称
APP_NAME=uid-consumer
# JAVA应用程序端口号
SERVER_PORT=9999
# jar包存放路径
JAR_PATH='/app/uid-consumer'
# jar包名称
JAR_NAME=uid-consumer-1.1.0-SNAPSHOT.jar
# PID 代表是PID文件
JAR_PID=$JAR_NAME\.pid
# 日志输出文件
LOG_FILE=logs# java虚拟机启动参数
JAVA_OPTS="-Xms512m -Xmx512m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:ParallelGCThreads=4 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8"# 根据实际情况来修改以上配置信息 ################################### 检查程序是否处于运行状态
is_exist() {# 查询出应用服务的进程id,grep -v 是反向查询的意思,查找除了grep操作的run.jar的进程之外的所有进程pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `# [ ]表示条件测试。注意这里的空格很重要。要注意在'['后面和']'前面都必须要有空格# [ -z STRING ] 如果STRING的长度为零则返回为真,即空是真# 如果不存在返回0,存在返回1if [ -z "${pid}" ]; thenreturn 0elsereturn 1fi
}# ######### Shell脚本中$0、$?、$!、$$、$*、$#、$@等的说明 ########## $$ Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
# $! Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
# $? 最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
# $- 显示shell使用的当前选项,与set命令功能相同
# $* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。
# $@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
# $# 添加到Shell的参数个数
# $0 Shell本身的文件名
# $1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。# 服务启动方法
start() {is_existif [ $? -eq "1" ]; thenecho "$APP_NAME is already running pid is ${pid}"else# jar服务启动脚本nohup java $JAVA_OPTS -Xloggc:$LOG_FILE/gc/gclog.log -XX:HeapDumpPath=$LOG_FILE/gc/HeapDump.hprof -jar $JAR_PATH/$JAR_NAME >./$LOG_FILE/run.log 2>&1 &echo $! > $JAR_PIDecho "start $APP_NAME successed pid is $! "tail -1000f $LOG_FILE/run.logfi}# 服务停止方法
stop() {# is_existpidf=$(cat $JAR_PID)# echo "$pidf" echo "pid = $pidf begin kill $pidf"kill $pidfrm -rf $JAR_PIDsleep 2# 判断服务进程是否存在is_existif [ $? -eq "1" ]; thenecho "pid = $pid begin kill -9 $pid"kill -9  $pidsleep 2echo "$APP_NAME process stopped!" elseecho "$APP_NAME is not running!"fi 
}# 服务运行状态查看方法
status() {is_existif [ $? -eq "1" ]; thenecho "$APP_NAME is running,pid is ${pid}"elseecho "$APP_NAME is not running!"fi
}# 重启服务方法
restart() {# 调用服务停止命令stop# 调用服务启动命令start
}# 帮助说明,用于提示输入参数信息
usage() {echo "Usage: sh run-service.sh [ start | stop | restart | status ]"exit 1
}###################################
# 读取脚本的第一个参数($1),进行判断
# 参数取值范围:{ start | stop | restart | status }
# 如参数不在指定范围之内,则打印帮助信息
###################################
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in'start')start;;'stop')stop;;'restart')restart;;'status')status;;*)usage;;
esac
exit 0

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

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

相关文章

华为回击:制裁无法阻挡中国科技创新 | 百能云芯

华为最新推出的Mate 60 Pro手机引发了中国市场的抢购热潮&#xff0c;这一成功的举措为华为带来了信心。华为在这个背景下再度推出两款新机&#xff0c;其中包括高阶版的Mate 60 Pro和折叠式手机Mate X5。这两款手机在首批预购开始后迅速售罄&#xff0c;不仅取得了市场的热烈欢…

JavaScript基础

1 JavaScript概述 1.1 什么是JavaScript 1.1.1 概念 JavaScript 是脚本语言&#xff0c;是一种解释性脚本语言&#xff08;代码不进行预编译&#xff09; JavaScript 是一种轻量级的编程语言。 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后&a…

CANoe中的工作模式之争:由一段简单的代码引出的问题

1、引子 有网友问我一个CAPL中timer定时器的代码问题。他在CANoe工程中写了一段代码:每5秒循环触发一次定时器事件程序,输出一句文本信息到Write窗口。但是执行后发现并不是每5秒触发一次定时器事件程序,而是非常快的触发定时器事件程序。当他把这段代码复制到一个新的CANo…

【开发】安防监控/视频汇聚/云存储/AI智能视频融合平台页面新增地图模式

AI智能分析网关包含有20多种算法&#xff0c;包括人脸、人体、车辆、车牌、行为分析、烟火、入侵、聚集、安全帽、反光衣等等&#xff0c;可应用在安全生产、通用园区、智慧食安、智慧城管、智慧煤矿等场景中。将网关硬件结合我们的视频汇聚/安防监控/视频融合平台EasyCVR一起使…

2023-简单点-怎么知道树莓派是什么cpu架构?

树莓派是几位&#xff1f; getconf LONG_BIT https://qengineering.eu/install-ncnn-on-raspberry-pi-4.html

算法随笔:各种经典最短路算法的简要比较总结

有多种最短路径的应用场景&#xff0c;它们需要用到不同的算法来解决。除了贪心最优搜索之外&#xff0c;其他都是最优性算法&#xff0c;即得到的解都是最短路径。其中m是边的数量&#xff0c;n是点的数量。 问题边权算法时间复杂度一个起点&#xff0c;一个终点非负数&#…

【C#】C#调用进程打开一个exe程序

文章目录 一、过程二、效果总结 一、过程 新建WinForm程序&#xff0c;并写入代码&#xff0c;明确要调用的程序的绝对路径&#xff08;或相对路径&#xff09;下的exe文件。 调用代码&#xff1a; 这里我调用的另一个程序的路径是&#xff1a; F:\WindowsFormsApplication2…

uni-app--》基于小程序开发的电商平台项目实战(一)

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

ES6之 变量的解构赋值 ➕ 扩展运算符(…)

ES6之 变量的解构赋值 ➕ 扩展运算符 1. 变量的解构赋值1.1 直接解构赋值1.2 解构赋值——修改属性名1.3 连续解构赋值 2. 扩展运算符2.1 简介&#xff08;官网&#xff09;2.2 应用例子2.2.1 简单例子12.2.2 数组拷贝2.2.3 连接多个数组2.2.4 拷贝对象&#xff08;多层和多维数…

PhotoShop 快捷键及技巧

复制图层&#xff1a; 图层-新建-复制图层 图层上右键&#xff0c;点击复制图层 ctrlJ 删除图层&#xff1a; 选中图层&#xff0c;按del键删除图层 对图像实现自由变换&#xff1a; ctrlT 同过图像边框八个方块对图像实现大小变化 按回车键确认变换 按住shift键实现等比例…

可以用Python实现RPC协议的接口自动化测试

基于RPC协议的接口自动化测试可以用Python语言实现。下面是实现步骤&#xff1a; 1、安装依赖库&#xff0c;如protobuf、grpc。 2、编写.proto文件定义接口参数和返回值。 3、使用protoc编译.proto文件生成Python代码。 4、编写客户端代码调用远程接口进行测试。 具体实现…

数据结构-堆的实现及应用(堆排序和TOP-K问题)

数据结构-堆的实现及应用[堆排序和TOP-K问题] 一.堆的基本知识点1.知识点 二.堆的实现1.堆的结构2.向上调整算法与堆的插入2.向下调整算法与堆的删除 三.整体代码四.利用回调函数避免对向上和向下调整算法的修改1.向上调整算法的修改2.向下调整算法的修改3.插入元素和删除元素函…

操作系统——复习笔记

主要是按照王道考研408的ppt进行复习。 概述 操作系统概览 操作系统&#xff08;Operating System&#xff0c; OS&#xff09;是指控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织调度计算机的工作和资源的分配&#xff1b;以提供给用户和其他软件方便的…

Unity Shader 溶解效果

一、效果图 二、原理分析 实现原理就是在片元着色器中&#xff0c;对像素点进行丢弃不显示。借助美术做的噪点图(利用噪点图中rgb中r值来做计算)。比如噪点图r值从0-1。我们从小到大让r值逐渐丢弃&#xff0c;比如刚开始r < 0.1丢弃&#xff0c;然后t < 0.2丢弃...知道t…

【牛客刷题】链表专项 Ⅱ()

合并k个有序链表 https://www.nowcoder.com/share/jump/9321389651694169697706 递归调用一下合并2个有序链表就OK&#xff1a; ListNode* merge2Lists(ListNode* pHead1, ListNode* pHead2) {ListNode* dummy new ListNode(0);ListNode* cur dummy;ListNode* cur1 pHead1;…

OpenCV(二十二):均值滤波、方框滤波和高斯滤波

目录 1.均值滤波 2.方框滤波 3.高斯滤波 1.均值滤波 OpenCV中的均值滤波&#xff08;Mean Filter&#xff09;是一种简单的滤波技术&#xff0c;用于平滑图像并减少噪声。它的原理非常简单&#xff1a;对于每个像素&#xff0c;将其与其周围邻域内像素的平均值作为新的像素值…

数据库基础——数据库、数据表和SQL语句

数据库、数据表和SQL语句 数据库、数据表和SQL语句是什么&#xff1f;数据库安装数据库登录及退出创建、查看数据库及修改名字查看及修改数据库编码删除数据库使用或查看当前正在使用的数据库创建、查看数据表及修改名字查看及修改数据表编码查看及修改数据表结构增加约束删除约…

模型训练:优化人工智能和机器学习,完善DevOps工具的使用

作者&#xff1a;JFrog大中华区总经理董任远 据说法餐的秘诀在于黄油、黄油、更多的黄油。同样&#xff0c;对于DevOps而言&#xff0c;成功的三大秘诀是自动化、自动化、更高程度的自动化&#xff0c;而这一切归根结底都在于构建能够更快速地不断发布新版软件的流程。 尽管人…

【Python程序设计】 工厂模式【07/8】

一、说明 我们探索数据工程中使用的设计模式 - 软件设计中常见问题的可重用解决方案。 以下文章是有关 Python 数据工程系列文章的一部分&#xff0c;旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。 迄今为止&#xff0c;…

Postman接口测试流程

一、工具安装 ● 安装Postman有中文版和英文版&#xff0c;可以选择自己喜欢的版本即可。安装时重新选择一下安装路径&#xff08;也可以默认路径&#xff09;&#xff0c;一直下一步安装完成即可。&#xff08;本文档采用英文版本&#xff09;安装文件网盘路径链接&#xff1…