Linux-Learning 
更新: 2025/4/9 字数: 0 字 时长: 0 分钟
一、使用场景和简介 



(1)Linux系统版本 

①发行版 

二、Linux安装 

(1)VMware安装 
Vmware-17(提取码: ak47):VMware-workstation-full-17.5.0-22583795 (1).exe
(2)Centos镜像 
阿里云镜像地址:centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 (aliyun.com)
(3)Finalshell安装 
(4)VMware-新建虚拟机 
①新建虚拟机 








②Linux配置 


**安装过程中,发现不少问题。**如下图
1)网络和主机名 

首先,我们点击网络和主机名,进去打开网络。

再点击左上角的完成,退出来可以看到,网络问题已经解决了。
2)安装目的地 
然后点击 安装目的地,
直接点击右上角完成,回到配置页面,可以看到,这个也解决了。

3)设置Root密码 
点击 root 根密码
设置跟密, 然后点击两次 完成,解决了。


4)设置时区 
时区为 美洲,我们点开,设置为上海。

时区也配置好了。
5)安装配置 
如果使用本地的ISO映像仍然报错,可以考虑切换不同版本的Centos映像,也可以通过输入阿里云镜像网址的方式,在线安装。
阿里云Centos下载地址:阿里云Centos下载地址
阿里云Centos镜像站:阿里云Centos镜像站

③登录Linux 
默认用户名为root,密码为前面设置的root密码

④网卡配置 
如果之前在Linux配置中已经开启了“网络和主机名”的网络开关,则可以直接使用命令:ip addr,查看IP地址。



vi /etc/sysconfig/network-scripts/ifcfg-ens33报错
 解决 Linux 网络 “Job for network.service failed because the control process exite”问题
解决方案
1、和 NetworkManager 服务有冲突,直接关闭 NetworkManger 服务就好了,
shellservice NetworkManager stop禁止开机启动
shellchkconfig NetworkManager off重启网络
shellservice network restart
配置完成后: 
⑤配置完成 

三、FinalShell远程连接Linux服务器 
(1)安装 
(2)远程连接Linux服务器 


(3)操作Linux服务器 

四、Linux目录 
(1)Linux和Windows目录结构对比 

(2)目录介绍 

- bin存放二进制可执行文件
 - boot存放系统引导时使用的各种文件
 - dev存放设备文件
 - etc存放系统配置文件
 - home存放系统用户的文件
 - lib存放程序运行所需的共享库和内核模块
 - opt额外安装的可选应用程序包所放置的位置
 - root超级用户目录
 - sbin存放二进制可执行文件,只有root用户才能访问
 - tmp存放临时文件
 - usr存放系统应用程序
 - var存放运行时需要改变数据的文件,例如日志文件
 
五、Linux常用命令 
1、Linux命令初体验 


(1)ls-查看当前目录下的内容 
①ls -l 或者 ll(两个L) 
表示查看当前目录下的详细内容
ls -l
ll(2)pwd-查看当前所在目录 
(3)cd [目录名] -切换目录 
(4)touch [文件名] -如果文件不存在,新建文件 
(5)mkdir [目录名] -创建目录 
(6)rm [文件名|目录名] -删除指定文件或目录 
①rm -f [文件名1] [文件名2] 
rm -f a.txt b.txt  #强制删除多个文件(-f,表示不提示,直接删除)(5)echo 内容 >> filename-追加内容 

2、Linux命令使用技巧 

3、Linux命令格式 
command [-options] [parameter]

- command:命令名
 - [-options]:选项,可用来对命令进行控制,也可以省略
 - [parameter]:传给命令的参数,可以是零个、一个或者多个
 

4、文件目录操作命令 
(1)ls -显示指定目录下的内容 
作用:显示指定目录下的内容语法:ls [-al] [dir]说明:
- -a显示所有文件及目录(.开头的隐藏文件也会列出)
 - -L除文件名称外,同时将文件型态(d表示目录,-表示文件)、权限、拥有者、文件大小等信息详细列出
 
注意:由于我们使用ls命令时经常需要加入-L选项,所以Linux为ls-l命令提供了一种简写方式,即ll
(2)cd -用于切换目录 

作用:用于切换当前工作目录,即进入指定目录语法:cd [dirName]
特殊说明:
~表示用户的home目录(一个用户可以有多个用户目录)
.表示目前所在的目录
..表示目前目录位置的上级目录
举例:cd .. 切换到当前目录的上级目录cd ~ 切换到用户的home目录cd /usr /local 切换到/usr/local目录
(3)cat-用于显示文件内容 

作用:用于显示文件内容语法:cat[-n] fileName
说明:
- -n:由1开始对所有输出的行数编号
 
举例:
- cat /etc/profile 查看/etc目录下的profile文件内容
 
(4)more-已分页的形式显示文件内容 

作用:以分页的形式显示文件内容语法:morefileName
操作说明:
- 回车键 向下滚动一行
 - 空格键 向下滚动一屏
 - b 返回上一屏
 - q或者Ctrl+c 退出more
 
举例:more/etc/profile 以分页方式显示/etc目录下的profile文件内容
(5)tail-查看文件末尾的内容 

