目录
[1.0 简介](#1.0 简介)
[2.0 Linux常见命令](#2.0 Linux常见命令)
[3.0 搭建Java部署环境](#3.0 搭建Java部署环境)
[4.0 部署Web项目到Linux](#4.0 部署Web项目到Linux)
[(4)上传Jar包到服务器 并运行](#(4)上传Jar包到服务器 并运行)
一、Linux
1.0 简介
(1)简介
Linux是一个操作系统 和Windows是并列的关系
一个完整的操作系统 = 操作系统内核 + 配套的应用程序 由于Linux是一个完全开源免费的内核,因此有些公司或开源组织又基于Linux内核,提供了不同的配套程序,这就构成了不同的发行版。例如 redhat(红帽) 、centOS(已停止维护) 、ubuntu
优势:开源(免费 便宜) 稳定(运行很多年都不会出现问题) 安全(只有特定管理员或特定用户才能访问Linux内核) 自由 社区支持(活跃 有很多志愿者在线棒大家解决问题)
学习内容:基础命令 虽然有图形化界面 但是往往都是通过命令行的方式操作的
部署JavaWeb项目 我们⾃⼰写的 web 程序, 要想让其他的⽤⼾能够访问, 就需要发布 到服务器上.
环境搭建: 物理:双系统 卡 虚拟机软件:bug多 WSL :新技术不成熟
**云服务器:**到服务厂商直接购买一个 最大的好处:部署在云服务器的项目可以直接
被外网访问到 这个时候就和公司发布一个正式的网站没有任何区别
也就让我们自己写的程序真的去给别人使用
//阿里云 华为云 腾讯等大学生优惠 有的还有免费的 学习阶段1核2G就
可以 学习微服务的时候需要2核4G 哪个便宜买哪个
//阿里云 学生有免费试用的300元额度 阿里云免费试用 - 阿里云
购买之后:联系客服得到 ip 用户名 密码
终端软件:是一类工具软件 可以和远程的主机建立网络连接 从而对主机进行一些操作 XShell
下载地址:家庭/学校免费 -- NetSarang Website
使用XShell登陆主机:在终端输入 ssh 服务器外网ip地址 ip为腾讯云后台页面中看到的 外网ip
复制:ctrl + insert 粘贴:shif + insert 可以重新设置快捷键

左上角新建会话属性 名称:我的虚拟机_公网Ip地址 主机:公网Ip地址 端口号:22
输入密码 一般写成root就行了
(2)Xshell使用
先是创建好连接

然后用户登录这里 输入用户名和密码 就可以登录了

登录完成之后 会出现下面的界面


喜欢的快捷键:
工具 选项 终端 --->这里设置 鼠标右键是粘贴功能
将选定的文本自动复制到剪切板

这样呢 选中之后 自己就复制了 右键鼠标就是粘贴 方便

查看快捷键:
工具 按键对应----> 出现下图

2.0 Linux常见命令
Ls
语法功能: ls 选项 ⽬录或⽂件
功能:对于目录 该命令列出该目录下的所有子目录与文件
对于文件 将列出文件名以及其他信息
python
• -a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。
• -d 将⽬录象⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。 如:ls ‒d 指定⽬录
• -k 以 k 字节的形式表⽰⽂件的⼤⼩。ls ‒alk 指定⽂件
• -l 列出⽂件的详细信息。
• -r 对⽬录反向排序。
• -t 以时间排序。
• -R 列出所有⼦⽬录下的⽂件。(递归)
Pwd
语法:pwd
功能:显示用户当前所在的目录

Cd
语法:cd 目录名
功能:改变工作目录 将当前工作目录改变到指定目录下

cd ../ 是回到上一级目录

目录名太长了 不好敲怎么办?
Cd 写一个目录首字母 然后tab键 系统会提示你 tab键会自动给你补全

Mkdir
语法: mkdir 选项 dirname...
功能:在当前目录下面创建一个名为 "dirname"的目录
常用选项:-p test/test1 创建多级目录
Rm
语法 rm rm -f-i-r-v dirName/dir
功能:删除文件或者目录
常用选项:
python
• -f 即使⽂件属性为只读(即写保护),亦直接删除
• -i 删除前逐⼀询问确认
• -r 删除⽬录及其下所有⽂件
注意事项:千万不要运行 rm -rf / 尤其是在公司的生产服务器上
//rm -fr/ 相当于给自己的系统做了一次彻底的 不可恢复的格式化 类似window中直接把c盘删除了
Cp
语法:cp 选项 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:复制文件或目录
说明:cp指令用于复制文件或者目录 如同时指定两个以上的文件或目录 其而最后的目的地是一个已经保存在的目录 则它会把指定的所有文件或目录复制到此目录中 若同时指定多个文件或者目录 而最后的目的地并非一个已存在的目录 则会出现错误信息
常用选项:
python
• -f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在
• -i 或 --interactive 覆盖⽂件之前先询问⽤⼾
• -r递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符号
链接,则⼀律视为普通⽂件处理
• -R 或 --recursive递归处理,将指定⽬录下的⽂件及⼦⽬录⼀并处理
Mv
语法: mv 选项 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:视mv命令中第二个参数类型的不同 mv命令将文件重命名或将其移至一个新的目录中
当第二个参数类型是文件时 mv命令完成文件重命名 此时 源文件只能有一个
它将所给的源文件或目录
重命名为给定的目标文件名
当第二个参数是已经存在的目录名称时,源文件或目录参数可以有多个 mv命令将各参数指定的源文件均移至目标目录中
简单来说就是 重命名文件 和 把文件夹搬到另一个地方
常用选项:
python
• -f :force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖
• -i :若⽬标⽂件 (destination) 已经存在时,就会询问是否覆盖!
apt-get install lrzsz
这条命令就像是给Linux服务器安装了一个小工具箱 让你能直接在命令行里 像发微信文件一样 轻松地和电脑互相传文件
rz是长传 sz是下载 最大的好处是方便 只适合传小文件
Xshell里面接入: apt-get update && apt-get install -y lrzsz 输入这个命令然后回车即可

Cat
语法:cat 选项 ⽂件
功能:查看目标文件的内容
常用选项: -n 对输出的所有行编号
/这样会把文件的所有内容都展示出来 如果文件的内容很多呢?
more 文件名 一点一点的展示 慢慢的敲回车 就能逐步看到
/this 表示查找 它会跳转到文件里面的this这里
less 文件名 这样可以通过滚轴查看 结束了之后有END表示
head 文件名 默认查看文件前10行 自己也可以设置 head -20 文件名 //查看文件前20行
tail 文件名 查看末尾几行 tail -10 test1.txt
常见的结束符:
more是Ctrl C退出文件
less是:q 退出文件
编辑文件:
vi或者vim 这个是一个知名的文本编辑器
vim相当于windows的记事本 只不过功能比记事本强大一些
创建文件/打开文件 : vim 文件名 刚开始进入的时候 不能写入内容
这个时候按i 进入编辑模式 下面会出现一个insert 就是表示可以插入文件内容了
Esc 表示退出编辑模式

保存文件: 退出编辑模式之后 输入:wq 表示退出并保存
如果不想保存:esc 先退出编辑模式 然后:q! 强制退出 :q是退出
输入:wq! 强制退出并保存
gerp
语法:grep 参数... ⽂件...
功能:用于查找文件中是否包含指定字符串 并显示对应的行
选项:
python
• -n<⾏数> 显⽰的⾏数
• -w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, ⽽不仅仅是⼀个单词的⼀部分.
• -r 递归查找. 可以搜索多级⽬录下的所有⽂件.
• --color ⾼亮查找到的结果
• --include 指定查找某些⽂件
• --exclude 指定排除某些⽂件
gerp "this" settings.xml //表示在setting.xml文件里面查找this
gerp -n"this" settings.xml //它会告诉你第几行有this这个内容
Ps
语法:ps 参数...
功能:用于查看当前系统上运行的进程
选项:
python
• a 显⽰⼀个终端的所有进程
• u 以⽤⼾为主的格式来显⽰程序状况
• x 显⽰所有程序, 不⽌是会话中的进程
• e 显⽰所有进程, 包括系统守护进程
• f 显⽰完整格式输出
aux 一起记就行 不用分开记
ps aux # 显⽰系统上所有的进程
ps aux | grep "进程名"
ps aux | grep "进程id"
如果我们想要基于这个打印出来的进程列表进行查找
用| |表示管道 把管道前面内容的输出作为管道的输入
ps aux | grep "java" 这个就是查找java进程
Netstat
语法: netstat 参数...
功能: 查看系统上的网络状态
选项:
python
• -a 显⽰所有正在或不在侦听的套接字
• -n 显⽰数字形式地址⽽不是去解析主机、端⼝或⽤⼾名
• -p 显⽰套接字所属进程的PID和名称
还是不要分开记 以anp为整体的记录
netstat -anp查找所有的
3.0 搭建Java部署环境
(1)apt
apt(Advanced Packaging Tool), Linux软件包管理⼯具. ⽤于在Ubuntu、Debian和相关Linux发⾏版
上安装、更新、删除和管理deb软件包.
⼤多数apt命令必须以具有sudo权限的⽤⼾⾝份运⾏
//通俗理解:apt就是Linux里的"应用商店" 用来装软件 搭建Java部署环境就是给服务器装上Java 让它能跑你写的Java程序
apt 常用命令
列出所有的软件包
python
apt list
这个命令输出所有包的列表 内容比较多 可以使用grep命令过滤输出
apt list |grep "java"
更新软件包数据库
python
sudo apt-get update
apt实际上在可用软件包的数据库上工作 如果数据库没有更新 系统将不知道是否又更新的软件可用
这就是为什么在安装任何Linux系统之后 第一件事应该是更新apt数据库
运行此命令 您将看到从服务器检索到的软件包信息
安装软件包
python
sudo apt install package_name
移除软件包
python
sudo apt remove package_name
remove命令将卸载给定的软件包
但可能会留下一些配置文件 如果要删除包含所有配置文件的软件包
请使用purge而不是remove
(2)JDK
更新软件包
python
sudo apt-get update
执行结果
ubuntu@VM-24-3-ubuntu:~$ sudo apt-get update #更新软件包
Hit:1 http://mirrors.tencentyun.com/ubuntu jammy InRelease
Hit:2 http://mirrors.tencentyun.com/ubuntu jammy-updates InRelease
Hit:3 http://mirrors.tencentyun.com/ubuntu jammy-security InRelease
Reading package lists... Done
安装openjdk
python
1 #查找jdk包
2 apt list |grep "jdk"
3
4 #安装jdk
5 sudo apt install openjdk-17-jdk
执行结果:
主要中途需要输入Y 表示确认进行下一步
验证安装:
java -version 是下面的结果
//卸载的常见命令
检查安装的是哪个OpenJDK
# dpkg --list | grep -i jdk
移除 openjdk包:
# apt-get purge openjdk*
卸载 OpenJDK 相关包:
# apt-get purge icedtea-* openjdk-*
检查所有 OpenJDK包是否都已卸载完毕:
# dpkg --list | grep -i jdk

(3)MySQL
使用apt安装MySQL
python
#查找安装包
apt list |grep "mysql-server"
#安装mysql
sudo apt install mysql-server
中途也是需要输入一下 Y
查看MySQL状态
python
sudo systemctl status mysql
MySQL安装安全设置
默认的MySQL设置是不安全的 MySQL安装提供了一个安全脚本
用于解决不太安全的默认选项
python
sudo mysql_secure_installation
安装之后会有一系列的提示 接下来按照提示输入:
Press y|Y for Yes , any other key for No: Y 是否设置验证密码组件 Y
Please enter 0= Low,1 = MEDIUM and 2 = STRONG : 设置密码强度 2 服务器很容易被盗
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y #默认情 况下,MySQL安装有⼀个匿名⽤⼾, 允许任何⼈登录MySQL. 是否删除匿名⽤⼾? Y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y #仅应允许root从'localhost'连接
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y #默认情况下, MySQL带有⼀个test数据库, 是否删除? Y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y #是否现在加载配置, 使刚才的修改⽣效? Y
这个时候直接敲mysql就可以连上了

设置密码:
python
连接mysql服务器
sudo mysql
使⽤alter user 命令修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY
'BITE@yyds.666';
//密码改成了 BITE@yyds.666
//卸载Mysql
python
# 停止mysql
sudo systemctl stop mysql
# 卸载mysql
sudo apt-get remove --purge mysql-server mysql-client mysql-common
# 删除 MySQL 配置文件和数据
sudo rm -rf /etc/mysql /var/lib/mysql
# 清理残留文件和目录
sudo apt-get autoremove
sudo apt-get autoclean
# 验证卸载结果
mysql --version
4.0 部署Web项目到Linux
(1)什么是部署
把程序安装到生产环境上 这个过程叫部署 也叫做上线
一旦程序部署成功 那么这个程序也能被外网千千万万的普通用户访问到了
换句话说, 如果程序有 BUG, 这个 BUG 也就被千千万万的⽤⼾看到了.
部署过程⾄关重要, 属于程序开发中最重要的⼀环. ⼀旦部署出现问题, 极有可能导致严重的事故(服务器不可⽤之类的).
为了防⽌部署出错, ⼀般公司内部都有⼀些⾃动化部署⼯具(如 Jenkins 等). 当前我们先使⽤⼿⼯部署的
⽅式来完成部署.
//咱们这里讲解的是 手工部署
(2)环境配置
程序配置文件修改 :我们可以针对不同的环境 设置不同的配置
多平台配置 针对不同平台创建不同的配置文件 要求名字为
开发环境:通常取名是dev
测试环境:test
生产环境:prod 配置环境可以改名为这个:application-prod.yml

理论上来说 只有application.yml是配置文件 为了在不同环境里面运行
可以在主配置文件里面定义好开发 测试 生产环境里面的配置


这行日志表示dev生效了
更好的方式: 借助maven
从Maven中读取环境配置变量
python
<profiles>
<profile>
<id>dev</id>
<properties>
<profile.name>dev</profile.name>
</properties>
</profile>
<profile>
<id>prod</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<profile.name>prod</profile.name>
</properties>
</profile>
</profiles>

//勾上之后记得刷新maven
(3)构建项目并打包
在本地使用maven进行打包 //肯定打包的是prod环境的
-
如果Test代码中有与环境配置相关的操作(⽐如数据库相关的操作), 打包会失败, 点击下图①处的图标, 可以跳过测试
-
点击clean->package


(4)上传Jar包到服务器并运行
1 上传Jar包 直接拖动打好的jar包到xshell窗口即可完成文件的上传

Xshell可以直接拖动文件到窗口 达到上传文件的目的 如果使用其他客户端
不支持文件的上传 需要借助lrzsz命令
2 运行程序
python
nohup java -jar blog-spring-0.0.1-SNAPSHOT.jar &
nohup:后台运行程序 用于在系统后台不挂断地运行命令 退出终端不会影响程序的运行
语法格式:
python
nohup Command [ Arg ... ] [ & ]
参数说明:
Command: 要执行的命令
Arg:⼀些参数,可以指定输出⽂件
&:让命令在后台执⾏,终端退出后命令仍旧执⾏
nohup java -jar blog-0.0.1-SNAPSHOT.jar >/logs & Linux 可以通过 > 把需要输出的内容写到指定⽂件中. 这样的操作称为 "重定向".
3 开放端口号
如果外网需要访问该服务器 需要先服务器防火墙开放对应的端口号
本着服务器安全的原则,云服务器上的端⼝⾮必要不开启.
⽐如常⻅端⼝号: 数据库 3306 , Redis 6379, 尽可能避免开放, ⽽是采⽤其他⽅式来连接, ⽐如配置隧道的⽅式
以腾讯 云服务器 举例:
进入防火墙管理页面

添加规则

端口号写需要开放的端口号 多个端口号以逗号分割
(5)验证程序
访问项⽬: http://IP:Port/blog_login.html IP改为云服务器的IP, Port改为项⽬的端⼝号.
按照项目的功能进行验证:
//验证账户注册登录 验证展示博客列表 验证新增博客 验证展示博客内容
(6)常见问题
一个程序的正常运行 需要程序的正确和环境的正确
同样的代码在Windows上可以运行成功 不一定在Linux上运行成功
不同的系统对代码的理解和支持是不同的
⽐如Windows系统对MySQL不区分⼤⼩写, Linux区分⼤⼩写
服务不能正常访问的原因有很多, 主要分以下⼏⽅⾯
- 服务未启动
a. 使⽤ ps -ef|grep java 查看程序是否在运⾏
b. 使⽤ curl http://127.0.0.1:8080/blog_login.html 看下是否有返回html⻚⾯,
如果有返回, 说明程序启动成功了, 考虑端⼝未开放
c. 如果未启动成功, 需要查看对应的⽇志, 根据原因来分析.
i. 数据库不存在
ii. 表不存在(区分⼤⼩写)
iii. 数据库密码不正确
iv. Jdk 安装版本不对, 或者未安装
v. mysql未设置密码
vi. ....
2.http端⼝未开放
检查云服务器防⽕墙/安全组是否开放相应端⼝(如8080)
(7)杀掉进程
如果我们需要重启服务器 或者重新部署 都需要先停止之前的服务
查看当前服务的进程:ps -ef|grep java 下图35443就是该服务的进程

杀掉进程:kill -9 PID
总结:
连接Linux服务器的方式有很多 xshell只是其中一种 xshell是一个客户端 而非服务器
Ubuntu软件管理工具是apt 其他的linux发行版本包管理工具不同 比如CentOS是使用yum来管理软件的
SpringBOot可以使用多个配置文件来完成不同平台的配置
在Window上可以运行成功的代码 在Linux上不一定运行成功
启动程序需要使用nohup后台运行 需要停止服务时 使用kill命令
