开发环境搭建和Shell编程
开发环境搭建(掌握) :
Xshell和Xftp工具:
下载和安装方式:
下载地址:https://www.netsarang.com/zh/
其他下载地址:
链接:https://pan.baidu.com/s/16U158rvwNbsgH0vzpzfUPQ
提取码:nare
至于选择那个安装,就看你自己了
安装方式:直接一路点击下一步即可,安装过程选择免费版
使用方式:
![]()
网络模式设置:
设置网络连接模式为NAT模式,如下图:
![]()
修改配置文件:
使用root用户打开/etc/sysconfig/network-scripts/ifcfg-eno16777736文件,有些虚拟机软件或者镜像使得该文件可能是不同的,但基本都是ifcfg-e开头的,且基本只有一个,自己看看就知道了,添加或修改的内容如下(如果不知道是哪个对应的信息,则可以百度):
/* BOOTPROTO=static 使得变成静态ip ONBOOT=yes 重启生效 IPADDR=192.168.164.128 注意:这里用自己的对应ip范围(查看虚拟机的网络网关,一般在vm软件里面可以查看,具体可以百度,一般修改164这个地方,后面的基本也是如此,即如164.2里的164),ip在网络上的位置 ipaddr GATEWAY=192.168.164.2 网关网络到其他网络需要的口子,可以叫做路由器 gateway NETMASK=255.255.255.0 子网掩码,将ip划分为主机地址和网络地址 netmask DNS1=114.114.114.114 向指定位置解析申请的域名(可以设置为8.8.8.8公共,0.0.0.0本机) dns1 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库 注意:上面只是虚拟机软件虚拟出来的,并不是真正的有对应设备(如网关),但连接时,确会有起作用 */
配置文件生效:
//一般的我们可以重启虚拟机,来使得该配置文件生效,即reboot命令//当然,也可以不重启使得生效,如下://使用命令使得配置文件被读取生效:service network restart 实际上就是重启网络服务//要注意:服务和配置文件是有区别的,服务需要开启才可,而配置文件是别人读取这个信息//一般我们改变时,需要重新执行这个配置文件,实际上就是执行文件里面的操作,而没有文件操作的,执行是没有用的//所以需要其他的来重新读取,即上面的重启对应服务//之所以有上面的决定,是因为数据的变化,配置文件,无非就是存放对应数据//而执行或者重新读取,都是获得改变后的数据而已//而像windows系统,你会发现,操作配置文件时,并没有进行执行操作,是因为你在操作对应程序时,都会去读取一下的//如域名的设置,都会去读取一下的//而上面的重启服务,他已经在执行了,所以为了去读取改变的配置文件,需要重新启动
之后就可以连接了,之所以可以连接,是因为Linux多用户
下面介绍在Linux下载对应开发环境,注意系统版本
JDK的下载和安装:
下载和安装方式:
下载地址:https://www.oracle.com/java/technologies/javase-downloads.html
安装方式:将下载好的jdk安装包通过Xftp工具传输到CentOS系统中,使用tar命令解压即可
在Xshell里点击如下:
![]()
有颜色的那个,当你安装好Xftp时,点击,根据当前状态自动帮你创建连接
若你自己使用Xftp,那么就要注意协议和端口
一般来说Linux是没有对应ftp协议的,所以通常都有将协议的ftp改成sftp,因为sftp是ssh协议的一部分(一般虚拟机都是用ssh)
要注意:协议最好是相同的,因为不同的协议基本是不能互相连接的
且端口也是不能被同样的协议占用的(注意是同样的协议,不同的协议可以),这样基本就可以进行连接操作
文件连接一般使用的是sftp(虚拟机一般是这个,占用端口22),而连接虚拟机的一般是ssh(占用端口22),而ftp一般占用21端口(虚拟机一般不使用这个操作文件)
虚拟机也可以叫做Linux,虽然他是一个对应软件,但也可以称之为对应机子
而端口是必须要没有占用的,一般的连接,21端口基本占用,所以我们通常需要没有占用的端口,如22端口
但实际是端口是可以监听不同的协议的(如ssh,sftp,这两个都可以去占用22端口)
即不同的内容,但相同的就不可以,实际上一个端口可以当成一个容量,每有一个不同数据,开辟一个空间,但只会开辟一个
所以相同的,就连接不上了
配置环境变量:
使用root用户打开配置文件/etc/profile,向文件末尾追加内容如下:
//export JAVA_HOME=/usr/javajdk//解释:定义变量JAVA_HOME,后面是值//export PATH=$JAVA_HOME/bin:$PATH//解释:定义变量PATH,后面$是取变量,:是路径分割符//再将原来的$PATH放在后面,那么就相当于给PATH添加新的内容,并重新赋值了//即export是一个用于设置或显示环境变量的命令
保存退出后让文件生效并验证是否配置成功:
//source /etc/profile 重新执行这个配置文件,即使得该配置文件生效//javac -version//由前面数据变化可知,当你执行后,就算你删掉这个对应配置,并不会影响数据的设置完毕,因为其他的并没有再次读取//除非你继续设置//如果配置好后,还是访问不了,可以看这个博客:https://blog.51cto.com/u_15346267/5055558//如果还是不行,可以看这个博客:https://blog.51cto.com/u_147655/5379077//当然,大多数是因为系统的原因导致的(也有可能是对应的jdk的问题,一般是系统,可能操作不了对应的版本的jdk),这里注意即可
Tomcat的下载和安装:
下载和安装方式:
下载地址:https://tomcat.apache.org/download-80.cgi
安装方式:将下载好的Tomcat安装包通过Xftp工具传输到CentOS系统中,使用tar命令解压即可
启动和关闭方式:
//在这里就不是bat了,而是sh,windows是bat,这是对应系统的差别,因为都是对应系统的处理方式//因为bat是windows识别的,sh是linux识别的,都是他们自带一种方法//当然了对应的他们没有,所以tomcat就有bat和sh两个方式执行//其实也可以在对方安装对应方式,只不过大多数默认的系统,都没有对应方式//startup.sh//shutdown.sh//注意:要执行对应的文件,一般不能直接写入上面的文件全名,即显示找不到命令,与windows不同//之所以这样,主要是因为linux的直接写,只会当作全局命令,而不会去当前目录里去找,这是两个系统的不同//所以linux也有一个windows也不会当作的操作,即./执行命令//即linux里要执行对应的操作,一般需要如下操作//可以使用./startup.sh或者./shutdown.sh来执行,与windows不同//即使用./后面的代表要执行的二进制文件//虽然有些命令也算二进制文件,但他们是全局的,所以不需要对应./,windows是不会识别./的执行方式的//这也是他们两个的不同之处(因为是不同系统,即有很多不同的地方的)
开放防火墙端口:
之所以需要这个,是因为远程访问会受到防火墙的阻塞(内部基本不会)
所以我们需要对相应的端口进行开放,使得我们的电脑可以对我们创建的虚拟机(相当于其他电脑了)可以访问
这里我就说明一下,为什么可以创建对应的虚拟机
我的理解:无论的ip还是什么其他的网络地址,最终的结果,就算网络信息上给出的分组信息,这个信息就可以识别对应电脑
那么电脑的接收网络信息的地方,会根据对应地址,进行相应的存放,而创建的虚拟机,就算作多出来的一个对应地址
即实际上还是通过系统中的相应操作(一般是文件,形成了一个电脑里可以有虚拟机的操作)
所以可以说虚拟机这个软件是可以创建虚拟机的,因为硬件到软件中,那些系统也算是通过操作硬件而已
所以上述接收到的对应地址是可以进行改变的,就如qq也可以进行通信(只是虚拟机网路被创建出来了隔开)
/sbin/iptables-IINPUT-p tcp--dport8080-jACCEPT//解释,让这个ip的防火墙,允许输入,基于tcp协议的8080端口的接收//开启8080端口(暂时开通),重启需要重新开通,因为他的对应配置文件的作用
其实linux的命令也是可以加上" ; "冒号的,而;中文冒号,会当作一起,英文冒号则当作结束符号
配置环境变量:
使用root用户打开配置文件/etc/profile,向文件末尾追加内容
//export CATALINA_HOME=/usr/tomcat//export PATH=$CATALINA_HOME/bin:$PATH
保存退出后让文件生效并验证是否配置成功
//source /etc/profile//startup.sh//这时就不用./了,而是直接变成全局了
但建议不要配置tomcat环境变量,是因为,若要开启多个服务器,那么由于配置了环境变量
即全局只能执行该变量对应的服务器,所以,一般不进行配置
在这里可以感兴趣的配置一下
发布Web项目:
将Web项目打成war包,通过Xftp工具将war包放在tomcat/webapp目录并启动
前面也说过,idea的某些选项可以最终访问到这里,其实相当于服务器自己访问自己里面的内容
那么这个时候就可以直接访问对应项目的东西了,如
![]()
你也许会有一点疑惑,为什么idea创建的,可以在linux里面运行
首先,idea只是让你更好的写代码,而对应的执行是jdk运行环境来执行的,而服务器就是进行命令的全部执行
即类似于批量的使用java.exe来执行对应class
所以可以说,只要有对应环境,以及class文件,那么就可以运行项目了
因为idea的操作运行服务器,最终基本就是这样的,他们的配置就是决定资源的访问的
Mysql的下载和安装:
下载Mysql的repo源:
注意:如果报错,先看一下ping www.baidu.com,可不可以进行网路访问,若不行
看一下你配置文件的网关是否正确,这是因为网关是一个口子,必须要正确的
否则会解析不了你所对应访问的位置(位置有网关帮你分配)
//wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm//可以手动访问后面的网站,就会有一个下载出现,实际上上面就是一个快照下载//快照就是下载对应文件的一系列步骤的封装//wget下载命令的意思,实际是一种下载工具//通常一个repo文件定义了一个或者多个软件仓库的细节内容//记录了包的下载路径,相当于寻宝图,告诉yum去哪里寻找将要下载的软件//wget命令用来从指定的URL下载文件//yum用于RPM包的添加,删除,更新,自动解决包的依赖问题以及系统更新升级//也有下载的意思,可以说他是一系列操作的集合
安装rpm包:
//rpm -ivh mysql57-community-release-el7-8.noarch.rpm//进行解析快照安装(基本只能操作这个rpm文件)//可以理解为我们手机上的先解析安装包,然后再通过我们手动的点击安装,这样的整体操作的意思
安装Mysql :
//yum install mysql-server//这样也可以安装(但首先需要先安装上面的rpm包,安装后会出现对应的新的包,这里就是那个安装)//上面基本是这样的,先下载好,解析安装后,可能会出来一些对应包(需要yum来操作,rpm基本操作不了),这时需要yum了//因为rpm基本只能操作rpm结尾的文件,但实际上只是只能操作rpm相关内容的文件,与是否是rpm结尾无关,所以并不是必须是rpm结尾//然后根据出现的对应包进行下载,当然,其实也可以直接yum下载对应包(需要存在,先远程,然后本地)
若出现了密匙错误,一般是没有对应密匙,或者不匹配,因为下载都是需要对应的密匙的,执行如下即可:
//rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022//直接导入对应快照//注意:一般对文件造成大的操作的,都需要root权限
引入了最新密匙,使得下载时,会去安装好的这里面去加载对应密匙
下面三种可以理解为:
wget:类似于迅雷,是一种下载工具
yum:是一种软件安装方式
rpm:软件管理,一般下载的都由他管理,或者解析,然后安装
启动服务:
//service mysqld start//grep password /var/log/mysqld.log//查看默认分配的密码//注意:默认情况下,安装好mysql后//是开机自启的(无论你是否手动的启动过,下次的启动linux,mysql都会自动的启动)//即,如果你安装好后,直接的重启linux而不手动的启动mysql,那么再次的查看服务状态时,一般都是启动的mysql的//如果(手动,或者重启linux)启动不了,那么手动的启动自然也启动不了,那么可以百度查看错误//实在不行,可以删除所有相关的mysql,重新操作即可(百度可以查看如何操作)//具体删除所有相关的mysql方式的地址如下:https://blog.csdn.net/weixin_65034883/article/details/126039895
查看服务状态 :
//systemctl status mysqld
使用root用户登录:
//mysql -u root //一般是mysql -uroot或者//一般是mysql -uroot -p(一般是这个)
修改临时密码 :
因为不修改密码,基本执行不了mysql命令
//alter user 'root'@'localhost' identified by 'QiDian@666';//注意:密码又格式要求,要有大写,小写,特殊符号,数字等等,且最低8个数
图形化界面访问数据库:
使用SQLyog工具:
启动图形化界面工具SQLyog连接虚拟机中Mysql数据库,如下图:
![]()
之所以出现这种情况,一般是因为root的默认权限为只能是本机访问,在mysql里面可以设置为%,使得其他电脑访问
解决方案 :
使用root权限登录数据库后选择mysql库:
//mysql -u root -p//use mysql
查看mysql库中的user表的host值后修改为通配符%:
//select host from user where user='root';//update user set host='%' where user='root';//flush privileges; 刷新权限信息,防止没有改变(虽然可能改变了)
查看修改结果并重新测试:
//select user,host from user
![]()
若出错了,一般是防火墙阻塞
/sbin/iptables-IINPUT-p tcp--dport3306-jACCEPT
开放对应端口防火墙
Shell编程(熟悉):
基本概念:
Shell是一个命令行解释器,可以接收应用程序或用户命令,然后访问操作系统内核
Shell是一个功能相当强大的编程语言,易编写、易调试、灵活性强
编写第一个程序 :
使用vi工具创建xxx.sh的文件
以#!/bin/bash开头并编写代码后保存
#表示使用bash工具来解释代码#!/bin/bashechoHelloWorld!#是注释#其中#!可以不写(这是一起的不代表注释,但也使得后面不运行),但有些东西必须要说明,表示是这个使用,如函数等等
在Shell里面,sh后缀可以不写的,与java不同,java编译只识别java后缀,之所以使用sh后缀,是为了方便识别
执行Shell程序的方式 :
方式一:./文件名,此方式需要执行权限
方式二:/bin/bash 文件名,此方式不需要执行权限
一般linux自动配置了bash的环境变量,所以也可以直接bash 文件名执行,也可以简写成sh 文件名
ls -l也可以简写成ll
之所以简写,一般都是一样的操作的不同执行的文件
变量的定义:
语法格式:
定义变量:变量=值
#!/bin/bashname=zhangfeiecho$nameunsetname#撤销name变量,那么这个变量就不存在了echo$name#不存在的变量,相当于一个空值,那么就是输出空值#注意,name=zhangfei中不能又空格,否则不会识别,即报错#而且要取得变量,需要加上$符号,才会算作取得变量,否则就算一个数(可以理解为字符串数),即打印name#注意:有些名称有特殊的会报错,如单词的写ss#之所以这样,是因为这是执行文件,那么里面的相当于是在命令行里执行的,这与其他语言是不同的#如java需要编译等等,再jre环境下执行#所以可以实验一下,在命令行里写出name=zhangfei,回车,虽然每反应,但其实是在一个空间里进行存放的#然后再echo $name,那么就会打印张飞,由此可见每个终端都有一个存放对应代码的地方#所以执行文件其实也算作执行里面的代码,由终端帮他执行,即会判别里面的代码操作#但注意的是,文件之间的变量是不会互相识别的,所以终端自带的文件和执行的文件的变量都只是自己各自的变量,互不影响#所以你在命令行设置的变量(存放到自带的文件地方),执行文件里的echo $name,是没有值的,即不影响#所以所既然没有值,那么echo输出的就算空的,那么就会发现输出一个空值(空值占一个命令中的行)#由上所述,那么就知道为什么=之间不加空格了#因为加=使得他们会被识别(因为是一起的),而单词的会认为是一个命令*因为隔开就不是一起的了)#所以报错提示时,会说该命令没找到
撤销变量:unset 变量
定义规则:
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
不能使用bash里的关键字
中间不能有空格,可以有下划线
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算(因为需要$来取值)
变量的值如果有空格,需要使用双引号或单引号括起来
双引号和单引号的区别是:双引号里面可以读取识别变量,而单引号不会
#!/bin/bashname=zhangfei#定义一个名字为name的变量初始值为zhangfei,=两边不能有空格echo$name#打印变量name的数值#unset name #撤销name的定义echo$name#show='My Self!$name' #若变量值中有空格则使用单引号或双引号,但双引号中可以取出变量的数值show="My Self!$name"echo$show
常用运算符:
算术运算符 :
![]()
#!/bin/bash#定义两个变量ia=5ib=2#一般"2"与2是一样的,2会默认为字符串,字母也是一样,注意linux的"和'的区别即可#打印两个变量的数值echo"ia=$ia"echo"ib=$ib"#实现加法运算,要求+两边必须有空格,否则就不会进行加法运算,expr实际上不会显示,但由于echo优先级高,所以才显示#即加上``,那么他就会先执行,使得不显示echo`expr$ia + $ib`#expr一般是操作运算的,可以百度查看#使用其它方式实现加法运算ic=$[$ia+$ib]#实际上也可以使用expr来赋值,但为了节省代码量,使用$[]的形式对内容进行运算,这时[]里面的变量有无空格都可以#相当与使用[]将他们变成一个式子,最后使用$取值,使用$取值时,顺便进行运算,无视有无空格#单纯的[]会显示echo$icid=$(($ia+$ib))#使用单纯的()不会显示,使用两个(())报错,即$(())一起算作expr的作用echo$id
关系运算符:
![]()
流程控制语句:
if[条件判断式]then程序fi
#!/bin/bash#定义一个变量用于描述考试成绩score=60echo$score#使用if判断给出及格或者不及格的提示信息if[$score-gt60]#注意,使用if式,[],左右都要空格隔开,否则会当成一体thenecho"恭喜您考试通过了!"elif[$score-eq60];thenecho"60分万岁,多一分浪费!"else#最后一个不加then,其他的必须要,否则报错echo"下学期来补考吧!"fi#注意:这些代码,可以对连接一起的使用;隔开,这样的隔开后,后面无视空格#之所以可以隔开,是因为他们就是一条语句#这样的;隔开,then后面不可以加,否则的话,基本报错#因为then后面要接代码(所以需要接代码的基本都不可以加,如case),由于他们是一条语句,所以我们不能操作语句内部#报错都是识别出来的(其他语言基本如此)#注意:最好不要使用;进行隔开,即换行是最好的操作,因为;容易出错
在前面说过,;可以当作结束符号
case语句:
case$变量名in"值1") 如果变量的值等于值1,则执行程序1;;"值2") 如果变量的值等于值2,则执行程序2;;…省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序;;esac
#!/bin/bash#提示用户输入1 ~ 4之间的整数并记录到变量中echo"请输入1~4之间的整数:"readnum#表示读取一个整数放到变量num中#使用case语句进行批评和打印case$numin#开始1)echo"你选择了1号业务!"#当然数字是数字,否则一律都看成字符串,1,"1";;2)echo"你选择了2号业务!";;3)echo"你选择了3号业务!";;4)echo"你选择了4号业务!";;*)echo"你没有选择1~4号之间的业务,你想干啥?";;esac#结束
for循环 :
for((初始值;循环控制条件;变量变化))do程序done
#!/bin/bash#定义一个变量负责记录累加和sum=0#使用for循环计算1 ~ 100之间的累加和并记录到上述变量中for((i=1;i<=100;i++))#这一行可以无视空格,当然(())不能无视,就如for不可分离一样,是语法规则do#开始sum=$[$sum+$i]done#结束#打印变量的数值echo$sum
while循环 :
while[条件判断式]do程序done
#!/bin/bash#使用while循环实现1 ~ 100之间的累加和#定义两个变量分别记录累加和与初始值sum=0i=1#使用while循环while[$i-le100]#空格都要加上dosum=$[$sum+$i]i=$[$i+1]done#打印结果echo$sum
函数:
[function]funname[()]{Action;[return int;]}funname#注意:这里有中括号的可以省略不写,但要注意function和()必须要留一个#shell的函数的return基本只能返回数字,最大为255,超过了按照0处理,若为非数字字符串,那么就是255#这个返回不是其他编程语言一样的返回,而是一个函数执行号,也可以叫做状态码,且基本赋值不了#但可以使用echo $?来获得上次调用函数的返回,只能是上一次调用
#!/bin/bash#定义一个函数负责计算两个输入数据的和并打印functionsum(){s=$[$1+$2]echo$s}#提示用户从键盘输入两个数据read-p"input num1:"num1#-p后面接上提示,使得有提示的输出read-p"input num2:"num2#调用函数sum$num1$num2
最后不得不说明一点:
在linux中"/“才是路径的处理,而windows中”/“和” \ “通常都一样,但是一些命令需要正确,特别的是关于linux的命令,就算在windows中最好也操作”/“,而且有些命令可能对路径有强指定,比如末尾不能加上”/“或者” \ ",当然,这里了解即可,只是自身特性和命令的部分操作而已