作用:查看文件末尾的内容
语法:tail[-f] fileName
说明:
- -f:动态读取文件末尾内容并显示,通常用于日志文件的内容输出
 
举例:
- tail /etc/profile 显示/etc目录下的profile文件末尾10行的内容
 - tail-20/etc/profile 显示/etc目录下的profile文件末尾20行的内容
 - tail -f /itcast/my.log 动态读取/itcast目录下的my.log文件末尾内容并显示
 

(6)mkdir-创建目录 

作用:创建目录
语法: mkdir [-p] dirName
说明:
●-p:确保目录名称存在,不存在的就创建一个。通过此选项,可以实现多层目录同时创建
举例:
- mkdiritcast在当前目录下,建立一个名为itcast的子目录
 - mkdi r-p itcast/test在工作目录下的itcast目录中建立一个名为test的子目录,若itcast目录不存在,则建立一个
 
(7)rmdir-删除空目录 

作用:删除空目录
语法:rmdir [-p] dirName
说明:
- -p:当子目录被删除后使父目录为空目录的话,则一并删除
 
举例:
- rmdir itcast删除名为itcast的空目录
 - rmdir -p itcast/test删除itcast目录中名为test的子目录,若test目录删除后itcast目录变为空目录,则也被删除
 - rmdir ==itcast== 删除名称以itcast开始的空目录*
 
(8)rm-删除文件或者目录 

作用:删除文件或者目录
语法:rm [-rf] name
说明:
- -r:将目录及目录中所有文件(目录)逐一删除,即递归删除
 - -f:无需确认,直接删除
 
举例:
- rm -r itcast/删除名为itcast的目录和目录中所有文件,删除前需确认
 - rm -rf itcast/无需确认,直接删除名为itcast的目录和目录中所有文件
 - rm -f hello.txt无需确认,直接删除hello.txt文件
 
5、拷贝移动命令 
(1)cp-用于复制文件或目录 

作用:用于复制文件或目录
语法:cp [-r] source dest
说明:
- -r:如果复制的是目录需要使用此选项,此时将复制该目录下所有的子目录和文件
 
