【Java EE】认识Linux与项目部署
一、认识Linux
Linux是一套操作系统,和Windows属于并列关系,起源可以追溯到Unix。
1969‑1970年贝尔实验室Dennis Ritchie和Ken Thompson开发Unix,同时创造了大名鼎鼎的C语言。后续Unix衍生出众多分支,其中Minix是用于教学的小型UNIX系统。
1991年芬兰大学生Linus受Minix启发开发出Linux第一个版本,顺带开发了至今全球广泛使用的版本控制工具Git。安卓系统就是基于Linux内核开发。
注意:Linux只是内核。完整操作系统 = 内核 + 配套应用软件。不同公司/组织封装不同配套软件,就形成不同发行版。
常见发行版:
- RedHat:企业商用,收费
- CentOS:红帽社区免费版,现已停止维护
- Ubuntu:课程学习首选,开源免费
Linux优势:
- 开源免费,成本低
- 稳定性极强,服务器可以长年不间断运行
- 安全性高,内核访问受权限管控
- 庞大全球社区,遇到问题很容易找到解决方案
二、Linux常用命令
2.1 文件与目录操作
-
ls:列出目录下子目录、文件信息
语法:ls [选项] [目录或文件]
常用选项:-a列出目录下的所有文件,包括以.开头的隐含文件。-l:展示文件详细信息-R:递归列出所有子目录文件-d将目录像文件一样显示,而不是显示其下的文件。如:ls-d指定目录-k以k字节的形式表示文件的大小。Is-alk指定文件-I列出文件的详细信息。-r对目录反向排序。-t以时间排序。
-
pwd
语法:pwd
作用:显示当前所在工作目录。 -
cd
语法:cd 目录名
作用:切换工作目录cd ..:回到上级目录cd ~:进入用户家目录cd -:回到上一次所在目录
-
touch
语法:touch 文件名
作用:新建空文件,也可修改文件时间属性
示例:touch test.txt -
mkdir
语法:mkdir [选项] 目录名
作用:创建目录;‑p递归创建多级目录
示例:mkdir -p test/test1 -
rm
语法:rm [选项] 文件/目录
作用:删除文件或目录-i删除前逐一询问-f强制删除,不提示-r递归删除目录及其内部所有内容,示例:rm test.txt
⚠️严禁执行
rm -rf /,会删除根目录全部数据
-
cp
语法:cp [选项] 源 目标
作用:复制文件/目录;‑r用于复制目录(递归)
示例:cp test1.txt test2.txt -
mv
语法:mv [选项] 源 目标
作用:移动文件/目录,第二个参数为文件时实现重命名-f强制覆盖不询问
示例:mv test1.txt test2.txt
2.2 查看文件
1. cat
- 语法:
cat [选项] 文件 - 作用:查看文件全部内容,
‑n可以显示行号 - 示例:
cat test.txt
2. more
-
语法:
more 文件名 -
操作按键
- 空格:向下翻一整页
- Enter:向下翻一行
- q:退出
=:显示当前行号
-
缺点:看完就退出,只能向下翻页,不能向上回看,功能简单。
3. less
- 语法:
less 文件名 - 常用按键:
| 按键 | 作用 |
|---|---|
| 空格 / PageDown | 向下翻页 |
| b / PageUp | 向上翻页 |
| ↑ ↓ | 上下单行滚动 |
/关键词 |
向下搜索,n 下一个匹配,N 上一个匹配 |
?关键词 |
向上搜索 |
| q | 退出 less |
| G | 跳到文件末尾 |
| g | 跳到文件开头 |
less 是 more 的增强版,推荐优先用 less
4. head/tail
- 语法:
head/tail -行数 文件名 - 作用:
head查看文件前 n 行;tail查看文件后 n 行 - 常用选项:
-n <数字>:指定显示的行数-f:tail 独有,follow,持续跟踪文件新增内容,实时查看日志-F:tail 独有,日志文件轮转重建后依旧可以跟踪文件(生产环境优先使用)
- 示例:
head -10 test.txt # 查看文件前10行
tail -10 test.txt # 查看文件末尾10行
tail -n 20 -f test.txt # 查看末尾20行,并且实时监听文件新增内容
tail -F test.txt # 实时跟踪,支持日志轮转
2.3 文本编辑 vim
vim:文本编辑器,相当于Windows记事本
vim 文件名打开/创建文件- 按
i进入插入模式编辑文本 Esc退回普通模式- 保存退出:
:w保存;:q退出;:wq保存并退出;:q!强制退出不保存
2.4 文本查找grep
- 语法:
grep [选项] "字符串" 文件 - 作用:查找文件中匹配指定字符串的行
- 选项:
-n显示匹配行号-w全字匹配,整个单词完全相同才可以的结果才可以匹配-r递归搜索目录下全部文件--color高亮查找到的结果--include指定查找某些文件--exclude指定排除某些文件
- 示例:
grep "hello" Hello.java
2.5 管道 |
将前一条命令输出作为后一条命令输入
示例:
ps -ef|grep "java"
tail -f log.txt|grep "Exception"
2.6 进程与网络
1. ps
- 语法:
ps [选项] - 作用:查看系统上运行的进程
ps aux查看系统全部进程- 搭配管道过滤:
ps aux | grep "进程名"
2. netstat
- 语法:
netstat [选项] - 作用:查看网络状态、端口占用
-anp查看全部套接字、进程PID
- 示例:
netstat -anp | grep "端口号"
2.7 软件包管理(Ubuntu:apt)
root用户不需要加
sudo,普通用户需要加sudo
sudo apt‑get update:更新软件包数据库apt list | grep "关键词":过滤查找软件包sudo apt install 包名:安装软件sudo apt remove 包名:卸载软件(保留配置)sudo apt purge 包名:彻底卸载,删除配置文件sudo su:切换到root用户
2.8 其他命令
1. 文件上传下载lrzsz
rz:上传文件到服务器sz 文件名:从服务器下载文件到本地
未安装先执行
apt‑get install lrzsz
2. 后台运行Java程序nohup java -jar xxx.jar &
nohup:程序后台运行,关闭终端不终止程序&:放到后台执行;支持>重定向输出日志文件
3. 进程终止kill -9 PID:强制杀死指定PID的进程,PID由ps命令查询得到
4. 系统服务控制sudo systemctl status mysql:查看mysql服务状态sudo systemctl stop mysql:停止mysql服务
5. 快捷键补充
Tab:命令、路径自动补全Ctrl + c:终止当前命令行输入- Xshell复制:
Ctrl+Insert;粘贴:Shift+Insert
三、在Ubuntu搭建Java部署环境
Ubuntu使用apt软件包管理器,很多命令需要管理员权限,加sudo;执行sudo su可以切换到root用户,不用重复写sudo。
1.安装JDK17
#更新软件源
sudo apt-get update
#安装openjdk17
sudo apt install openjdk-17-jdk
#验证安装
java -version
2.安装MySQL8.0
#安装mysql服务
sudo apt install mysql-server
#查看mysql运行状态
sudo systemctl status mysql
#执行安全初始化脚本
sudo mysql_secure_installation
默认密码可以使用mysql直接登录,登录MySQL修改root密码:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
注意: Linux环境中的MySQL严格区分大小写,Windows环境下不区分
四、SpringBoot项目部署到Linux服务器
4.1 开发、测试、生产环境
- 开发环境(dev):本地程序员写代码
- 测试环境(test):测试人员验证功能
- 生产环境(prod):线上对外服务,稳定性优先级最高
把程序放到线上服务器运行,这个过程叫做部署/上线。线上出Bug,所有用户都会受到影响。
4.2 SpringBoot多环境配置
开发和生产环境数据库地址、账号密码不一样,可以使用多配置文件区分:
application-dev.yml:开发环境配置application-prod.yml:生产环境配置
方式1:在配置文件中指定
主配置文件application.yml指定启用生产配置:
spring:
profiles:
active: prod
在主配置文件中修改dev或prod来切换环境,这还涉及到代码修改,很繁琐
方式2:Maven动态选择
- pom.xml中添加配置
<profiles>
<profile>
<id>dev</id>
<properties>
<profile.name>dev</profile.name>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profile.name>prod</profile.name>
</properties>
</profile>
</profiles>
- 主配置文件
spring:
profiles:
active: @profile.name@
- 刷新maven,选择环境,再次刷新,程序就会使用对应的配置

