admin管理员组

文章数量:1651817

JAVA菜鸟从零开始----Linux操作篇


课程目标

1:了解linux操作系统

2:熟练常用的Linux命令

3:使用linux安装部署软件

4:前后端分离的项目部署到Linux

5:熟练shell编程

Linux诞生于1991年,由芬兰大学生李纳斯(Linus)和后来陆陆续续加入的众多爱好者共同开发完成

一. linux操作系统的基本介绍

1.1 linux操作系统特点

1. 免费开源。Linux是一款完全免费的操作系统,任何人都可以从网络上下载到它的源代码,并可以根据自己的需求进行定制化的开发,而且没有版权限制。
2. 模块化程度高。Linux的内核设计分成进程管理、内存管理、进程间通信、虚拟文件系统、网络5部分,其采用的模块机制使得用户可以根据实际需要,在内核中插入或移走模块,这使得内核可以被高度的剪裁定制,以方便在不同的场景下使用。
3. 安全稳定。核心防火墙组件性能高、配置简单、比window稳定宕机概率很低
4. 多用户,多任务。多用户是指系统资源可以同时被不同的用户使用,每个用户对自己的资源有特定的权限,互不影响。多任务是现代化计算机的主要特点,指的是计算机能同时运行多个程序,且程序之间彼此独立,Linux内核负责调度每个进程,使之平等地访问处理器。由于CPU处理速度极快,从用户的角度来看所有的进程好像在并行运行。

1.2 linux发行版本

基于Linux内核的发行版

版本名称网 址特 点软件包管理器
Debianwww.debian开放的开发模式,且易于进行软件包升级apt
Ubuntuwww.ubuntuUbuntu 基于知名的 Debian Linux 发展而来。界面友好,容易上手,对硬件的支持非常全面,是目前最适合做桌面系统的 Linux 发行版本,而且 Ubuntu 的所有发行版本都免费提供。apt
Redhatwww.redhat拥有数量庞人的用户,优秀的社区技术支持. 并且有许多创新yum
CentOSwww.centosCentOS 就是将商业的 Linux 操作系统 Redhat进行源代码再编译后分发,并在 Redhat的基础上修正了不少已知的漏洞yum
SUSEwww.suse专业的操作系统,易用的 YaST 软件包管理系统YaST(rpm)
Mandrivawww.mandriva操作界面友好,使用图形配置工具,有庞大的社区进行技术支持,支持 NTFS 分区的大小变更rpm
KNOPPIXwww.knoppix可以直接在 CD 上运行,具有优秀的硬件检测和适配能力,可作为系统的急救盘使用apt
Gentoowww.gentoo高度的可定制性,使用手册完整portage

1.3 Linux 发行版本的选择

1:如果你需要的是一个【服务器系统】,而且已经厌烦了各种 Linux 的配置,只是想要一个比较稳定的服务器系统,那么建议你选择 CentOS 或 RHEL。
2:如果你只是需要一个桌面系统,而且既不想使用盗版,又不想花大价钱购买商业软件,不想自己定制,也不想在系统上浪费太多时间,则可以选择 Ubuntu。
3:如果你想深入摸索一下 Linux 各个方面的知识,而且还想非常灵活地定制自己的 Linux 系统,那就选择 Gentoo 吧,尽情享受 Gentoo 带来的自由快感。

1.4Linux操作系统的安装

1.VMware安装

VMWare虚拟机软件是一个"虚拟PC"软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与"多启动"系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。

2.虚拟机安装

3.操作系统安装

4.设置静态ip

上网模式,统一为:NAT

虚拟机默认采用DHCP,IP就会经常变化,导致我们连接虚拟机的服务(mysql)连不上

设置命令:nmtui

修改后,需要重启网络服务

重启命令:systemctl restart network

查看 ip addr

测试

在宿主机去ping虚拟机

在虚拟机ping 百度

5 shell终端工具

1.5. Linux的目录结构

​ linux的目录结构与windows有很大的区别,windows有盘符的概念,例如C盘,D盘等。而Linux的目录结构类似于一棵倒着的树,最顶层的就是根目录

目录名作用
/bin存放最经常使用的命令
/boot存放启动Linux操作系统的时候的一些核心文件
/etc存放系统管理和配置文件
/dev用于存放设备文件
/home存放的用户的目录,每个用户都有一个属于自己的目录
/opt额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。
/usr用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录
/var用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。

