Linux
约 7491 字大约 25 分钟
2026-05-26
Linux
Linux是一套免费使用和自由传播的操作系统
- 环境搭建
- 常用命令
- 安转软件
- 项目部署
Linux简介
不同应用领域的主流操作系统
- 桌面操作系统
- 服务器操作系统
- 移动设备操作系统
- 嵌入式操作系统
Linux发展历史
- 时间:1991年
- 地点:芬兰赫尔辛基大学
- 人物:Linus Torvalds(21岁)
- 语言:C语言、汇编语言
- logo:企鹅
- 特点:免费、开源、多用户、多任务
Linux系统版本
Linux系统分为内核版和发行版
- 内核版
- 由LinusTorvalds及其团队开发、维护
- 免费、开源
- 负责控制硬件
- 发行版
- 基于Linux内核版进行扩展
- 由各个Linux厂商开发、维护
- 有收费版本和免费版本
- 内核版
Linux系统-发行版
我们真正安装的都是Linux系统的发行版 该教程目前安装的就是:CentOS
- Ubuntu:以桌面应用为主
- RedHat:应用最广泛、收费
- CentOS:RedHat的社区版、免费( 目前使用的 )
- openSUSE:对个人完全免费、图形界面华丽
- Fedora:功能完备、快速更新、免费
- 红旗Linux:北京中科红旗软件技术有限公司开发
Linux安装
安装方式介绍
- 物理机安装:直接将操作系统安装到服务器硬件上
- 虚拟机安装:通过虚拟机软件安装
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬 件系统功能、运行在完全隔离环境中的完整计算机系统。
常见的虚拟机软件:
- VMWare( 目前使用的 )
- VirtualBox
- VMLiteWorkStation
- Qemu
- HopeddotVos
安装链接
安装步骤CentOS7:
// 步骤一: 打开虚拟机软件 vmware
// 步骤二: 点击 创建新的虚拟机
// 步骤三: 选择典型 点击 下一步 即模拟新的硬件出来
// 步骤四: 选择稍后安装操作系统 点击 下一步
// 步骤五: 选择Linux 版本选择CentOS7-64-位 点击 下一步
// 步骤六: 填写虚拟机名称(eg: CentOS7) 选择安装位置 D盘(即物理文件) 点击 下一步
// 步骤七: 选择磁盘大小(默认20) 选择将虚拟磁盘拆分成多个文件 点击 下一步
// 步骤八: 点击自定义硬盘 内存2g 处理器2个
// 点击 新 CD/DVD 右边点击 使用过IOS映像文件(选择下载好的 CentOS7 路径地址 D盘) 点击关闭
// 回到 页面 选择完成开启CentOS7
// 点击 开启虚拟机
// 快捷键:
// 进入虚拟机==>鼠标引入虚拟机界面 点击鼠标左键
// 退出虚拟机==>ctrl+alt
// 第一次开启时间可能会有点长
// 安装过程中可能会让我们选择一些配置
// 1. 选择语言 往下选择中文 右边选择简体中文 点击 继续
// 2. 等待一会 开始安装
// 3. ROOT密码 即设置管理员密码: root
// 4. 点击 重启(第一次安装需要重启)网卡设置
由于启动服务器时未加载网卡,导致IP地址初始化失败
# 查看ip地址
ip addr
cd / # 进入根目录
cd etc # 进入etc目录
cd sysconfig # 进入sysconfig目录
cd network-scripts # 进入 network-scripts 目录
vi ifcfg-ens33 # 编辑 ifcfg-ens33 文件
i # 进入编辑状态
光标 # 移动光标
<Esc> --> :wq --> <enter> # 保存退出
# 将最后的一项 修改为 yes
# 操作完成后 右击左边 CentOS7 点击电源 点击重新启动客服端安装SSH连接工具
SSH(Secure Shell),建立在应用层基础上的安全协议 常用的SSH连接工具
- putty
- secureCRT
- xshell (本地下载有此软件)
- finalshell( 教程下载的软件 )
SH连接工具就可以实现从本地连接到远程的Linux服务器
Linux目录结构
- / 是所有目录的顶点
- 目录结构像一颗倒挂的树
Linux目录介绍
- bin存放二进制可执行文件
- boot存放系统引导时使用的各种文件
- dev存放设备文件
- etc存放系统配置文件
- home存放系统用户的文件
- lib存放程序运行所需的共享库和内核模块
- opt额外安装的可选应用程序包所放置的位置
- root超级用户目录
- sbin存放二进制可执行文件,只有root用户才能访问
- tmp存放临时文件
- usr存放系统应用程序
- var存放运行时需要改变数据的文件,例如日志文件
Linux常用命令
- Tab键自动补全
- 连续两次Tab键,给出操作提示,
- 使用上下箭头快速调出曾经使用过的命令
- 使用clear命令 或者 Ctrl+L 快捷键 实现清屏
Linux命令初体验
- ls 查看当前目录下的内容
- pwd 查看当前所在的目录
- cd [目录名] 切换目录
- touch [文件名] 如果文件不存在, 新建文件
- rm [文件名] 删除指定文件
- mkdir [目录名] 创建目录
- rm -d [目录名称] 删除一个空目录
Linux命令格式
command [-options] [parameter]
说明:
- command:命令名 eg: ls cd mkdir
- [-options]:选项,可用来对命令进行控制,也可以省略
- [parameter]:传个
注意:
[ ] 代表可选
命令名、选项、参数之间有空格进行分隔
文件目录操作命令
ls
作用:显示指定目录下的内容
语法:ls [-al] [dir]
- ls -a 目录名称
- ls -l 目录名称 ===> 简写方式 ll
说明:
- -a 显示所有文件及目录(.开头的隐藏文件也会列出)
- -l 除文件名称外,同时将文件型态(d表示目录,-表示文件)、权限、拥有者、文件大小等信息详细列出
注意:
由于我们使用ls命令时经常需要加入-l选项,所以Linux为ls -l命令提供了一种简写方式,即 ll
# 说明: 我们在 /root 下面创建目录名称 studyLinux
# 下面的操作都是在 /root 下操作的
# 基本操作方式有以下几种 ls [-al] [dir]
ls
ls studyLinux
ls -a studyLinux # 可查询隐藏文件 .开头都是隐藏文件
ls -l studyLinux # 简写 ll studyLinux
ll studyLinuxcd
作用:用于切换当前工作目录,即进入指定目录
语法:cd [dirName]
特殊说明:
- ~ 表示用户的home目录
- . 表示目前所在的目录
- .. 表示目前目录位置的上级目录
# 举例:
cd .. # 切换到当前目录的上级目录
cd ~ # 切换到用户的home目录
cd /root/studyLinux # 切换到 /root/studyLinux 目录cat
作用:用于显示文件内容
语法:cat [-n] fileName
说明:
- -n:由1开始对所有输出的行数编号
cat /etc/profile # 查看/etc目录下的profile文件内容
cat -n /etc/profile # -n 文件前面会出现编号more
作用:以分页的形式显示文件内容
语法:more fileName
操作说明:
- 回车键 向下滚动一行
- 空格键 向下滚动一屏
- b 返回上一屏
- q 或者 Ctrl+C 退出more
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文件末尾内容并显示 会霸屏 ctlr+c 退出霸屏模式touch
作用: 创建文件
touch 1.txt touch index.html
.
mkdir
作用:创建目录
语法:mkdir [-p] dirName
说明:
- -P:确保目录名称存在,不存在的就创建一个。通过此选项,可以实现多层目录同时创建
举例:
- mkdir itcast 在当前目录下,建立一个名为itcast的子目录
- mkdir -p itcast/test 在工作目录下的itcast目录中建立一个名为test的子目录,若itcast目录不存在,则建立一个
rmdir
作用:删除空目录
语法:rmdir [-p] dirName
说明:
- -p:当子目录被删除后使父目录为空目录的话,则一并删除
举例:
- rmdir itcast 删除名为itcast的空目录
- rmdir -p itcast/test 删除itcast目录中名为test的子目录,若test目录删除后itcast目录变为空目录,则也被删除
- rmdir itcast* 删除名称以itcast开始的空目录
mkdir itcast # 创建itcast目录
rmdir itcast # 删除itcast空目录
mkdir -p itcast/qq # 创建itcast目录并且创建qq子目录
rmdir -p itcast/qq/ # 删除qq子目录 若删除qq子目录,则itcast目录也会被删除
mkdir aa001
mkdir aa002
mkdir aa003
rmdir aa* # 会同时删除上面的三个文件rm
作用:删除文件或者目录
语法:rm [-rf] name
说明:
- -r:将目录及目录中所有文件(目录)逐一删除,即递归删除
- -f:无需确认,直接删除
举例:
- rm -r itcast/ 删除名为itcast的目录和目录中所有文件,删除前需确认 y:确认 n:取消
- rm -rf itcast/ 无需确认,直接删除名为itcast的目录和目录中所有文件
- rm -f hello.txt 无需确认,直接删除hello.txt文件
删除乱码
#查看文件名的文件inode号
ls -i
# 使用find命令查询并且删除
find ./ -inum {节点编码} -delete
#或者
find ./ -inum {节点编码} -exec rm -rf {} \;
#注意:“{}”后要空一格再加上“\;”。
eg:
find ./ -inum 33583908 -delete
find ./ -inum 33583908 -exec rm -rf {} \;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目录下
拷贝移动命令
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目录中
打包压缩命令
tar
作用:对文件进行打包、解包、压缩、解压
语法:tar [-zcxvf] fileName [files]
包文件后缀为 .tar 表示只是完成了打包,并没有压缩
包文件后缀为 .tar.gz 表示打包的同时还进行了压缩
说明:
- -z:z代表的是gzip,通过gzip命令处理文件,gzip可以对文件压缩或者解压
- -c:c代表的是create,即创建新的包文件
- -x:x代表的是extract,实现从包文件中还原文件
- -v:v代表的是verbose,显示命令的执行过程
- -f:f代表的是file,用于指定包文件的名称
tar -cvf test.tar test # 只是打包 没有压缩 当前目录
tar -zcvf test.tar.gz test # 打包 并且压缩 当前目录
tar -xvf test.tar # 包文件 还原 当前目录
tar -zxvf test.tar.gz # 将包文件解压 当前目录
tar -zxvf test.tar.gz -C mynotes # 将文件解压到特定目录
# 举例 打包
tar -cvf hello.tar ./* # 将当前目录下所有文件打包,打包后的文件名为hello.tar
tar -zcvf hello.tar.gz ./* # 将当前目录下所有文件打包并压缩,打包后的文件名为hello.tar.gz
# 举例 解包
tar -xvf hello.tar # 将hello.tar文件进行解包,并将解包后的文件放在当前目录
tar -zxvf hello.tar.gz # 将hello.tar.gz文件进行解压,并将解压后的文件放在当前目录
tar -zxvf hello.tar.gz -C /usr/local # 将hello.tar.gz文件进行解压,并将解压后的文件放在/usr/local目录解压 zip文件
# 安装依赖
yum install unzip
# 解压文件 到当前目录
unzip file.zip
# 解压文件 解压到指定的目录下
unzip file.zip -d /usr/local文本编辑命令
vi / vim
作用:vi 命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于windows中的记事本
语法:vi fileName
说明:
1、vim是从vi发展来的一个功能更加强大的文本编辑工具,在编辑文件时可以对文本内容进行着色,方便我们对文件进行编辑处理,所以实际工作中vim更加常用。
2.要使用vim命令,需要我们自己完成安装。可以使用下面的命令来完成安装:
yum install vim
yum install vim # 运行报错
# 解决方案 参看文档如下:
# https://blog.csdn.net/shanvlang/article/details/144065229
# https://blog.csdn.net/u010948547/article/details/140212364
# 步骤一: curl更新国内镜像 阿里镜像
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 步骤二: 清理缓存
yum clean all
# 步骤三: 更新缓存
yum makecache
# 步骤四: yum安装vim
yum install vimvim
作用:对文件内容进行编辑,vim其实就是一个文本编辑器
语法:vim fileName
说明: 1、在使用vim命令编辑文件时,如果指定的文件存在则直接打开此文件。如果指定的文件不存在则新建文件。
2、vim在进行文本编辑时共分为三种模式,分别是命令模式(Commandmode),插入模式(Insertmode)和底行模式(Lastlinemode)。这三种模式之间可以相互切换。我们在使用vim时一定要注意我们当前所处的是哪种模式。
vim 三种模式
- 命令模式
- 命令模式下可以查看文件内容、移动光标(上下左右箭头、gg(快速移动到开头)、G(快速移动到末尾) )
- 通过vim命令打开文件后,默认进入命令模式
- 另外两种模式需要首先进入命令模式,才能进入彼此
- 插入模式
- 插入模式下可以对文件内容进行编辑
- 在命令模式下按下 [ i a o] 任意一个,可以进入插入模式。进入插入模式后,下方会出现【insert】字样
- 在插入模式下按下 ESC 键,回到命令模式
- 底行模式
- 底行模式下可以通过命令对文件内容进行查找、显示行号、退出等操作
- 在命令模式下按下[ : /]任意一个,可以进入底行模式
- 通过 / 方式进入底行模式后,可以对文件内容进行查找
- 通过 :方式进入底行模式后,可以输入wq(保存并退出)、 q!(不保存退出)、 set nu(显示行号)
查找命令
find
作用:在指定目录下查找文件
语法:find dirName -option fileName
举例:
- find . -name "*.java" 在当前目录及其子目录下查找 .java结尾文件
- find /itcast -name “*.java” 在/itcast目录及其子目录下查找 .java 结尾的文件
grep
作用:从指定文件中查找指定的文本内容
语法:grep word fileName
举例:
- grep Hello Helloworld.java 查找HelloWorld.java文件中出现的Hello字符串的位置
- grep hello *.java 查找当前目录中所有java结尾的文件中包含hello字符串的位置
查看进程
ps -ef # 查询所有的进程
ps -ef | grep tomcat # 查询tomcat进程杀死进程
kill -15 4586(进程id)
kill -9 4586 # 强行杀死Linux软件安装
软件安装方式
- 二进制发布包安装
- 软件已经针对具体平台编译打包发布,只要解压,修改配置即可
- rpm安装
- 软件已经按照 redhat 的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题
- yum安装
- 一种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程中自动解决库依赖问题
- 源码编译安装
- 软件以源码工程的形式发布,需要自己编译打包
安装lrzsz
操作步骤:
搜索 lrzsz 安装包,命令为 yum list lrzsz
使用yum命令在线安装,命令为 yum install lrzsz.x86_64(上一条命令 最后一行的文件名称)
# 搜索安装包 yum list lrzsz # 在线安装 搜索的安装包 yum install lrzsz.x86_64
注意事项
Yum(全称为Yellow dog Updater,Modified)是一个在Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
# 上传文件命令
rz安装jdk
操作步骤:
使用 FinalShell 自带的上传工具将jdk的二进制发布包上传到Linux( 点击新建文件传输 ) 可以先安装 lrzsz 执行 rz 选择文件
rz解压安装包
tar -zxvf jdk1.8.0_431.tar.gz -C /usr/local配置环境变量,使用 vim命令修改 /etc/profile 文件,在文件末尾加入如下配置
vim /etc/profile JAVA_HOME=/usr/local/jdk1.8.0_431 PATH=$JAVA_HOME/bin:$PATH重新加载profile文件,使更改的配置立即生
source /etc/profile检查安装是否成功
java -version
安装Tomcat
操作步骤:
使用 FinalShell 自带的上传工具将jdk的二进制发布包上传到Linux( 点击新建文件传输 ) 可以先安装 lrzsz 执行 rz 选择文件
rz解压安装包
tar -zxvf apache-tomcat-9.0.98.tar.gz -C /usr/local进入Tomcat的bin目录启动服务
sh startup.sh # 或者 ./ startup.sh
验证Tomcat启动
验证Tomcat启动是否成功,有多种方式:
查看启动日志
more /usr/local/apache-tomcat-9.0.98/logs/catalina.out # 或者 tail -50 /usr/local/apache-tomcat-9.0.98/logs/catalina.out查看进程
ps -ef | grep tomcat
注意:
- ps命令是linux下非常强大的进程查看命令,通过 ps -ef 可以查看当前运行的所有进程的详细信息
- "|” 在Linux中称为管道符,可以将前一个命令的结果输出给后一个命令作为输入
- 使用ps命令查看进程时,经常配合管道符和查找命令grep一起使用,来查看特定进程
防火墙操作
查看防火墙状态
# 查看防火墙的状态 以下两种方式都可以查询 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 --add-port=8080/tcp --permanent # 立即生效 firewall-cmd --reload关闭指定端口( firewall-cmd --zone=public --remove-port=8080/tcp --permanent )
立即生效( firewall-cmd --reload )
查看开放的端口( firewall-cmd --zone=public --list-ports )
# 查看开放的端口号 firewall-cmd --zone=public --list-port
注意: 1、Systemctl是管理Linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作 2、firewall-cmd是Linux中专门用于控制防火墙的命令 3、为了保证系统安全,服务器的防火墙不建议关闭
关闭Tomcat服务
停止Tomcat服务的方式:
运行Tomcat的bin目录中提供的停止服务的脚本文件
sh shutdown.sh # 或者 ./shutdown.sh结束Tomcat进程
# 步骤一: 查看Tomcat进程 获取进程id ps -ef | grep tomcat # 步骤二: 结束进程命令 kill -9 7742(这是进程id)
注意:
kill命令是Linux提供的用于结束进程的命令,-9表示强制结束
安装MySQL
- 检测当前系统中是否安装MySQL数据库
# 查询当前系统中安装的所有软件
rpm -qa
# 查询当前系统中安装的名称带mysql的软件
rpm -qa| grep mysql
# 查询当前系统中安装的名称带mariadb的软件
rpm -qa| grep mariadbRPM(Red-Hat Package Manager)RPM软件包管理器,是红帽Linux用于管理和安装软件的工具
注意事项:
如果当前系统中已经安装有MySQL数据库,安装将失败。CentOS7自带mariadb,与MySQL数据库冲突
- 卸载已经安装的冲突软件
rpm -e --nodeps 软件名称
eg: # 卸载mariadb软件 因为此软件与mysql有冲突
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64- 将资料中提供的MySQL安装包上传到Linux并解压
# 步骤一: 上传文件
rz
# 步骤二: 创建文件
mkdir /usr/local/mysql
# 步骤三: 将文件解压到 /usr/local/mysql 文件里面
tar -xvf mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar -C /usr/local/mysql/RPM 安装 MySQL
# 按照顺序安装rpm 软件包
rpm -ivh mysql-community-common-5.7.44-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.44-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.44-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpm
yum install net-tools
rpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm说明1:安装过程中提示缺少net-tools依赖,使用yum安装
yum install net-tools说明2:可以通过指令升级现有软件及系统内核
yum update启动MySQL
# 查看mysql服务状态
systemctl status mysqld
# 启动mysqi服务
systemctl start mysqld说明:可以设置开机时启动mysql服务,避免每次开机启动mysql
# 开机启动mysql服务
systemctl enable mysqld
# 查看已经启动的服务
# 前提 使用netstat 需要安转 net-tools
yum install net-tools
netstat -tunlp
netstat-tunlp | grep mysql
# 查看mysql进程
ps -ef| grep mysqlMySQL 临时密码
登录MySQL数据库,查阅临时密码
# 查看文件内容
cat /var/log/mysqldl.log
# 查看文件内容中包含password的行信息
cat /var/log/mysqld.log | grep password
cat /var/log/mysqld.log | grep localhost
# 这时就可以查询当前数据库的临时密码
-KRZtMH(G87C修改 MySQL 密码
登录MySQL,修改密码,开放访问权限
# 登录mysql(使用临时密码登录)
mysql -uroot -p # 回车
-KRZtMH(G87C # 输入密码
# 修改密码
# 设置密码长度最低位数
set global validate_password_length=4;
# 设置密码安全等级低,便于密码可以修改成root
set global validate_password_policy=LOW;
# 设置密码为root
set password = password('root');
# 开启访问权限
grant all on *.* to 'root'@'%' identified by 'root';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
# 开启数据库的防火墙 3306
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 立即生效
firewall-cmd --reload
# 刷新
flush privileges;
# 测试MySQL数据库是否正常工作
show databases;
# 可以在 window上使用 Navicat 软件 连接
# eg: 连接 192.168.48.128
# 注意点: 需要开启 数据库的防火墙 3306手动部署项目
在IDEA中开发SpringBoot项目并打成jar包
// 步骤一: 打开项目 // 步骤二: 点击右边 M 标识 // 步骤三: 选择生命周期 // 步骤四: 找到 package 双击 进行打包操作 // 步骤五: 打包完成可以在target文件夹 下面有一个.jar 包将jar包上传到Linux服务器
# 上传 打好的 jar包 rz # 创建新目录 将项目jar包放在此目录 mkdir /usr/local/app # 将jar包 复制到 上面创建的文件里面 cp helloword-0.0.1-SNAPSHOT.jar /usr/local/app启动项目
# 启动java项目 java -jar helloword-0.0.1-SNAPSHOT.jar # 出现报错 helloword-0.0.1-SNAPSHOT.jar中没有主清单属性 # 解决方案: 源文件请看下面 pom.xml # 1.注释掉 # 2.将 skip 值改为 false<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zkwy</groupId> <artifactId>helloword</artifactId> <version>0.0.1-SNAPSHOT</version> <name>helloword</name> <description>helloword</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.6.13</spring-boot.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>com.zkwy.helloword.HellowordApplication</mainClass> <!-- 问题: SpringBoot-0.0.1-SNAPSHOT.jar 中没有主清单属性 解决方案: 1.注释掉 2.将 skip 值改为 false --> <!--<skip>true</skip> 如果是 true java -jar xxx.jar 会显示 xxx.jar中没有主清单属性--> <skip>false</skip> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>检查防火墙, 确保8080端口对外开放
# 查看开放的端口号 firewall-cmd --zone=public --list-ports # 开启 8080对外开放 firewall-cmd --zone=public --add-port=8080/tcp --permanent # 关闭 8080对外开放 firewall-cmd --zone=public --remove-port=8080/tcp --permanent # 立即生效 firewall-cmd --reload浏览器访问接口
# http://192.168.48.128:8080/hello # 若 响应成功 可以看到返回的 OK改为后台运行SpringBoot程序,并将日志输出到日志文件
目前程序运行的问题
- 线上程序不会采用控制台霸屏的形式运行程序,而是将程序在后台运行
- 线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息
# nohup命令:英文全称nohangup(不挂起),用于不挂断地运行指定命令,退出终端不会影响程序的运行 # 语法格式: nohup Command[Arg ..][&] # 参数说明: # Command:要执行的命令 # Arg:一些参数,可以指定输出文件 # &:让命令在后台运行 # 举例: # 后台运行java-jar命令,并将日志输出到hello.log文件 nohup java -jar boot工程.jar &> hello.log &停止SpringBoot程序
# 查询进程 id ps -ef | grep 'java -jar' # 杀死进程 kill -9 2477(即上面查询到 进程的id)
Shell脚本自动部署项目
# 步骤一: 本地环境开发
# 步骤二: push 将本地代码提交到远程仓库 ( Git仓库 )
# 步骤三: pull 将远程仓库代码拉取到 Linux服务器
# 编译 打包 启动1、在Linux中安装Git
# 列出git安转包
yum list git
# 在线安装git
yum install git.xxxx # 即查询的安转包名称
# 使用 Git 克隆代码
cd /usr/local/
git clone xxxxxxxxxxx.git2、在Linux中安装maven
# 上传文件
rz
# 解压文件
tar -zxvf apache-maven-3.9.9-bin.tar.gz -C /usr/local
# 修改配置文件,加入如下内容
vim /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.9.9
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
# 刷新配置文件
source /etc/profile
# 检验是否安转成功
mvn -version
# 配置maven本地仓库
mkdir /usr/local/repo
vim /usr/local/apache-maven-3.9.9/conf/settings.xml
<localRepository>/usr/local/repo</localRepository>3、编写Shell脚本(拉取代码、编译、打包、启动 )
# 将资料中提供的Shell脚本文件复制到Linux bootSatrt.sh
# Shell脚本(shellscript),是一种Linux系统中的脚本程序。
# 使用Shell脚本编程跟JavaScript、Java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
# 对于Shell脚本编写不作为本课程重点内容,直接使用课程资料中提供的脚本文件bootStart.sh即可。# bootStart.sh
#!/bin/sh
echo =================================
echo 自动化部署脚本启动
echo =================================
echo 停止原来运行中的工程
APP_NAME=helloword
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/helloword
echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成
echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
cd target
echo 启动项目
nohup java -jar helloword-0.0.1-SNAPSHOT.jar &> helloword.log &4、为用户授予执行Shell脚本的权限
# chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
# Linux中的权限分为:读(r)、写(w)、执行(x)三种权限
# Linux的文件调用权限分为三级:文件所有者(Owner)、用户组(Group)、其它用户(OtherUsers)
# 只有文件的所有者和超级用户可以修改文件或目录的权限
# 要执行Shel脚本需要有对此脚本文件的执行权限,如果没有则不能执行
# Owner Group OtherUsers
-rw-r--r--. 1 root root 802 1月 8 09:38 bootStart.sh为用户授权
chmod命令可以使用八进制数来指定权限
| # | 权限 | rwx |
|---|---|---|
| 7 | 读+写+执行 | rwx |
| 6 | 读+写 | rw- |
| 5 | 读+执行 | r-x |
| 4 | 只读 | r-- |
| 3 | 写+执行 | -wx |
| 2 | 只写 | -w- |
| 1 | 只执行 | --x |
| 0 | 无 | --- |
# 举例:
# ● chmod 777 bootStart.sh 为所有用户授予读、写、执行权限
# ● chmod 755 bootStart.sh 为文件拥有者授予读、写、执行权限,同组用户和其他用户授予读、执行权限
# ● chmod 210 bootStart.sh 为文件拥有者授予写权限,同组用户授予执行权限,其他用户没有任何权限
# 注意: 三位数字分别代表不同用户的权限
# ● 第1位表示文件拥有者的权限
# ● 第2位表示同组用户的权限
# ● 第3位表示其他用户的权限5、执行Shell脚本
# 执行Shell脚本
./bootStart.sh6、设置静态 ip
# VMware 查看ip
# 打开软件 => 编辑 => 虚拟网络编辑器
# 使用本地的DHCP服务器将IP地分配给虚拟机 若关机重启ip可能会变
# 解决方案 设置静态ip
# 修改文件 /etc/sysconfig/network-scripts/ifcfg-ens33
# 内容如下:
# 注意事项: 修改后的静态ip, 网关, DSN服务器的网段需要和VMware一样
BOOTPROTO="static" # 使用静态IP地址,默认为dhcp
IPADDR="192.168.48.128" # 设置的静态IP地址
NETMASK="255.255.255.0" # 子网掩码
GATEWAY="192.168.48.2" # 网关地址
DNS1="192.168.48.2" # DNS服务器7、重启网络服务
systemctl restart network
# 注意点: 重启完网络服务后ip地址已经发生了改变,此时FinalShell已经连接不上Linux系统,需要创建一个新连接才能连接到Linux