- Maven打包Jar

点击package生成可执行jar包,输出在target目录。
4.3 上传jar包到服务器并后台运行
- 方式1:Xshell直接把本地jar拖拽到终端窗口上传;
- 方式2:使用lrzsz工具
apt install lrzsz #安装工具
rz #弹出窗口选择文件上传
sz 文件名 #下载服务器文件到本地
后台启动SpringBoot项目:
#nohup让程序后台运行,&代表后台执行,输出日志重定向到日志文件
nohup java -jar blog-0.0.1-SNAPSHOT.jar > app.log &
nohup作用:关闭XShell终端窗口,程序依然在服务器后台运行,不会被关闭。
4.4 开放云服务器防火墙端口
SpringBoot默认8080端口,如果外网访问不了,很大概率是云服务器安全组/防火墙没有放行端口。
进入腾讯云控制台防火墙页面,添加TCP规则,放行项目需要使用的端口。

浏览器访问 http://服务器公网IP:8080/页面地址,测试注册登录、业务功能。
4.5 重启项目:杀掉旧进程再启动
- 查询Java进程,拿到PID号
ps -ef | grep java
- 强制杀死进程
kill 进程PID
再重新执行nohup命令启动新jar包。
后续修改后端代码重新部署也要杀死进程重新启动
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)