一、认识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优势

  1. 开源免费,成本低
  2. 稳定性极强,服务器可以长年不间断运行
  3. 安全性高,内核访问受权限管控
  4. 庞大全球社区,遇到问题很容易找到解决方案

二、Linux常用命令

2.1 文件与目录操作

  1. ls:列出目录下子目录、文件信息
    语法:ls [选项] [目录或文件]
    常用选项:

    • -a列出目录下的所有文件,包括以.开头的隐含文件。
    • -l:展示文件详细信息
    • -R:递归列出所有子目录文件
    • -d将目录像文件一样显示,而不是显示其下的文件。如:ls-d指定目录
    • -k以k字节的形式表示文件的大小。Is-alk指定文件
    • -I列出文件的详细信息。
    • -r对目录反向排序。
    • -t以时间排序。
  2. pwd
    语法:pwd
    作用:显示当前所在工作目录。

  3. cd
    语法:cd 目录名
    作用:切换工作目录

    • cd ..:回到上级目录
    • cd ~:进入用户家目录
    • cd -:回到上一次所在目录
  4. touch
    语法:touch 文件名
    作用:新建空文件,也可修改文件时间属性
    示例:touch test.txt

  5. mkdir
    语法:mkdir [选项] 目录名
    作用:创建目录;‑p递归创建多级目录
    示例:mkdir -p test/test1

  6. rm
    语法:rm [选项] 文件/目录
    作用:删除文件或目录

    • -i删除前逐一询问
    • -f强制删除,不提示
    • -r递归删除目录及其内部所有内容,示例:rm test.txt

⚠️严禁执行 rm -rf /,会删除根目录全部数据

  1. cp
    语法:cp [选项] 源 目标
    作用:复制文件/目录;‑r用于复制目录(递归)
    示例:cp test1.txt test2.txt

  2. 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记事本

  1. vim 文件名打开/创建文件
  2. i进入插入模式编辑文本
  3. Esc退回普通模式
  4. 保存退出:
    • :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

  1. sudo apt‑get update:更新软件包数据库
  2. apt list | grep "关键词":过滤查找软件包
  3. sudo apt install 包名:安装软件
  4. sudo apt remove 包名:卸载软件(保留配置)
  5. sudo apt purge 包名:彻底卸载,删除配置文件
  6. 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. 快捷键补充

  1. Tab:命令、路径自动补全
  2. Ctrl + c:终止当前命令行输入
  3. 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

在主配置文件中修改devprod来切换环境,这还涉及到代码修改,很繁琐

方式2:Maven动态选择

  1. 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>
  1. 主配置文件
spring:  
  profiles:  
    active: @profile.name@
  1. 刷新maven,选择环境,再次刷新,程序就会使用对应的配置

在这里插入图片描述

  1. 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 重启项目:杀掉旧进程再启动

  1. 查询Java进程,拿到PID号
ps -ef | grep java
  1. 强制杀死进程
kill 进程PID

再重新执行nohup命令启动新jar包。

后续修改后端代码重新部署也要杀死进程重新启动

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