二、Linux系统的命令

设置ip

ifconfig 查看ip

cd /etc/sysconfig/network-scripts

vi ifcfg-ens33 使用vi 来编辑该

ONBOOT=no 改为 ONBOOT=yes

systemctl restart network

ifconfig

0.常用命令

- ip addr						// 查看ip
- ifconfig						// 查看ip
- which命令			   		   // 搜索命令所在目录及别名信息	范例: $which ls
- pwd  			    	 		// 查询当前目录位置
- tap 	 						// 自动补全  
- ctrl+L						// 清屏
- ctrl+c						// 退出
- man 命令			  		   // 查看提示,字母含义
- systemctl    stop    firewalld  // 关闭防火墙
- yum install vim*	 	 		 // 安装vim,安装选择y,   -y 表示所有选择都是y
  
- du -h -d 1				  // -h表示人类可读,-d 1  深度为1	  查看深度为1的文件夹大小
- ll  -h						// 查看文件大小
  
- nmtui							// 设置静态IP
- systemctl restart network		  //重启网络命令
- ip	addr					// 查看ip

java -jar springboot-vue-1.0-SNAPSHOT.jar --server.port=8282	//修改端口

1. 目录的切换(change directory)

- cd   				// 切换到家目录
- cd /test 			// 绝对目录,切换到test目录下
- cd test			// 相对路径,在当前目录下寻找test
- cd -				// 切回到上一此编辑的目录。
- cd ~ 				// 切回到当前用户的家目录。
- cd .. 			// 切到当前目录的上一级目录。
- cd /				// 切换到顶级目录(cd+空格)

2. 文件内容的查看

- cat		// 查看文件的全部内容
- head 	 	// 默认查看文件内容的前10行
- tail		// 默认查看文件内容的后10行
- more		// 分页查看文件内容,使用空格键向下翻页,但是只能向下翻页。
- less		// 分页查看文件内容,使用空格键向下翻页,也可使用PgUp和PgDown实现向上、向下翻页。

查看文件内容的命令:

vi 文件名 查看文件内容

vim 文件名 查看内容增强版(带高亮效果)

cat 文件名 查看文件内容(展示所有文件内容)

more 文件名 翻页(只能往下)

less 文件名 翻页(可以向上向下)

head -5 文件名 查看头5行内容(包含空行,默认10行)

tail -5 文件名 查看后5行内容

3. 文件夹内容的查看

- ls(list)// 查看文件夹中的内容
- ls -a: 		 		 // 查看文件夹中的内容,包括隐藏文件
- ls -l(可以简写成ll)      // 查看文件夹中的内容的详细信息
- ll -h     			 // -h表示按人类友好方式查看

查看到文件夹的详细信息后,会看到有七栏,那么我们分别来解释一下是什么意思:

​ 第一栏:有10个符号,第一个符号表示表示文件的属性,-表示是文件,d是目录,l是连接文件;后面9为分别分三组,每组均为rwx,r是可读,w是可写,x是可执行,第一组表示当前的用户的权限,第二组是用户组的权限;第三组是其他用户的权限。

​ 第二栏:是文件或者文件夹的个数,如果说文件就为1,如果目录的情况下就是该目录下文件夹的个数,其中包括当前目录和上级目录。

​ 第三栏:当前文件或者文件夹所属的用户。

​ 第四栏:当前文件或者文件夹所属的用户组。

​ 第五栏:当前文件或者文件夹的大小,单位为KB。

​ 第六栏:创建的时间。

​ 第七栏:文件或者文件夹或者链接的名字。

4. 相对路径、绝对路径

./			//表示当前目录
../			//表示上级目录
cd   home		//切换到home目录下,绝对路径
cd	 /home		//切换到当前目录的home文件下,相对路径

相对路径所选择的参照物就是我们当前执行操作所处的目录;

绝对路径所选择的顶级目录就是我们的根(/)目录。

5. 文件夹、文件的创建

- touch  a.txt 	b.txt    	 // 创建文件a 和 文件b
- mkdir test 				// 创建一个名为test的文件夹。
- mkdir -p /a/b  			//  创建目录a, 然后在目录a下创建目录b.

- vm a.txt				    //创建并进入文件a.txt
- echo "hello">>c.txt        //创建并添加内容hello到 c.txt

