大家好,我是晓星航。今天为大家带来的是 Linux基本使用和程序部署 相关的讲解!😀
Linux 是一个操作系统. 和 Windows 是 “并列” 的关系.
Unix & Linux 发展历程图
这俩大佬本来是想开发一个操作系统 , 但是开发着开发着, 发现现有的编程语言不太好使, 于是俩人 一合计, 先整个编程语言出来吧. 于是 C 语言 就诞生了.
Dennis Ritchie 大佬 2011 年就去天堂写代码了. Ken Tompson 大佬后来在 google, 又参与发明了 Go 语言.
值的一提的是, Linus 在开发 Linux 的时候, 觉得现有的 版本管理工具 并不太方便. 于是开发了一个 新的版本管理工具. 也就是现在最广泛使用的 git .
Linus 大佬现在 50 多岁了, 但是仍然在互联网上非常活跃. 经常会拍一些视频. 在 油管 或者 B站 上 就可以找到.
https://www.bilibili.com/video/BV1qv411b79d?from=search&seid=3828654573220073441
经过这么多年的发展, Linux 已经成为 世界第一大操作系统.
有的同学可能表示, Linux 都是世界第一大操作系统了, 我咋还没听说过? 不, 其实你听说过. 安卓系 统本质上就是 Linux.
Linux 严格意义来说只是一个 “操作系统内核”.
一个完整的操作系统 = 操作系统内核 + 配套的应用程序.
由于 Linux 是一个完全开源免费的内核, 因此有些公司/开源组织又基于 Linux 内核, 提供了不同的配套程序. 这就构成了不同的 “发行版”.
企业中最主要使用的发行版是 RedHat (红帽). 但是 RedHat 是一个收费的系统(报价参考 https://www.redhat.com/en/store/linux-platforms?intcmp=701f20000012m33AAA).
因此我们使用的是基于 红帽系统的的社区免费版本 CentOS.
CentOS 和 RedHat 的关系
RedHat一直都提供源代码的发行方式,CentOS就是将RedHat发行的源代码去掉 RedHat 的 logo 商标, 重新编译一次.
RedHat对这种发行版的态度是:“我们其实并不反对这种发行版,真正向我们付费的用户,他们重视的并不是系统本身,而是我们所提供的商业服务。”
所以,CentOS可以得到RedHat的所有功能,甚至是更好的软件。但CentOS并不向用户提供商业 支持,当然也不负上任何商业责任。
Linux 虽然也有图形化界面, 但是在 服务器 / 嵌入式设备上往往都是通过命令行的方式操作的. 因此学习 Linux 命令就是使用 Linux 的重要基础.
使用命令相比于使用图形界面主要有以下好处:
- 节省系统资源: 运行图形界面需要让系统付出一些额外的资源开销. 尤其是对于配置比较低的 嵌入式设备, 这一点至关重要.
- 节省网络带宽: 如果通过网络访问服务器, 使用图形界面需要传输一帧一帧的图像, 而使用命令 只需要传输简单的字符串.
- 便于批量执行任务: 可以通过一些 “脚本” 代码 (比如 Linux Shell) 来批量执行一些任务, 完成 一些简单的编程工作. (比如定时备份文件, 删除文件等).
Windows 也有命令(也就是 cmd), 只是对于普通用户来说很少使用.
Linux 自身提供了一些 API, 供程序猿调用来完成一些更复杂的编程任务(比如文件操作, 多线程编程, socket 编程等).
但是由于 Java 跨平台的特性, 这部分功能已经被 Java 自身封装好了 (流对象, Thread 对象, Socket 对象 等). 所以这部分内容我们不必再学习了.
我们自己写的 web 程序, 要想让其他的用户能够访问, 就需要发布到服务器上. 这是我们接下里重点学习 的内容.
小结: 对于 Java 程序猿, 关于 Linux 重点学习 基础命令 和 项目部署 即可.
要想学习 Linux , 需要先有一个 Linux 的环境.
主要有四种:
如腾讯云阿里云等为在校学生提供了优惠, 只要通过学生认证, 最低可以 10 块钱一个月. 还是非常划算的.
甚至同学们可以 4 , 5 个人共用一台服务器, 平均下来一个人一个月 2 块钱.
使用云服务器不仅环境搭建简单, 避免折腾, 同时还有一个最大的好处, 部署在云服务器上的项目可以直接 被外网访问到, 这个时候就和一个公司发布一个正式的网站没有任何区别. 也就能让我们自己写的程序真 的去给别人去使用.
能够在外网被访问是非常有意义的. 这样我们以后面试的时候就可以提前部署好项目, 现场给面试官演示了.
我们以腾讯云为例, 其他的服务器厂商也是类似.
注意: 由于腾讯云官网一直在改版, 同学们实际看到的页面可能和课件上略有差别. 如果遇到某个环 节搞不定, 随时可以咨询腾讯云的客服小姐姐. (腾讯云的客服是非常热情的, 尤其是在你付钱之前 ~~).
点击立即认证, 按照系统提示, 完成实名认证即可(认证速度很快).
蓝色方框为公网 ip 地址, 稍后我们就会使用这个 ip 登陆服务器.
小结:
在这个环节我们最重要的是得到三个信息:
这三个信息是我们登陆到 Linux 上的必要条件.
终端软件是一类工具软件, 可以和远程的主机建立网络连接, 从而对主机进行一些操作.
常见的终端软件:
我们这里使用的是 XShell.
下载地址: Xshell 下载 - NetSarang Website
XShell 提供了两种授权方式.
我们选择 家庭/教育 版即可. 下载的时候需要填一下名字和邮箱. 下载链接会被发送到填写的邮箱中.
邮箱中收到的内容形如:
点击邮箱中的下载链接即可完成下载.
在 XShell 终端下输入
ssh 服务器外网ip地址
ip 为腾讯云后台页面中看到的 外网 IP.
如果网络畅通, 将会提示输入用户名密码. 输入即可正确登陆.
备注: 这里的用户名为 root, 密码是在最初购买服务器的时候设置的密码.
个别同学可能会出现无法输入密码的情况, 解决方案参考 https://www.cnblogs.com/lemon-le/p/11168609.html
关于XShell 下的复制粘贴
复制: ctrl + insert (有些同学的 insert 需要配合 fn 来按)
粘贴: shift + insert
ctrl + c / ctrl + v 是不行的.
语法: ls [选项] [目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
- -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
- -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
- -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
- -l 列出文件的详细信息。
- -r 对目录反向排序。
- -t 以时间排序。
- -R 列出所有子目录下的文件。(递归)
举例:
ls -l
相比于 ls -l
,更常用 ll
这里的 ll /
和 ls -l
效果是一样的
语法: pwd
功能:显示用户当前所在的目录
举例:
pwd
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
语法: cd 目录名
功能: 改变工作目录。将当前工作目录改变到指定的目录下.
举例:
cd .. : 返回上级目录
cd ~:进入用户家目
cd -:返回最近访问目录
认识 Linux 目录结构
Linux 是一个树形目录结构.
几个特殊的目录:
/ 称为根目录
. 称为当前目录
… 称为当前目录的上级目录
功能:返回上一级目录
cd ..
功能:进入 /root 目录(以绝对路径进入/root)
cd /root
表示进入根目录下的名为“root”的子目录
根目录在Linux系统中表示为“/”。所以,执行cd /root命令后,会进入“/root”目录
功能:进入 /root 目录(以相对路径进入/root)
cd root
如果当前工作目录是“/home/user”,那么执行cd root命令后,会进入“/home/user/root”目录
功能:进入 root 目录(以相对路径进入/root)
cd root/
无论当前工作目录在哪里,都会进入当前目录下的“root”子目录
例如,如果当前工作目录是“/home/user”,那么执行cd root/命令后,会进入“/home/user/root”目录。
绝对路径 vs 相对路径
形如: /usr/share/tomcat/logs/
以根目录开头的, 称为绝对路径.
形如: ./logs
以 . 或者 … 开头的, 称为相对路径.
语法: touch [选项]… 文件…
功能: touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者 新建一个不存在的文件 。
举例:
touch java_1114.txt
touch创建的文件在哪,取决于当前处于那个目录下(pwd的结果是啥),此时文件就创建在哪里。
语法:cat [选项] [文件]
功能: 查看目标文件的内容
常用选项:
- -n 对输出的所有行编号
cat java_1114.txt
语法:echo [输入内容] [文件]
功能:写目标文件内容
常用选项:
>
是重定向的功能(采取覆盖模式 )>>
也是重定向功能(采取拼接模式)
echo "hello" > java_1114.txt
此时我们使用 cat 命令来查看一下 java_1114.txt
文件里面的内容
如果此时我们用 >
再写入一个haohaoxuexi,那么之前的内容还会不会存在呢?
通过实践之后我们看到 >
采取的是覆盖模式,如果输入了新内容,那么原先的内容会被直接覆盖掉!
此时我们用 >>
再写一个tiantianxiangshang,那么之前的内容还会不会存在呢?
通过实践我们也可以得到结果,我们可以发现用 >>
来echo一下,我们采取的是拼接模式,新写的内容会编写到旧代码的下面一行!
回响功能(输入啥就返回啥):
cat、echo、vi、vim区别与联系:cat 和 echo 只是简单粗暴的读取文件。读取内容非常简单,使用它们没问题。如果读取内容更复杂,就需要使用更强大的编辑器了。vi/vim 就是Linux上默认自带的 “记事本” 程序。
vi 和 vim 其实是两个程序,vim 是 vi 的升级版用法差不多。
语法:mkdir [选项] dirname…
功能:在当前目录下创建一个名为 “dirname”的目录
常用选项:
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将 自动建立好 那些尚不存在的目录,即一次可以建立多级目录
举例:
mkdir –p test/test1 : 递归建立多个目录
进入java106目录
举例:
再java106目录下分别创建了aaa、bbb和ccc目录,并进入aaa目录,再里面创建后缀为.txt文件并退出,然后查看(ll或者ls -l)当前目录下所有文件
快速连续的创建3个目录:
创建多级目录(注意一定要加上-p):
语法:rm [-f-i-r-v] [dirName/dir]
功能:删除文件或目录
常用选项:
- -f 即使文件属性为只读(即写保护),亦直接删除
- -i 删除前逐一询问确认
- -r 删除目录及其下所有文件
举例:
rm test.txt
删除文件:
rm [文件名]
//输入y彻底删除,输入其他的则不会删除。
这里的 y
表示确定删除,如果输入别的那么这个文件就不会删除!
删除目录:
rm -ri [目录名]
//这里由于有-i命令,所以在删除目录时会逐一询问,输入y彻底删除,输入其他的则不会删除。
重要注意事项:
千万不要运行 rm -rf /
, 尤其是在公司的生产服务器上.
理解递归删除的过程:
先手动创建如下目录结构:
test
├── a
│ ├── a1
│ │ ├── 1.txt
│ │ └── 2.txt
│ └── a2
├── b
│ ├── b1`
│ │ ├── 1.txt
│ │ └── 2.txt
│ └── b2
└── c
使用 rm -ri 命令删除 test, 观察删除的顺序.
语法:cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在 的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
cp
copy 复制 = 复制 + 粘贴
常用选项:
- -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
- -i 或 --interactive 覆盖文件之前先询问用户
- -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录 或符号链接,则一律视为普通文件处理
- -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
举例:
cp test1.txt test2.txt
第一个参数表示 源 ,第二个参数表示目标
cp -r [目标文件] [赋值后的新文件名字]
从上图我们可以看出,我们将aaa目录复制之后,重命名为了zzz并保存到了当前目录中。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
mv
move 移动 = 剪切 + 粘贴
常用选项
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
举例
mv 1.txt bbb/
第一个参数表示 源 ,第二个参数表示目标
从图中可以发现,mv命令是移动,移动完成后,之前的文件夹就自动被剪切掉了。
mv 1.txt ..
mv 1.txt 2.
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。
语法: man [选项] 命令
常用选项
-k 根据关键字搜索联机帮助
num 只在第num章节找
man man 能够看到 man 手册中的若干个章节及其含义.
举例
man ls
vim 是一个知名的文本编辑器. 前面学习的 cat, less, head, tail 等命令只能查看文本, 不能编辑文本. 使用 vim 就可以进行编辑了.
vim 就相当于 Windows 的记事本. 只不过功能比记事本强大一些.
创建文件 / 打开文件
vim [文件名]
vim 打开文件后默认是普通模式. 普通模式下键盘的按键表示一些特殊功能的快捷键. (例如按下 j 并不是 输入字母 “j”, 而是表示光标往下移动一行). 需要进入插入模式才能进行文本编辑.
使用 i 键可以进入到插入模式. (左下角提示 --INSERT-- ) 然后就可以像记事本一样正常编辑了.
我们使用键盘单点一下 i 后,下面变为了INSERT,此时便可以开始写入数据了。
在插入模式下不能保存文件, 需要先回到 普通模式 . 按下 Esc
回到普通模式.
在普通模式下输入 :w
, 再按下回车, 即可保存文件.
此时再次使用cat命令来查看一下我们文件里的内容发现,里面的内容已经修改完毕了!
在插入模式下不能退出, 需要先回到 普通模式.
在普通模式下输入 :q , 再按下回车, 即可退出.
再输入回车
我们就退出了!
如果还是不能退出,那我们就按 5 下 esc ,再输入 :q 就可以了
也可以直接使用
:wq
同时执行保存和退出.这个用的更多 保存并退出
关于 Vim 的用法还有很多. 此处不做过多介绍了. 有兴趣的同学可以参考 vimtutor
(直接在终端输入 vimtutor 即可进入官方教程) 和 <<Vim 使用技巧>>
熟练使用 Vim 能够大大提高代码编辑效率. 主流的开发工具 (比如 IDEA, VSCode 等) 都支持 Vim 风格的快捷键.
遗憾的是熟练使用 Vim 并不是一件容易的事情, 可能需要长达几年的练习.
语法:grep [参数]… [文件]…
功能:用于查找文件中是否包含指定字符串, 并显示对应的行.
选项:
- -n<行数> 显示的行数
- -w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, 而不仅仅是一个单词的一部分.
- -r 递归查找. 可以搜索多级目录下的所有文件.
- –color 高亮查找到的结果
- –include 指定查找某些文件
- –exclude 指定排除某些文件
举例:
grep "hello" Hello.java
**语法:**ps [参数]…
功能:用于查看当前系统上运行的进程
选项:
- a 显示一个终端的所有进程
- u 以用户为主的格式来显示程序状况
- x 显示所有程序,不以终端机来区分
举例:
ps aux # 显示系统上所有的进程
ps aux | grep "进程名"
ps aux | grep "进程id"
**语法:**netstat [参数]…
功能:查看系统上的网络状态.
选项:
- -a 显示所有正在或不在侦听的套接字
- -n 显示数字形式地址而不是去解析主机、端口或用户名
- -p 显示套接字所属进程的PID和名称
举例:
netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"
ctrl + L
clear
我们敲的所有的 Linux 命令, 都可以使用 tab 键来尝试补全, 加快效率.
如果命令或者目录敲错了, 可以 ctrl + c 取消当前的命令.
ctrl + insert
shift + insert
↑ ↓
认识 yum
yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上.
包管理器就好比 “应用商店”, 我们可以在应用商店上下载一些 app.
yum 起到的功能和 Maven 的依赖管理功能类似. 使用 Maven 能帮我们方便的安装一些第三方 jar 包, 而 yum 方便我们方便的安装第三方程序.
类似的, Github 也能起到 “软件仓库” 的效果, 而且确实有些编程语言的包管理工具就是基于 Github (例如 Go 语言). 只不过, Github 不光能用于分发程序, 也能管理源码并进行协同开发, 而 yum 和 maven 都是仅用于分发程序.
查看软件包列表
yum list | grep [软件包关键字] # 注意, 最好要加上 grep, 否则罗列的内容会非常多, 导致机器很卡.
安装软件包(需要管理员权限)
yum install [软件包名字]
卸载软件包(需要管理员权限)
yum remove [软件包名字]
注意事项
ping www.baidu.com
来检测网络的畅通情况.使用命令查看服务器Linux中由哪些可安装的jdk包
yum list | grep jdk
这里的devel =>开发
下面还有很多,就不一一列举了,再上面那么多包中,我们选择jdk-1.8.0这个版本去进行安装。
yum install java-1.8.0-openjdk.x86_64
再输入命令后,我们这里会询问是否确认安装,我们输入y则会开始安装!
此时,我们的jdk-1.8.0便安装完毕了!
注意: yum上的 JDK 是 OpenJDK, 是一个开源版本的 JDK, 和 Oracle 官方的 JDK 略有差别. 此处我 们就使用 OpenJDK 即可. 安装 Oracle JDK 比较麻烦.
使用 java -version
验证是否安装成功.
如果提示 “java 命令找不到” 则说明安装失败.
由于 yum 源上默认的 Tomcat 7 版本, 比较旧了. 我们课堂上使用 Tomcat 8, 需要手动安装, 不能使用 yum.
下载路径可以参考官网 https://tomcat.apache.org/download-80.cgi
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat8/v8.5.47/bin/apache-tomcat-8.5.47.zip -O apache-tomcat-8.5.47.zip
如果上面的地址过期了, 不能下载, 则可以在官网上, 通过右键 zip -> 复制链接地址 获得.
下载好后直接将其拖拽进我们的云服务器中即可。
使用ll查看当前目录命令后,我们可以看到再java106目录下已经有 apache-tomcat-8.5.94.zip 压缩包了。
# 使用 unzip 命令解压缩
unzip apache-tomcat-8.5.94.zip
如果 unzip 命令找不到, 则先
yum install unzip
即可.
解压缩之后,我们可以看到此时我们云服务器上的文件夹就变得和我们自己电脑上的一样了!
cd apache-tomcat-8.5.94/bin
# 将所有 .sh 后缀的文件加上可执行权限(后面会介绍)
chmod +x *.sh
我们进入bin目录之后就可以看到许多与启动脚本相关的内容:
我们再使用 chmod +x *.sh
命令赋予所有的 .sh 文件可执行权限
这里我们发现在赋予了权限之后,我们的文件就从白色变为了绿色,此时表示这些绿色的文件就已经有可执行权限了。
sh bin/startup.sh
验证启动成功
# 方法1 查看 tomcat 进程是否存在
ps aux | grep tomcat
# 方法2 查看端口 8080 是否被绑定
netstat -anp | grep 8080
# 方法3 使用 curl 命令访问默认 demo
curl 127.0.0.1:8080
如果进程存在或者端口状态正确(LISTEN状态)或者能够访问到默认主页, 说明启动成功.
Linux 的 Tomcat 目录结构和 Windows 完全一致. (就是同一个 zip 包解压缩出来的)
在浏览器地址栏中
http://[服务器外网ip]:8080/
即可看到默认的页面
在外网访问这个页面之前需要先开启服务器的 “安全组” 功能.
登陆自己的云服务账户, 在主页中找到 控制台 -> 自己的服务器 -> 安全组
需要配置安全组, 允许外部主机访问服务器的 8080 端口. 备注: 安全组配置界面如果找不到, 可以随时咨询云服务器客服.
(1) 选择加入安全组
(2) 选择新建安全组
(3) 点击新建按钮
(4) 选择安全组的模板, 推荐使用第二个模板
(5) 在任意一行规则的地方, 点击插入, 新增一行安全组规则即可.
MySQL 同样也可以使用 yum 安装. 但是要修改一些配置, 稍微复杂一些.
可以参考陈沛鑫老师写的一个知乎上的文章.
https://zhuanlan.zhihu.com/p/49046496
yum install -y mariadb-server
yum install -y mariadb
yum install -y mariadb-libs
yum install -y mariadb-devel
安装完毕!
启动
启动服务
systemctl start mariadb
设置服务开启自启动
systemctl enable mariadb
查看服务状态
systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2023-11-16 19:07:07 CST; 2min 3s ago
Main PID: 22463 (mysqld_safe)
CGroup: /system.slice/mariadb.service
├─22463 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─22628 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb...
Nov 16 19:07:05 VM-16-13-centos mariadb-prepare-db-dir[22379]: MySQL manual for more instructions.
Nov 16 19:07:05 VM-16-13-centos mariadb-prepare-db-dir[22379]: Please report any problems at http://mariadb.org/jira
Nov 16 19:07:05 VM-16-13-centos mariadb-prepare-db-dir[22379]: The latest information about MariaDB is available at http://mariadb.org/.
Nov 16 19:07:05 VM-16-13-centos mariadb-prepare-db-dir[22379]: You can find additional information about the MySQL part at:
Nov 16 19:07:05 VM-16-13-centos mariadb-prepare-db-dir[22379]: http://dev.mysql.com
Nov 16 19:07:05 VM-16-13-centos mariadb-prepare-db-dir[22379]: Consider joining MariaDB's strong and vibrant community:
Nov 16 19:07:05 VM-16-13-centos mariadb-prepare-db-dir[22379]: https://mariadb.org/get-involved/
Nov 16 19:07:05 VM-16-13-centos mysqld_safe[22463]: 231116 19:07:05 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
Nov 16 19:07:05 VM-16-13-centos mysqld_safe[22463]: 231116 19:07:05 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Nov 16 19:07:07 VM-16-13-centos systemd[1]: Started MariaDB database server.
上述代码为输出结果,启动完毕后,我们测试一下连接是否成功
测试连接
使用命令行客户端尝试连接
mysql -uroot
输出结果如下
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
查看 mariadb 版本号
MariaDB [(none)]> select version();
+----------------+
| version() |
+----------------+
| 5.5.60-MariaDB |
+----------------+
1 row in set (0.01 sec)
创建数据库时为了支持中文,统一使用 utf8mb4 字符集
MariaDB [(none)]> create database demo_db charset utf8mb4;
yum 上的是 MariaDB, 和纯正的 MySQL 还不太一样.
MariaDB 和 MySQL 的关系, 类似于 CentOS 和 RedHat 的关系. 从使用角度上, MariaDB 和 MySQL 之间都是兼容的.
在数据库运行过程中出现问题, 可以查看 MySQL 的错误日志.
在 MySQL 中通过这个命令, 获取到日志的路径
mysql> show variables like 'log_error';
# 输出结果
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| log_error | /var/log/mariadb/mariadb.log |
+---------------+------------------------------+
使用 vim 或 less 查看该文件内容即可.
less /var/log/mariadb/mariadb.log
MySQL 中除了错误日志, 还有很多其他类型的日志. 详细可以参考
https://www.cnblogs.com/f-ck-need-u/p/9001061.html
工作中涉及到的 “环境”
把程序拷贝安装到生产环境上, 这个过程称为 “部署”. 也叫 “上线”.
这个过程需要拷贝对应的 .class 文件和依赖的资源文件(各种配置文件, html等)
一旦程序部署成功, 那么这个程序就能被外网中千千万万的普通用户访问到.
换句话说, 如果程序有 BUG, 这个 BUG 也就被千千万万的用户看到了.
部署过程至关重要, 属于程序开发中最重要的一环. 一旦部署出现问题, 极有可能导致严重的事故(服务器 不可用之类的).
为了防止部署出错, 一般公司内部都有一些自动化部署工具(如 Jenkins 等). 当前我们先使用手工部署的方 式来完成部署.
首先登录数据库
mysql -uroot -p
此时我们的数据库就登陆上去了
注意初次安装数据库时,我们的数据库默认无密码,直接回车即可。
按照之前的数据库建表脚本, 在服务器上运行, 建立相同的表结构.
mysql -u[数据库用户名] -p[数据库密码] < [数据库脚本].sql
招到我们之前再idea上存储的db.sql记事本文件并将里面的内容直接复制粘贴到我们Linux连接的新数据库即可完成建表操作
此时我们的建表操作就完成了!!!
如果出现乱码问题,那么我们删库重创,在新建时都带上设置为utf8格式即可
或者设置我们的数据库默认为utf8格式,注意在设置完毕后要重启我们的数据库:
systemctl start mariadb.service
快捷退出Linux数据库:ctrl + d
如果数据库没有密码,那么命令行可以改为:
mysql -uroot
即可直接进入
使用 netstat -anp | grep mysql
命令来看我们mysql的端口号:
使用 netstat 可以查看某个进程占用了什么端口
进入根目录的etc/文件中找到my.cnf文件
使用vim命令修改my.cnf文件中的内容在里面添加一些新内容
[client]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
修改完成后按Esc,并输入 :wq
来保存我们刚刚输入的内容
重启我们的数据库系统
systemctl start mariadb.service
至此我们设置数据库格式默认为 utf8 便大功告成了!!!
使用 idea 的 maven 针对项目进行打包.
加这些代码使我们的idea对项目打包为.war包,并重命名为blog_system
双击package即可完成打包操作
打好的包在我们的target目录下
从上图可以看到,我们打好的包blog_system.war已经存在于target目录下了
通过Exporer来找到我们.war包的路径
找到我们对应的.war包,并将其拖拽到Linux云服务器中。
将 war 包拷贝到 Tomcat 的 webapps 目录中.
稍等片刻, Tomcat 会自动解压缩 war 包, 完成部署.
注意: 如果该项目之前部署过, 需要先删除之前的包.
进入 java106/apache-tomcat-8.5.94/bin 目录下,输入 sh startup.sh
启动tomcat
记住,执行这个启动脚本之前要保证.sh文件都是 绿色 的(有可执行权限)
sh startup.sh
此时我们的tomcat就启动完毕了
sh shutdown.sh
使用上述命令行代码可以用来关闭tomcat
使用 netstat 来验证tomcat是否启动成功
netstat -anp | grep 8080
我们发现此处我们tomcat启动失败了
此处我们退出上一级目录并进入logs目录下看看日志一探究竟!
我们找一个最大,且日期最近的日期一探究竟
vim cetalina.out
把他放在百度翻译上
使用 netstat -anp | grep 8005
来查看进程号是否被占用
从图中可以看出这里的8005进程被进程ID为14155的java进程占用了
使用 ps aux 命令查看所有进程详细信息 搭配 grep 就可以定位到指定进程了
ps aux | grep [ID号]
从返回的进程详细信息可以看到,8005这个端口是被我们自己的root用户占用了。
那么此时问题就很好解决了,我们可以把 14155 号干掉,或者把 8005 端口改成别的。
接下来我们就改一下我们Tomcat的端口号:
先返回上一级目录,并进入conf/目录中
grep 8005 *
这个命令行代码意为 在所有文件中查找8005这个关键字在哪
从上述信息我们可以看见8005关键字在server.xml中
我们此时就切换到server.xml中
找到8005这个port端口号的地方
将其改为18005并按Esc,输入 :wq 来保存当前修改的文件内容
继续vim,servlet.xml
编辑完server.xml之后,我们输入
netstat -anp | grep 18005
发现此时没有返回值,表示18005这个端口号是没有被占用的!
我们再次切换回bin/目录下输入
sh startup.sh
重新启动tomcat
发现这回tomcat就启动成功了!
在浏览器上访问项目的链接. (按照项目的功能进行验证).
注意事项:
- 要开启 Tomcat 对应端口的安全组(8080)
- 代码中的数据库的地址和账号密码可能需要调整
- 还可以把项目链接生成一个二维码(百度搜 “二维码生成”), 就可以用手机扫码访问.
[外链图片转存中…(img-tRNmk2ov-1705295451710)]
使用 netstat -anp | grep 8005
来查看进程号是否被占用
[外链图片转存中…(img-l7c4nblC-1705295451710)]
从图中可以看出这里的8005进程被进程ID为14155的java进程占用了
使用 ps aux 命令查看所有进程详细信息 搭配 grep 就可以定位到指定进程了
ps aux | grep [ID号]
[外链图片转存中…(img-vMzHSPT5-1705295451710)]
从返回的进程详细信息可以看到,8005这个端口是被我们自己的root用户占用了。
那么此时问题就很好解决了,我们可以把 14155 号干掉,或者把 8005 端口改成别的。
接下来我们就改一下我们Tomcat的端口号:
先返回上一级目录,并进入conf/目录中
[外链图片转存中…(img-FjVax8wJ-1705295451710)]
grep 8005 *
这个命令行代码意为 在所有文件中查找8005这个关键字在哪
[外链图片转存中…(img-WM3iJSUu-1705295451711)]
从上述信息我们可以看见8005关键字在server.xml中
[外链图片转存中…(img-XSujw2v0-1705295451711)]
我们此时就切换到server.xml中
[外链图片转存中…(img-r1SxwE2n-1705295451711)]
找到8005这个port端口号的地方
[外链图片转存中…(img-VyCRsjUV-1705295451711)]
将其改为18005并按Esc,输入 :wq 来保存当前修改的文件内容
继续vim,servlet.xml
[外链图片转存中…(img-NkTNMGb4-1705295451711)]
编辑完server.xml之后,我们输入
netstat -anp | grep 18005
[外链图片转存中…(img-Zxa0vGUr-1705295451712)]
发现此时没有返回值,表示18005这个端口号是没有被占用的!
[外链图片转存中…(img-DS0Glxnj-1705295451712)]
我们再次切换回bin/目录下输入
sh startup.sh
重新启动tomcat
[外链图片转存中…(img-C229k0Vt-1705295451712)]
发现这回tomcat就启动成功了!
[外链图片转存中…(img-5o8Bda36-1705295451712)]
在浏览器上访问项目的链接. (按照项目的功能进行验证).
注意事项:
- 要开启 Tomcat 对应端口的安全组(8080)
- 代码中的数据库的地址和账号密码可能需要调整
- 还可以把项目链接生成一个二维码(百度搜 “二维码生成”), 就可以用手机扫码访问.
感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