举例:
- cp hello.txt itcast/ 将hello.txt复制到itcast目录中
 - cp hello.txt ./hi.txt 将hello.txt复制到当前目录,并改名为hi.txt(==./==表示当前目录)
 - cp -r itcast/ ./itheima/ 将itcast目录和目录下所有文件复制到itheima目录下
 - cp -r itcast/* ./itheima/ 将itcast目录下所有文件复制到itheima目录下(只复制所有文件)
 
(2)mv-为文件或目录改名、或将文件或目录移动到其他位置 

作用:为文件或目录改名、或将文件或目录移动到其它位置
语法:mv source dest
举例:
- mv hello.txt hi.txt 将hello.txt改名为hi.txt
 - mv hi.txt itheima==/== 将文件hi.txt移动到itheima目录中
 - mv hi.txt itheima/hello.txt 将hi.txt移动到itheima目录中,并改名为hello.txt
 - mv itcast/ itheima/ 如果itheima目录不存在,将itcast目录改名为itheima
 - mv itcast/ itheima/ 如果itheima目录存在,将itcast目录移动到itheima目录中
 
6、打包压缩命令 tar 

(1)tar基础命令 
作用:对文件进行打包、解包、压缩、解压
语法:tar [-zcxvf] fileName [files]
 tar [-zcxvf] fileName(打/解包后的文件名带上后缀) [files(目标文件或目录)]
- 包文件后缀为==.tar表示只是完成了打包==,并没有压缩
 - 包文件后缀为==.tar.gz表示打包的同时还进行了压缩==
 
说明:
- -z:z代表的是gzip,通过gzip命令处理文件,gzip可以对文件压缩或者解压
 - -c:c代表的是create,即创建新的包文件 (打包)
 - -x:x代表的是extract,实现从包文件中还原文件 (解包)
 - -v: v代表的是verbose,显示命令的执行过程
 - -f:f代表的是file,用于指定包文件的名称
 
(2)案例 

举例:
- -czvf:表示对文件打包并压缩(并展示命令执行过程、指定打包后的包文件名称),tar -czvf test/newFile.tar.gz itcast,将itcast文件(目录)打包到test目录下,并为打包后的包文件指定名称(后缀为.tar.gz)
 - -cvf: 表示对文件打包(并展示命令执行过程、指定打包后的包文件名称),tar -cvf newName.tar itcast
 - -xvf: 表示对包文件进行解包, tar -xvf test.tar
 - -xzvf: 表示对包文件进行解包并解压,tar -xzvf example.tar.gz
 - -C:表示指定解压后的文件所在目录,tar -zxvf hello.tar.gz -C /usr/local
 
(3)解压缩到指定目录 
解包并解压文件(目录)到指定目录,并更改解压后的名字
①法一:-C, 
-C:表示指定解压后的文件所在目录,tar -zxvf hello.tar.gz -C /usr/local
- tar -xzvf newFile.tar.gz -C ./004 --transform 's/itcast/黑马目录/'
 
②法二:--directory 
- tar -xzvf newFile.tar.gz --directory /指定目录 --transform '==s/==旧文件名/新文件名/'
 
假设你有一个压缩文件 example.tar.gz,其中包含一个文件 file1.txt,你希望将 file1.txt 解压缩到 /home/user/target_directory/ 目录,并且将解压缩后的文件重命名为 newfile.txt。你可以使用以下步骤:
解压缩到指定目录,并重命名文件:
bashtar -xzvf example.tar.gz --directory /home/user/target_directory/ --transform 's/file1.txt/newfile.txt/'解释:
-x:表示解压缩。-z:表示解压缩.gz格式的文件。-v:表示在解压缩过程中显示详细信息。-f:表示指定要操作的文件。--directory /home/user/target_directory/:指定解压缩的目标目录。--transform 's/file1.txt/newfile.txt/':用来修改解压缩后的文件名,其中file1.txt是压缩包中的原文件名,newfile.txt是解压缩后的新文件名。
结果:
经过上述命令后,
file1.txt将被解压缩到/home/user/target_directory/目录,并且文件名会被修改为newfile.txt。
如果压缩包中有多个文件或目录,你可以使用正则表达式来处理更多文件的重命名。根据需要调整 --transform 参数中的规则。
7、文本编辑命令 vi/vim 
(1)Vim的安装 

作用:vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于Windows中的记事本
语法:vi fileName
说明:
- 1、vim是从vi发展来的一个功能更加强大的文本编辑工具,在编辑文件时可以对文本内容进行着色,方便我们对文件进行编辑处理,所以实际工作中vim更加常用。
 - 2、要使用vim命令,需要我们自己完成安装。可以使用下面的命令来完成安装:yum install vim
 
(1)yum命令错误 
CentOS7执行yum命令遇到“Could not resolve host: mirrorlist.centos.org; 未知的错误”如何解决 
原因是国内网络不能访问外网。所以需要将mirrorlist.centos.org替换为国内可以访问的镜像源。
 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo然后再清除yum缓存
yum clean all然后重新生成缓存
yum makecache(2)Vim的编辑模式 

说明:
- 1、在使用vim命令编辑文件时,如果指定的文件存在则直接打开此文件。如果指定的文件不存在则新建文件。
 - 2、vim在进行文本编辑时共分为三种模式,分别是命令模式(Command mode),插入模式(Insert mode)和底行模式(Lastlinemode)。这三种模式之间可以相互切换。我们在使用vim时一定要注意我们当前所处的是哪种模式。
 
①命令模式 

- 命令模式下可以查看文件内容、移动光标(上下左右箭头、gg、G)
- gg,快速回到文件开头
 - G,快速回到文件末尾
 
 - 通过vim命令打开文件后,默认进入命令模式
 - 另外两种模式需要首先进入命令模式,才能进入彼此,即必须通过命令模式进行转换其他两种模式
 
②插入模式-使用i 

- 插入模式下可以对文件内容进行编辑
 - 在命令模式下按下==[i,a,o]任意一个,可以进入插入模式。进入插入模式后,下方会出现【insert】==字样
 - 在插入模式下按下ESC键,回到命令模式,
- 通过命令模式在进入底行模式,在底行模式中进行保存或退出
 
 
③底行模式-使用==:== 

- 底行模式下可以通过命令对文件内容进行查找、显示行号、退出等操作
 - 在命令模式下按下[: 和 /]任意一个,可以进入底行模式
 - 通过==/方式进入底行模式后,可以对文件内容进行查找==
 - 通过==:方式进入底行模式后,可以输入wq(保存并退出)==、q!(不保存退出)、Set nu(显示行号)
 
8、查找命令 find、grep 
(1)find-查找文件 

作用:在指定目录下查找文件
语法:find dirName -option fileName
举例:
- find . -name "*.java" (其中 . 表示在当前目录下寻找 ) ,在当前目录及其子目录下查找.java结尾文件
 - find /itcast -name "*.java" 在/itcast目录及其子目录下查找.java结尾的文件
 
(2)grep-查找指定文件中的内容 

作用:从指定文件中查找指定的文本内容
语法:grep word fileName
举例:
- grep Hello HelloWorld.java 查找HelloWorld.java文件中出现的Hello字符串的位置
 - *grep hello .java 查找当前目录中所有==.java结尾==的文件中包含hello字符串的位置
 
9、Linux-进程 
(1)查看进程命令-ps 

查看进程 ps -ef | grep [进程名称]
注意:
- ps命令是linux下非常强大的进程查看命令,通过ps -ef可以查看当前运行的所有进程的详细信息
 - "|”在Linux中称为管道符,可以将前一个命令的结果输出给后一个命令作为输入
 - 使用ps命令查看进程时,经常配合管道符和查找命令grep一起使用,来查看特定进程
 
举例:
- 查看Tomcat的进程:ps-ef| grep tomcat
 
(2)停止进程-kill 
结束Tomcat进程
- 查看Tomcat进程,获得进程id
 

- 执行命令结束进程kill -9 进程号
 
注意: 
kill命令是Linux提供的用于结束进程的命令,-9表示强制结束
案例-停止Tomcat服务 

停止Tomcat服务的方式:
①法一: 
运行Tomcat的bin目录中提供的停止服务的脚本文件 shutdown.sh
执行命令:
sh shutdown.sh
./shutdown.sh
②法二: 
结束Tomcat进程
- 查看Tomcat进程,获得进程id
 

- 执行命令结束进程kill -9 进程号
 
注意: 
kill命令是Linux提供的用于结束进程的命令,-9表示强制结束
10、Linux防火墙操作 

查看防火墙状态(systemctl status firewalld 或 firewall-cmd --state)
暂时关闭防火墙(systemctl stop firewalld)
永久关闭防火墙(systemctl disable firewalld)
开启防火墙(systemctl start firewalld)
开放指定端口(firewall-cmd --zone=public --add-port=8080/tcp --permanent)
关闭指定端口(firewall-cmd --zone=public --remove-port=8080/tcp --permanent)
立即生效(firewall-cmd --reload),开放或者关闭端口后需要执行立即生效命令
查看开放的端口(firewall-cmd --zone=public --list-ports)
注意:
- 1、Systemctl是管理Linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作
 - 2、firewall-cmd是Linux中专门用于控制防火墙的命令
 - 3、为了保证系统安全,服务器的防火墙不建议关闭,只需开放指定的端口就行,例如Tomcat就可以开发8080端口,Mysql数据库开放3306端口
 
11、Linux-服务 
- systemctl status [服务名]
 - systemctl start [服务名]
 - systemctl enable mysqld 开机启动mysql服务
 - netstat-tunlp 查看已经启动的服务(使用netstat命令,需要提前导入yum install net-tools)
 
(1)案例-启动mysql服务mysqld 

- systemctl status mysqld 查看mysql服务状态
 - systemctl start mysqld 启动mysql服务
 
说明:
可以设置开机时启动mysql服务,避免每次开机启动mysql
- systemctl enable mysqld 开机启动mysql服务
 
前提:使用netstat命令,需要提前导入yum install net-tools
- netstat-tunlp 查看已经启动的服务
 - netstat-tunlp|grep mysql
 - ps -ef|grep mysql 查看mysql进程
 
12、Yum-软件包管理器 

13、nohup-挂起进程 

改为后台运行SpringBoot程序,并将日志输出到日志文件
目前程序运行的问题
- 线上程序不会采用控制台霸屏的形式运行程序,而是将程序在后台运行
 - 线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息
 
nohup命令:英文全称nohangup(不挂起),用于不挂断地运行指定命令,退出终端不会影响程序的运行
语法格式:nohup Command [Arg...] [&]
参数说明:
- Command:要执行的命令
 - Arg:一些参数,可以指定输出文件
 - &:让命令在后台运行
 
举例:hello.log为日志文件
nohup java -jar springboot工程.jar &> hello.log &nohup java -jar boot工程.jar &>hello.log& 后台运行java-jar命令,并将日志输出到hello.log文件
六、软件安装 
1、软件安装方式 

- 二进制发布包安装
- 软件已经针对具体平台编译打包发布,只要解压,修改配置即可
 
 - rpm安装
- 软件已经按照redhat(红帽)的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题(无法实现依赖传递)
 
 - yum安装
- 一种在线软件安装方式(需要联网),本质上还是rpm安装,自动下载安装包并安装,安装过程中自动解决库依赖问题
 
 - 源码编译安装
- 软件以源码工程的形式发布,需要自己编译打包
 
 
2、使用finalshell快捷上传文件 

3、JDK安装 

4、Tomcat安装 
(1)安装Tomcat 

(2)验证Tomcat是否启动成功 

(3)防火墙操作 

(4)停止Tomcat服务 

停止Tomcat服务的方式:
①法一-脚本文件 
运行Tomcat的bin目录中提供的停止服务的脚本文件 shutdown.sh
执行命令:
sh shutdown.sh
./shutdown.sh
②法二:结束进程 
结束Tomcat进程
- 查看Tomcat进程,获得进程id
 

- 执行命令结束进程kill -9 进程号
 
注意
- kill命令是Linux提供的用于结束进程的命令,-9表示强制结束
 
5、MySQL安装 
(1)安装MySQL 
①检测当前系统中是否安装MySQL数据库 

rpm -qa 查询当前系统中安装的所有软件
rpm -qa| grep mysql 查询当前系统中安装的名称带mysql的软件
rpm -qa| grep mariadb 查询当前系统中安装的名称带mariadb的软件
RPM(Red-HatPackageManager)RPM软件包管理器,是红帽Linux用于管理和安装软件的工具
注意事项
- 如果当前系统中已经安装有MySQL数据库,安装将失败。CentOS7自带mariadb,与MySQL数据库冲突,需要删除mariadb,才能安装Mysql
 
②卸载已经安装的冲突软件 

卸载软件
- rpm -e --nodeps 软件名称
 - rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
 
③将资料中提供的MySQL安装包上传到Linux并解压 

- mkdir /usr/local/mysql
 - tar -zxvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz -C /usr/local/mysql
 
④按照顺序安装rpm软件包 
root用户用 yum localinstall *.rpm ,一次性安装所有软件包,不需要考虑顺序问题

rpm-ivhmysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
rpm-ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
yum install net-tools
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
说明1:安装过程中提示缺少net-tools依赖,使用yum安装
说明2:可以通过指令升级现有软件及系统内核
- yum update
 
(2)启动MySQL服务 

- systemctl status mysqld 查看mysql服务状态
 - systemctl start mysqld 启动mysql服务
 
说明:
可以设置开机时启动mysql服务,避免每次开机启动mysql
- systemctl enable mysqld 开机启动mysql服务
 
前提:使用netstat命令,需要提前导入yum install net-tools
- netstat-tunlp 查看已经启动的服务
 - netstat-tunlp|grepmysql
 - ps -ef|grep mysql 查看mysql进程
 
(3)查阅临时密码 

(4)修改密码,开放访问权限 

登录MySQL,修改密码,开放访问权限
- mysql -uroot -p 登录mysql(使用临时密码登录)
 
修改密码
- set global validate_password_length=4; 设置密码长度最低位数
 - set global validate_password_policy=LOW; 设置密码安全等级低,便于密码可以修改成root
 - set password = password('root'); 设置密码为root
 
开启访问权限
- shell
grant all on *.* to 'root'@'%' identified by'root'; #允许外部访问mysql flush privileges; (刷新权限)
(5)测试 
记得开放防火墙的3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent #开发3306端口
firewall-cmd --reload #刷新

6、安装Git 


7、安装Maven 

tar-zxvfapache-maven-3.5.4-bin.tar.gz-C/usr/local
vim/etc/profile 修改配置文件,加入如下内容
- export MAVEN_HOME=/usr/local/apache-maven-3.5.4
 - export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
 - source/etc/profile
 
mvn -version 查看maven版本
修改配置文件内容如下
**vim /usr/local/apache-maven-3.5.4/conf/settings.xml **
指定Maven以后依赖保存的本地仓库
<localRepository>/usr/local/repo</localRepository> #指定Maven以后依赖保存的本地仓库8、安装Nginx 
(1)前言 
Nginx是一款卓越的高性能Web服务器,被广泛用于托管网站和应用程序。本文旨在为您提供详细的指南,帮助您在Linux系统上成功安装、配置和启动Nginx服务器。通过这一过程,您将了解如何将Nginx集成到您的系统中,以便轻松地托管您的网站和应用程序。
(2)安装依赖项 
在开始安装Nginx之前,首先需要安装一些依赖项,以确保Nginx编译和运行正常。打开终端并执行以下命令:
yum install -y wget gcc-c++ pcre-devel zlib-devel openssl-devel这将安装必要的工具和库,以支持Nginx的编译和运行。
(3)下载Nginx 
从Nginx官网下载最新的稳定版本。您可以在https://nginx.org/en/download.html上找到最新版本的下载链接。

# 例如,下载Nginx 1.24.0版本
wget https://nginx.org/download/nginx-1.24.0.tar.gz创建一个文件夹
cd /usr/local
mkdir nginx
cd nginx
解压Nginx
解压下载的Nginx源代码包:
tar -zxvf nginx-1.24.0.tar.gz -C /usr/local/nginx编译和安装
进入解压后的Nginx目录并进行编译和安装:
# 切换到 Nginx 解压目录
cd /usr/local/nginx/nginx-1.24.0
# 编译前的配置和依赖检查,考虑到后续安装ssl证书(https)、http 添加两个模块
./configure --with-http_stub_status_module --with-http_ssl_module
# 编译安装
make && make installNginx安装完成后,默认自动创建 /usr/local/nginx 目录,并创建必要的文件和目录,包括配置文件、日志文件、HTML文件等。

(4) 配置nginx环境变量 
vim /etc/profileexport NGINX_HOME=/usr/local/nginx
export PATH=$PATH:$NGINX_HOME/sbin(5)重新加载配置文件 
 source /etc/profile(6) 启动Nginx 
进入Nginx的安装目录:
cd /usr/local/nginx/sbin然后,启动Nginx服务器:
./nginx
您现在可以通过浏览器访问您的服务器的IP地址或域名来验证Nginx是否正常工作。

9、lrzsz 图形化上传文件工具(finallshell已自带) 
#使用 rz命令进行图形化的文件上传
(1)使用rz命令进行图形化的文件上传 

七、项目部署 
1、手工部署-后端 
(1)在IDEA中开发SpringBoot项目并打成jar包 

(2)将jar包上传到Linux服务器 

(3)启动SpringBoot程序 

(4)检查防火墙,确保8080端口对外开放,访问SpringBoot项目 

(5)改为后台运行SpringBoot程序,并将日志输出到日志文件 

改为后台运行SpringBoot程序,并将日志输出到日志文件
目前程序运行的问题
- 线上程序不会采用控制台霸屏的形式运行程序,而是将程序在后台运行
 - 线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息
 
nohup命令:英文全称nohangup(不挂起),用于不挂断地运行指定命令,退出终端不会影响程序的运行
语法格式:nohup Command [Arg...] [&]
参数说明:
- Command:要执行的命令
 - Arg:一些参数,可以指定输出文件
 - &:让命令在后台运行
 
举例:hello.log为日志文件
nohupjava -jar springboot工程.jar &> hello.log &nohupjava -jar boot工程.jar &>hello.log& 后台运行java-jar命令,并将日志输出到hello.log文件
(6)停止SpringBoot程序 

2、Shell脚本自动部署-后端 

(1)安装Git 


(2)安装Maven 

tar-zxvfapache-maven-3.5.4-bin.tar.gz-C/usr/local
vim/etc/profile 修改配置文件,加入如下内容
- export MAVEN_HOME=/usr/local/apache-maven-3.5.4
 - export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
 - source/etc/profile
 
mvn -version 查看maven版本
修改配置文件内容如下
**vim /usr/local/apache-maven-3.5.4/conf/settings.xml **
指定Maven以后依赖保存的本地仓库
<localRepository>/usr/local/repo</localRepository> #指定Maven以后依赖保存的本地仓库(3)编写Shell脚本(拉取代码、编译、打包、启动) 
在/usr/local/sh目录下, 将shell脚本文件加入到该目录中

shell脚本(需要根据自己的项目,自定义配置)
- APP_NAME
 - 存放Git拉取后的项目位置,cd /usr/local/helloworld
 - 启动项目的jar包和存放实时日志文件的位置即文件名,nohup java -jar helloworld-1.0-SNAPSHOT.jar &> helloworld.log &
 
#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================
echo 停止原来运行中的工程
APP_NAME=helloworld
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi
echo 准备从Git仓库拉取最新代码
cd /usr/local/helloworld
echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成
echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
cd target
echo 启动项目
nohup java -jar helloworld-1.0-SNAPSHOT.jar &> helloworld.log &
echo 项目启动完成可以遇到的问题:
$'\r': 未找到命令:这通常是因为脚本文件中包含了 Windows 风格的换行符(CRLF)而不是 Unix 风格的换行符(LF)。Unix 系统要求换行符为 LF,而 Windows 使用 CRLF。如果脚本是从 Windows 环境中复制或编辑的,可能会出现这个问题。- 如果你的系统没有安装 
dos2unix,你可以用sed命令来修复: 
sed -i 's/\r$//' sky-take-out.sh- 如果你的系统没有安装 
 语法错误: 未预期的文件结尾:这可能是因为文件末尾的换行符问题,或者脚本文件中有其他格式问题导致的。也有可能是因为有一些未闭合的结构,比如if语句没有正确结束。- 确保脚本中的每个 
if、for、while语句都有正确的结束标记。例如,确保if语句后面有fi。 
- 确保脚本中的每个 
 
(4)为用户授予执行Shell脚本的权限 
①文件权限 

chmod(英文全拼:changemode)命令是控制用户对文件的权限的命令
- Linux中的权限分为:读(r)、写(w)、执行(x)三种权限
 - Linux的文件调用权限分为三级:文件所有者(Owner)、用户组(Group)、其它用户(OtherUsers)
 - 只有文件的==所有者和超级用户(root)==可以修改文件或目录的权限
 - 要执行ShelL脚本需要有对此脚本文件的执行权限,如果没有则不能执行
 
①为用户授权 

除了第一位使用==-或者d来区分该文件时目录还是文件==
将之后的九位数,划分为三组,通过0~7(000~111)的八进制数来代表授予每组的权限
注意:三位数字分别代表不同用户的权限
- 第1位表示文件拥有者的权限
 - 第2位表示同组用户的权限
 - 第3位表示其他用户的权限
 


(5)执行Shell脚本 

(6)设置静态ip 
为了防止每次重新启动虚拟机,让ip地址发生变化,导致网站的ip地址不确定,需要设置虚拟机的ip为静态ip
①设置静态ip 
vim /etc/sysconfig/network-scripts/ifcfg-ens33
注意:修改后的静态ip、网关、DNS服务器的网段需要和此处保持一致,即192.168.138.xx
BOOTPROTO="static"  #使用静态IP地址,默认为dhcp
IPADDR="192.168.138.100" #设置的静态IP地址
NETMASK="255.255.255.0"  #子网掩码
GATEWAY="192.168.138.2"  #网关地址
DNS1="8.8.8.8"  #DNS服务器②重启网络服务 
systemctl restart network注意:重启完网络服务后ip地址已经发生了改变,此时FinalShell已经连接不上Linux系统,需要创建一个新连接才能连接到Linux。

3、部署架构-前后端,客户端、主从数据库、Redis 


(1)安装/配置/启停 Nginx 
① 前言 
Nginx是一款卓越的高性能Web服务器,被广泛用于托管网站和应用程序。本文旨在为您提供详细的指南,帮助您在Linux系统上成功安装、配置和启动Nginx服务器。通过这一过程,您将了解如何将Nginx集成到您的系统中,以便轻松地托管您的网站和应用程序。
② 安装依赖项 
在开始安装Nginx之前,首先需要安装一些依赖项,以确保Nginx编译和运行正常。打开终端并执行以下命令:
yum install -y wget gcc-c++ pcre-devel zlib-devel openssl-devel这将安装必要的工具和库,以支持Nginx的编译和运行。
③下载Nginx 
从Nginx官网下载最新的稳定版本。您可以在https://nginx.org/en/download.html上找到最新版本的下载链接。

# 例如,下载Nginx 1.24.0版本
wget https://nginx.org/download/nginx-1.24.0.tar.gz创建一个文件夹
cd /usr/local
mkdir nginx
cd nginx
解压Nginx
解压下载的Nginx源代码包:
tar -zxvf nginx-1.24.0.tar.gz -C /usr/local/nginx编译和安装
进入解压后的Nginx目录并进行编译和安装:
# 切换到 Nginx 解压目录
cd /usr/local/nginx/nginx-1.24.0
# 编译前的配置和依赖检查,考虑到后续安装ssl证书(https)、http 添加两个模块
./configure --with-http_stub_status_module --with-http_ssl_module
# 编译安装
make && make installNginx安装完成后,默认自动创建 /usr/local/nginx 目录,并创建必要的文件和目录,包括配置文件、日志文件、HTML文件等。

④ 配置nginx环境变量 
vim /etc/profileexport NGINX_HOME=/usr/local/nginx
export PATH=$PATH:$NGINX_HOME/sbin⑤ 重新加载配置文件 
 source /etc/profile⑥ 启动Nginx 
进入Nginx的安装目录:
cd /usr/local/nginx/sbin然后,启动Nginx服务器:
./nginx
您现在可以通过浏览器访问您的服务器的IP地址或域名来验证Nginx是否正常工作。

配置nginx.conf=>打开配置文件 

vi /usr/local/nginx/conf/nginx.conf将端口号改成8089(随便挑个端口),因为可能apeache占用80端口,apeache端口尽量不要修改,我们选择修改nginx端口。
将localhost修改为你服务器的公网ip地址。

nginx.conf
#user  nobody;  #指定 Nginx 进程以哪个用户的身份运行,通常会设置为非特权用户以增强安全性。被注释掉了,默认运行用户可能是 nginx 或 www-data。
worker_processes  1;  #指定 Nginx 使用的工作进程数量。一般根据 CPU 核心数设置,1 是最基本的配置。
#error_log  logs/error.log;   #指定错误日志文件的位置和日志级别。被注释掉了,默认的错误日志级别和位置会被使用。
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;  #指定 Nginx 进程 ID 文件的位置。被注释掉了,默认位置可能是 /var/run/nginx.pid。
events {
    worker_connections  1024;  #每个工作进程最大可以打开的连接数。设置为 1024,这意味着 Nginx 可以同时处理最多 1024 个连接。
}
http {
    include       mime.types;  #包含 MIME 类型配置文件,以便为响应设置适当的 Content-Type。
    default_type  application/octet-stream;  #设置默认 MIME 类型为 application/octet-stream,通常用于未指定类型的文件。
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;  #启用高效的文件传输。
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;  #设置客户端与服务器之间的持久连接超时时间为 65 秒。
    #gzip  on;
	
	map $http_upgrade $connection_upgrade{  #配置 WebSocket 连接的升级机制。
		default upgrade;
		'' close;
	}
#使用upstream指令配置后端服务器组
	upstream webservers{  #定义了一个名为 webservers 的负载均衡后端服务器组
	#负载均衡
      #本地后端,8080端口
	  #server 127.0.0.1:8080 weight=90 ;
      #Linux部署后端
      server 192.168.88.129:9090 weight=90 ;
      #本地后端,9090端口
      #server 127.0.0.1:9090 weight=90 ;  
	  #server 127.0.0.1:8088 weight=10 ;
	}
    server {
        listen    80;  #监听 80 端口的 HTTP 请求
        server_name  localhost;  #指定外部访问的服务器名称为 localhost。
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {  #根路径配置,将请求的根路径指向 html/dist 目录,默认首页是 index.html 和 index.htm。
            root   html/dist;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # 反向代理,处理管理端发送的请求
        location /api/ {  #反向代理到 http://webservers/admin/
        		#rewrite ^/api/(.*)$ /$1 break;  #请求 /api/data 会被前端代理重写为 /data,然后在 Nginx 层直接转发到 http://webservers/admin/data。
			proxy_pass   http://webservers/admin/;
            #proxy_pass   http://webservers/admin/;
        }
		
		# 反向代理,处理用户端发送的请求
        location /user/ { #反向代理到 http://webservers/user/
            proxy_pass   http://webservers/user/;
        }
		
		# WebSocket
		location /ws/ {  #处理 WebSocket 连接,设置 proxy_http_version 1.1 和其他 WebSocket 特定的头部。
            proxy_pass   http://webservers/ws/;
			proxy_http_version 1.1;
			proxy_read_timeout 3600s;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection "$connection_upgrade";
        }
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}⑦ 停止Nginx 
#寻找Nginx进程
ps -ef | grep nginx
#杀死Nginx进程
kill -9 78879⑧ 防火墙设置 
如果您的系统启用了防火墙,需要关闭防火墙或者**开发相应的端口**
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 开机禁用防火墙
systemctl disable firewalld
#开放Nginx的80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload  #开放或者关闭端口后==需要执行立即生效命令
firewall-cmd --zone=public --list-ports  #查看开放的端口(2)前端-Nginx部署 
①前端打包成dist 
终端输入,打包获得dist目录文件
npm run build

上传到服务端 

②WebSocket请求路径错误 
VUE_APP_SOCKET_URL = 'ws://192.168.88.130:80'
这里是WebSocket的地址,Nginx会反向代理到后端,需要注意的是,这里的url不能写为ws://192.168.88.129:9090/ws/,否则会导致WebSocket连接失败,需要在使用的时候再去拼接'/ws/',

# Base api
VUE_APP_BASE_API = '/api'
# 统一前缀,'/api' http://localhost:8080/api
NODE_ENV = 'development'
VUE_APP_NODE_ENV = 'dev'
//后端服务的地址
#VUE_APP_URL = 'http://localhost:8080/admin'
VUE_APP_URL = 'http://192.168.88.129:9090/admin'
#VUE_APP_SOCKET_URL = 'ws://localhost:8080/ws/'
VUE_APP_SOCKET_URL = 'ws://192.168.88.130:80' #这里是WebSocket的地址,Nginx会反向代理到后端,
#需要注意的是,这里的url不能写为ws://192.168.88.129:9090/ws/,否则会导致WebSocket连接失败,需要在使用的时候再去拼接'/ws/',
//VUE_APP_SOCKET_URL = 'ws://http://23ce4dbd.cpolar.cn/ws/'
VUE_CLI_BABEL_TRANSPILE_MODULES = true
# 删除权限 true/有
VUE_APP_DELETE_PERMISSIONS = true八、(MySQL的主从复制)数据库的读写分离 
1、介绍 

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。
MySQL复制过程分成三步:
- master将改变记录到二进制日志(binarylog)
 - slave将master的binarylog拷贝到它的中继日志(relaylog)
- 通过开启I/O thread 线程从master主库中读取binlog,在写入slave从库的中继日志relaylog。
 - 在从库中在通过SQL thread线程解析日志,执行和主库一样的sql操作
 
 - slave重做中继日志中的事件,将改变应用到自己的数据库中
 
2、配置 
(1)前置条件 

①解决 VMware 克隆linux 网卡UUID重复问题 
2019年04月06日 系统版本:CentOS Linux release 7.6.1810
参考文档
https://www.cnblogs.com/wayneliu007/p/10388417.html
当我们使用 VMware 克隆 linux 主机时会发生克隆主机和原主机网卡 UUID 重复的问题,这样会对网络通信产生影响。 只要保证每台主机的 UUID 独一无二即可,即为新的主机绑定新的 UUID。
- 生成随机uuid号
 
# uuidgen	
46269697-0bd5-4088-af92-337325daea9e- 替换UUID值
 
# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPV6_PRIVACY=no
IPADDR=192.168.0.11
PREFIX=24
GATEWAY=192.168.0.1
DNS1=192.168.0.1
DNS2=114.114.114.114
UUID=46269697-0bd5-4088-af92-337325daea9e- 重启网络服务
 
# systemctl restart network- 验证查看
 
此时新主机的网卡UUID值设置完毕,可以通过 nmcli 命令查看 查看网卡 UUID值
# nmcli connection show
NAME   UUID                                  TYPE      DEVICE 
ens33  46269697-0bd5-4088-af92-337325daea9e  ethernet  ens33查看网卡 MAC
# nmcli device show ens33
GENERAL.DEVICE:                         ens33
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:BD:FC:FA
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (连接的)
GENERAL.CONNECTION:                     ens33
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
WIRED-PROPERTIES.CARRIER:               开
IP4.ADDRESS[1]:                         192.168.0.11/24
IP4.GATEWAY:                            192.168.0.1
IP4.ROUTE[1]:                           dst = 192.168.0.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.0.1, mt = 100
IP4.DNS[1]:                             192.168.0.1
IP4.DNS[2]:                             114.114.114.114
IP6.ADDRESS[1]:                         fe80::f5fc:c628:ab36:49a1/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 100
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255(2)主库-Master 
find / -name "my.cnf"log-bin=mysql-bin  #[必须]启用二进制日志
server-id=100  #[必须]服务器唯一IDsystemctl restart mysqld


GRANT REPLICATION SLAVE ON *.* to'xiaopeng'@'%'identified by'123456';
#报错就分开执行
CREATE USER 'xiaopeng'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'xiaopeng'@'%';注:上面SQL的作用是创建一个用户xiaoming,密码为Root@123456,并且给xia0ming用户授予**REPLICATION SLAVE权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权,成为具有该权限的用户,才能通过该用户复制**。

由于主库的二进制日志文件和位置,会因为操作数据库发生变化,后续在从库中需要使用;
show master status; #由于主库的二进制日志文件和位置,会因为操作数据库发生变化,后续在从库中需要使用;(3)从库-Slave 


find / -name "my.cnf"server-id=101  #[必须]服务器唯一IDsystemctl restart mysqld
change master to master_host='192.168.138.100',master_user='xiaopeng',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=439;start slave;注意


show slave status\G(4)注意事项 
①在从库中使用 show slave status; 时报错 
主从复制报错Fatal error:The slave I/O thread stops because master and slave have equal MySQL server UUIDs;