6. 文件、文件夹的删除

- rm test			// 删除名为test的文件或者空的文件夹,会出现询问是否要删除。
- rm -f test		// 删除名为test的文件或者空的文件夹,不会出现提示。
- rm -rf test		// 删除名为test的文件或者文件夹,-r是recursion,递归的意思。

7. 文件或者文件夹的拷贝

- cp  ./test /data			// 将当前目录下的test文件拷贝到 /data目录下。
- cp /test/a.txt /datas		// 将/test目录下的a.txt文件拷贝到/datas目录下。
- cp -r /test /datas: 		// 将/test目录拷贝到/datas目录下,-r是recursion,递归的意思,无论/test文件夹是否为空。
- cp -r /test/* /datas/: 	// 将/test目录下的所有内容拷贝到/datas目录下。

8.文件、文件夹的移动

- mv test /datas		// 将当前目录下的test文件或者文件夹移动到/datas目录下。
- mv /test/* /datas		// 将/test目录下的所有内容移动到/datas目录下。

9.文件、文件夹的重命令

- mv test test1			// 将test目录或者文件重命名为test1。

10.vi、vim的使用

​ vi为linux操作系统自带的文本编辑器,其功能非常的强大,我们必须要掌握其使用,为我们修改各种配置或者编写脚本文件奠定基础。其快捷键命令如下:

vi 或 vim// 进入文件,编辑模式
i// 光标所在前插入,输入模式
I// 光标所在行首插入,输入模式
a// 光标所在后插入,输入模式
A// 光标所在行尾插入,输入模式
o// 进入到当前行的下一行进行编辑,输入模式
O// 进入到当前行的上一行进行编辑,输入模式
Esc// 进入命令行模式
// 进入底线命令模式
:wq// 保存并退出
命令含义命令的模式
Esc (重点)从编辑模式进入到命令行模式编辑模式
i (重点)在当前字符前插入编辑模式
a在当前字符后插入编辑模式
A在当前行末进行插入编辑模式
I在当前开头进行插入编辑模式
o (重点)进入到当前行的下一行进行编辑编辑模式
O (重点)进入到当前行的上一行进行编辑编辑模式
yy (重点)复制一行编辑模式
p (重点)粘贴yy复制的一行内容编辑模式
dd (重点)删除一行编辑模式
h (重点)向左移动光标编辑模式
l (重点)向右移动光标编辑模式
j (重点)光标向上移动编辑模式
k (重点)光标向下移动编辑模式
G光标移动文件的末尾命令行模式
gg光标移动到文件的开头命令行模式
q退出文件命令行模式
:wq (重点)保存并退出命令行模式
:set nu! (重点)设置或取消行号命令行模式
u (重点)撤销上一次操作命令行模式
w光标跳到下一个单词的首字母命令行模式
b光标跳到上一个单词的首字母命令行模式
$光标跳到该行的末尾命令行模式
0光标跳到该行的开头命令行模式
:/public查找出public这个单词命令行模式
n跳转到下一个查找到内容命令行模式
N查找到上一个查找到的内容命令行模式
:/public\c大小写不敏感查找命令行模式
:%s/abc/QQ将当前行的第一个abc换成QQ命令行模式
:%s/abc/QQ/g将整行所有的abc替换为QQ命令行模式
:%s/abc/QQ/gi将全文的所有的abc忽略大小写换成qq,命令行模式
:5,12s/abc/QQ/gi将第5到12行所有的abc忽略大小写换成QQ命令行模式
ctrl + j在编辑模式实现换行操作编辑模式
数字 + G直接跳转到对应的行命令行模式
:set nu显示行号底线模式
:set nonu不显示行号底线模式
:wq保持退出底线模式
:q!强制退出底线模式
/内容//查找内容底线模式
n查找下一个底线模式
:%s/jack/rose/g全局查找替换,jack 替换成rose底线模式

11. 内容过滤

- grep    public   文件名					// 过滤出该文件中所有带有public的行
- grep    -v  public   文件名				// 过滤出该文件中所有不带有public的行
- tail MovieController.java | head -5     	// 管道操作
- ps  -ef  |  grep  tomcat				   // 查看包含tomcat的进程的详细信息
- ps  -aux |  grep   java				   // 查看系统中包含java的进程	
- ll  | grep sys			 			  // 查询详细内容中包含sys的

12.管道操作(面试)

管道操作就是将上一步操作的结果作为下一部操作的数据源,使用 “|” 符号。

例如:

ll | grep abc: 查找出当前文件夹下名字含有abc的文件夹或者文件。

练习:1. 查看/etc/passwd文件的第5到第8行的内容。(head -8 passwod | tail -4)

​ 2.查看/etc/passwd文件的倒数第10行到倒数第3行的内容。

13.进程管理

1.查看进程

- ps -ef		// 查看当前操作系统中所有正在运行的进程的详细信息,我们需要关注的是“进程号”
- ps -ef | grep tomcat                  // 查看tomcat这个进程的信息。

ps -ef|grep nginx |grep -v grep|wc -l           // wc -l 统计行数

ps -ef|grep mysql|grep -v grep |awk '{print $2}'  // 查看某个进程的进程id(pid)

netstat   -nultp				 // 查看已经使用的端口情况
netstat  -anp  |grep  3306		  // 查看3306端口的使用情况

yum install -y lsof			//安装lsof命令
lsof -i:3306				//查看3306端口的使用情况

jps  						// 查看java进程

2.关闭进程(杀死进程)

在关闭进程之前我们需要查看需要杀死的进程的pid,然后通过kill命令关闭进程。

通过kill -l 命令查看可以使用的杀死进程的方式

- kill -kill 5678 或者 kill -9 5678    // 杀死进程号为5678的进程。

 为什么可以使用 -kill 或者 -9 呢?我们通过kill -l 可以看到杀死进程的方式有64种,所有的方式都形如SIG***,我们将SIG去掉后的单词,就可以作为kill后的参数;又或者我们直接使用该命令对应的变好,
例如 SIGKILL 对应的编号为9,所以我们也可以使用 -9 作为参数。

14.服务管理

- systemctl							  // 查看所有的服务
- systemctl status 服务名				 // 查看服务状态
- systemctl stop 服务名				 // 关闭服务
- systemctl restart 服务名				 // 重启服务

- systemctl stop firewalld 				# 关闭防火墙命令
- top 								   # 查看系统资源消耗

15.软件的解压与压缩

在linux操作系统中我们最常见的两种文件是tar.gz和zip文件,那么针对这两种文件我们有不同的压缩和解压缩的方式。

  • tar.gz文件的解压、压缩,在实际工作中参数v不需要加,可能会导致机器卡死:
- tar -zxvf jdk-8u60-linux-x64.tar.gz				// 将jdk文件解压到当前目录。
- tar -zxvf jdk-8u60-linux-x64.tar.gz -C /test		 // 将jdk解压到 /test目录下。
- tar -zcvf hello.tar.gz jdk1.8.0_60				// 将 jdk文件夹压缩成hello.tar.gz文件。
  • zip文件的压缩与解压,在使用zip解压缩文件需要安装zip软件:
- unzip apache-tomcat-8.5.2-src.zip				// 将apache-tomcat文件解压到的当前目录
- unzip apache-tomcat-8.5.2-src.zip -d /test	 // 将apache-tomcat文件解压到 /test目录下
- zip -r apache.zip apache-tomcat-8.5.2-src      // 将apache-tomcat文件压缩成apache.zip文件
- yum  install  -y  unzip	压缩包				 # zip文件 安装并解压

注意:在使用unzip或者zip命令的时候,会报错,原因是因为没有zip的这个软件,需要使用yum install zip这个命令进行安装。

16.用户、用户组的相关命令

1.用户相关操作

- useradd rose				//创建用户rose
- id rose					//查看rose用户信息
- passwd rose 				//给rose用户添加密码 /修改密码
- su rose					//切换到rose用户  //普通用户切换root用户需要密码
- userdel rose -r             //删除rose用户,并且删除其家目录
- exit						//退出用户(先退出,再删除用户)

- cat /etc/passwd			 // 查看系统中拥有多少用户。

- visudo 								#编辑权限文件
- /wheel								#查找
rose  ALL=(root)	/user/bin/rm		  #给rose授权root的删除权限
- sudo -l								#查看用户有哪些权限
- sudo rm -rf a.txt						 #使用root授予的权限删除a.txt

2.用户组相关操作

- groupadd test				// 添加名为test的用户组
- cat /etc/group			// 查看所有的用户组
- groupdel test				// 删除test用户组
- useradd -m test -g test	 // 创建一个test用户,并指定其用户组为test
- usermod test -g abc		 // 将test用户的组改为abc

17.文件权限的管理

​ 前面我们已经讲过,对于一个文件或者文件夹,我们用户和用户组可以有rwx的权限。那么我们可以通过chmod命令修改文件的读写和执行权限。

r(4),w(2),x(1)

##字母授权:
- chmod u+w profile		// 将profile文件所属的用户加入写权限。

##数字授权:
- chmod 775 profile 	// 将profile文件所属的文件拥有rwx权限,用户组拥有rwx权限,其他用户拥有r-x权限。

##递归授权:
- chown -R  test   apache-tomcat-8.5.59		// 将 `apache-tomcat-8.5.59` 整个文件夹按照递归的方式,将所有权授予 test 用户。

对于 文件夹 来说:

  1. 可读权限®,表示是否可以查看文件夹下的内容;
  2. 可写权限(w),表示是否能在文件夹下创建文件或者文件夹,以及删除文件;
  3. 可执行权限(x),表示是否能够进入到文件夹下 cd ;

对于 文件 来说:

  1. 对于可读,表示是否能够查看文件的内容;
  2. 对于可写,表示是否能够修改文件的内容;
  3. 对于可执行权限,表示能不能执行,指的是是否可以执行一个shell 脚本,并不是表示能不能删除。

18.网络指令

虚拟机克隆

[root@localhost ~]# ssh root@192.168.25.103		//切换

hostnamectl set-hostname  主机名		// 修改主机名
hostname							// 查看主机名

vi /etc/hosts						// 主机名映射
systemctl restart network			 // 重启网络服务生效

19. 其他命令

- du -h 					   // 查看文件夹的大小,会以树状的结构展示。
- du -h --max-depth=1     		// 只查看一层文件夹的大小(h是human,是以人类可读的方式查看)
- ll -h 			     	   // 查看文件的大小。
- lvmdiskscan 			        // 检测各种类型的存储设备。
- pwd 				     	    // 查看当前操作所在的绝对路径。
- su - root			             //  切换到root用户。
- echo "hello world" > test.txt  // 将“hello world”写入到test.txt文件内,会覆盖文件中现有的内容
- echo "How are you?" >> test.txt   // 将“How are you?”追加到test.txt文件的末尾。
- netstat -tnpl 				   // 查看端口。
- systemctl stauts firewalld  		// 查看防火墙的状态。
- systemctl disable firewalld 		// 开机禁用防火墙。
- find  /  -name 'mysql'		 	// 递归查找/目录下包含了mysql的文件或者文件夹。
- find / -name  '\*mysql\*'  		// 递归查找/目录下名字中包含了mysql的文件或者文件夹。
- top 							  // 查看系统的资源消耗

三、Linux系统软件的安装部署

1.Linux软件安装的方式

  • 源码包-----编译----->安装

nginx、redis

  • 二进制包(RPM包)-------->通过(rpm、yum)直接安装

yum install -y vim*(系统级别的服务)

vim

jdk

mysql

  • tar.gz解压安装----->解压即可用

tomcat

2.RPM包安装命令

  • rpm本地安装命令(不用)

    rpm安装的缺点:rpm包的依赖性很强

- rpm -q 包名												// 查询包是否安装
- rpm -qa					 							 // 查询所有已经安装的RPM包
- rpm -ivh mysql57-community-release-el7-11.noarch.rpm		 // 安装
- rpm -e 包名												// 卸载
  • yum在线安装命令(常用)
前提:linux服务器能够连接外网
- yum list  							// 列出所有可安裝的软件清单
- yum list |grep vim					 // 从清单中找vim包
- yum search gcc						// 直接查找gcc包
- yum install gcc -y					 // 安装

3.安装mysql

第一步,安装wget:

yum install -y wget   #安装wget

第二步,安装mysql专有yum源:

wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

// yum localinstall -y mysql57-community-release-el7-11.noarch.rpm		
															//本地安装	-y 表示一直yes
yum install -y mysql57-community-release-el7-11.noarch.rpm

第三步,查看可用版本

//导入秘钥(略)    rpm --import https://repo.mysql/RPM-GPG-KEY-mysql-2022

yum repolist all | grep mysql			//查看可用版本

第四步,安装mysql:

// yum install -y mysql-community-server
yum install -y mysql-community-server	--nogpgcheck

第五步,启动mysql:

systemctl start mysqld				#启动mysql
systemctl status mysqld				#查看mysql状态
systemctl restart  mysqld			#重启mysql
systemctl stop  mysqld				#停止mysql服务
systemctl enable  mysqld			#开机自启动
systemctl disable  mysqld			#开机不启动

第六步,获取登录密码

grep 'temporary password' /var/log/mysqld.log 		//查看临时密码,查找

第七步,进入mysql:

mysql -uroot -p  
:输入密码

第八步,修改密码:

SET PASSWORD = PASSWORD('Admin123!');
eixt;								//退出

第九步,连接数据库

排查

1:宿主机ping服务器

2:mysql服务是否启动

3:是否关闭防火墙

systemctl status firewalld						//禁用防火墙,永久关闭
// systemctl stop firewalld						//关闭防火墙
systemctl disable firewalld						//查看防火墙状态

4.设置远程登录(授权)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Admin123!' WITH GRANT OPTION;
flush privileges;			//生效

mysql设置

mysql的配置文件真的很多,有的还很蛋疼。比如默认的字符集是拉丁字符集,每次创建数据库的时候要设置字符集;默认还不支持group by语句,默认的时区也不是我们现在的北京时间(东八区),会导致我们的时间差了13个点。针对以上说几个简要的配置,更多的配置在以后遇到了再加上,或者留言吧!
先输入exit退出数据库客户端。
打开配置文件,yum安装的默认在/etc文件夹下:

vim /etc/myf

#在[mysqld]下面添加,不需要分号字符集:注意是utf8而不是utf-8!
character-set-server=utf8
#这时候使用show variables like 'char%';就可以查看到字符集都是utf8了
#sql支持group by语句
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#设置时区为东八区
default-time_zone = '+8:00'

关闭防火墙:

临时关闭: systemctl stop firewalld

禁止开机启动 :systemctl disable firewalld

4.安装JDL

A.上传

B.解压:tar -zxvf 安装包名字 -C /解压位置

C.配置环境变量: vi /etc/profile

​ export JAVA_HOME =路径

​ export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH

D.source /etc/profile

E. java javac

注意:安装路径不能含空格

5.安装tomcat

注意:tomcat需要基于jdk安装

A.上传

B.解压

C.进入bin目录,启动 ./startup.sh

D. cd …/logs tail -10f catalina. 查看日志最后10行

6.安装nginx

第一步,一些准备工作

yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel

第二步,下载解压,下载地址:http://nginx/en/download.html,然后上传到linux上,然后解压

第三步,进入到解压目录,开始安装

./configure 
make
make install


第四步,查看nginx安装地址

whereis nginx


第五步,进入到sbin目录下,启动 nginx

./nginx

7.安装编译工具及库文件

四、前后端分离的项目部署到Linux

1. 服务端

先根据实际的情况修改响应的配置:

  1. 数据库的地址,用户名、密码等信息;
  2. jwt的过期日期

将spring-boot项目打包,打包的方式,执行maven命令:package,会在target下生产一个jar包,将jar包上传到 Linux,然后启动springboot项目,启动的命令如下:

java -jar mall-manager-backend.jar  --server.port=8080


2 .前端部署

第一步,安装nginx

第二步,修改响应的配置信息,例如修改 @/utils/request.js 文件中服务端的请求地址,以及请求token过期的跳转地址。

第二步,前端项目进行打包,打包的命令参考 package.json 文件,命令如下:

npm run build:prod


执行完如上命令之后,会在项目下产生一个 dist 目录。

第三步,将dist目录下的内容上传到 nginx 安装目录下的 html 目录下即可,启动nginx即可访问。

项目部署

step1:springboot工程打包插件

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
</build>

step2:公钥私钥文件无法加载的问题

  private static byte[] readBytes3(InputStream in) throws IOException {
        BufferedInputStream bufin = new BufferedInputStream(in);
        int buffSize = 1024;
        ByteArrayOutputStream out = new ByteArrayOutputStream(buffSize);

        // System.out.println("Available bytes:" + in.available());

        byte[] temp = new byte[buffSize];
        int size = 0;
        while ((size = bufin.read(temp)) != -1) {
            out.write(temp, 0, size);
        }
        bufin.close();

        byte[] content = out.toByteArray();
        return content;
    }

加载私钥

加载公钥:


修改数据库信息

运行应用程序

#守护进程
nohup java -jar fengmipuzi-0.0.1-SNAPSHOT.jar &
#查看日志
tail -10f no

五、shell编程

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。


Shell 脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。

5.1:入门shell

需求:在/export/data目录创建指定文件test.dat,在文件中追加文本信息(hello)

#!/bin/bash
#这是一个入门shell程序
#创建目录
mkdir /export/data -p
#在data目录下创建文件
cd /export/data
echo hello >> hello.dat 

./hello.dat			// 执行

5.2:shell自定义变量

定义变量:name=jack

​ name=“zhang san”

引用变量:$name

5.3:shell传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

#!/bin/bash
# author:菜鸟教程
# url:www.runoob

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
echo "参数个数:$#"

5.4:算数运算

#!/bin/bash
# author:菜鸟教程
# url:www.runoob

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

5.5:综合案例:

编写一个shell脚本自动化管理java服务进程

需求:

传入参数为start时,先检测java是否启动,如果没有启动那么启动,否则打印java进程已经启动

传入参数为restart时,先关闭java进程,再启动java进程

传入stop时,关闭java进程

./watch.sh start
APP_HOME=/export/soft/
APP_NAME=fengmipuzi-0.0.1-SNAPSHOT.jar
PID=`ps -ef|grep $APP_NAME |grep -v grep|awk '{print $2}'`

#刷新环境变量(必须)
source /etc/profile

case $1 in
    start)
       
        if [ $PID ]
        then
            echo "java进程已经启动无需再启动"
        else
        	echo "启动start ....."
        	cd  $APP_HOME
        	nohup java -jar $APP_NAME &
        	echo "启动finished ....."
        fi
       
    ;; 
    restart)  
    	echo '开始重启.....'
    	
        if [ $PID ]
        then
            
            kill -9 $PID
            echo "kill success"
            cd  $APP_HOME
            nohup java -jar $APP_NAME &
        else
        	cd  $APP_HOME
        	nohup java -jar $APP_NAME &
        fi
        
        echo '重启finished.....'
    
    ;;
    stop)  
    	echo '开始stop....'	
    	 if [ $PID ]
            then
                kill -9 $PID
              
            else
                echo "进程已经关闭"
            fi 
            echo "stop finished"
    ;;
    *)  echo '必须传参'
    ;;
esac

linux定时任务

语法:

时间周期 (crontab表达式) sh shell

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)


crontab –e  //编写一条定时任务
crontab -l  //列出当前用户定时任务
crontab -r  //删除当前用户定时任务
#案例一:每分钟往a.txt文件追加文本信息
* * * * * echo 'hello jack'  >> /a.txt
* * * * * sh /export/shell/tomcat.sh start

tail -10f a.txt

六、面试题

1.基本命令

top快速查看哪些进程比较消耗CPU和内存资源
free -m查看操作系统剩余内存空间
df -h查看磁盘利用率
ps -ef查看进程
tail -f查看滚动日志

2.有没有在Linux上进行生产排查

1:哪个进程的哪个线程特别消耗cpu资源

2:哪个进程哪个对象特别占用内存资源

Arthas

文档:https://arthas.aliyun/doc/

1.1:Arthas功能
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
怎么快速定位应用的热点,生成火焰图?
怎样直接从JVM内查找某个类的实例?
1.2:Arthas安装

在线安装

curl -O https://arthas.aliyun/arthas-boot.jar
java -jar arthas-boot.jar

离线安装

最新版本,点击下载:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TcHoJwW2-1663847403497)(https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square)]

解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动:

java -jar arthas-boot.jar

通过浏览器操作

3.3:命令简介

3.4:CPU排查

排查哪个线程最消耗CPU资源

先通过top命令找到最耗CPU的进程id

再通过arthas 监测该进程

通过thread -n 1 查找到最耗CPU的线程

3.5:排查内存消耗

分析堆内存为什么占用这么高

通过top找到消耗内存的进程

开启arthas

heapdump --live /export/soft/dump.hprof

jhat dump.hprof

通过ip+端口访问

本文标签: 菜鸟从零开始操作JavaLinux