文章目录
- 1. Linux前置知识
- 1.1. 什么是Linux
- 1.2. Linux环境的搭建
- 2. Linux常用命令
- ls
- cd pwd
- touch cat more echo mkdir
- vi/vim
- rm cp mv
- grep ps netstat 管道符
- yum相关
- Linux权限
- 3. 使用Linux部署Servlet项目
- 3.1. 安装JDK
- 3.2. 安装Tomcat
- 3.3. 通过yum安装MariaDB
- 3.4. 部署Servlet项目
1. Linux前置知识
1.1. 什么是Linux
Linux 是由林纳斯·托瓦兹(Linus Torvalds)在 1991 年创立并发展至今成为服务器操作系统领域的核心系统。
Linux 与 Windows 一样,是一种操作系统(搞管理的软件),Linux 严格意义来说只是一个 “操作系统内核”;一个完整的操作系统 = 操作系统内核 + 配套的应用程序。
Linux 可以称之为当今第一大操作系统,在桌面端, Linux 大概落后 Windows 20 年左右的水平(相当于windows xp),所以人们日常使用的主要是 Windows;而在服务器端,Linux 基本上吃掉了绝大部分市场份额(Windows 也有 Windows Server);在移动端,Linux 也是大哥大, Android 系统本质上就是个 Linux,IOS 虽然不算是 Linux,但是是表兄弟关系,嵌入式设备(冰箱洗衣机空调路由器…),还得是Linux;Linux 的实际市场份额是更多的。
由于 Linux 是一个完全开源免费的内核,因此有些公司/开源组织又基于 Linux 内核,提供了不同的配套程序,这就构成了不同的 “发行版”,企业中使用最多的发行版是 RedHat(红帽),但是它是付费的,我们可以使用基于红帽系统的的社区免费版本 CentOS。
Windows 主要操作都是通过图形化界面,而 Linux 主要是通过命令行操作的,因为 Linux 操作系统的图形化页面不好用且(经常有 bug),使用命令行的形式操作更加高效且稳定资源占用低。
1.2. Linux环境的搭建
想要学习 Linux 就得先有 Linux 环境,Linux的环境搭建有以下方法:
- 使用物理机:直接将 Linux 装在电脑上(不要 Windows),如果你真这么搞,我敬你是一条汉子;Linux 桌面使用起来是不太不友好的,一天能崩溃好几次,操作难度也比较大,不推荐。
- 使用虚拟机:在你的电脑上装个虚拟机软件(使用软件模拟硬件),此时就能在虚拟机上装系统了,但是目前的虚拟机软件存在一些 bug,会莫名其妙出现一些问题,而且没有外网 IP 推荐。
- 使用 WSL:WSL (Windows Subsystem for Linux)是 Windows 近几年开发的新功能,在 Windows 系统内集成了一个 Linux,但是目前这个技术还不够成熟,不能作为生产环境,不推荐。
- 使用云服务器:强烈推荐,它会有一个外网 IP,可以将项目部署被外部访问;学生买一个云服务器很便宜,学习阶段,腾讯云、阿里云、华为云这些厂商哪个便宜买哪一个就成。
- 实体服务器:这个更香,但是要求比较高,你得有一些基本的服务器维护的技能,是比较麻烦的。
至于云服务器的使用,登录你所买的云服务器官网管理平台,安转系统镜像( CentOS 7),找到服务器的 IP,然后设置一下云服务器的用户名(默认是 root)与密码就可以使用了。
云服务器是不在我们主机上的,这里推荐使用XShell
来远程控制云服务器使用 Linux。
下面来介绍 Xshell 的安装与使用:
1️⃣第一步,下载,点击下方官网链接,下载免费版的 XShell。
https://www.xshell.com/zh/xshell/
2️⃣第二步,安装,设置路径,一路 next 即可。
3️⃣第三步,使用。
首先,点击新建创建一个会话。
输入相关信息和外网 IP,点击链接。
输入云服务器账户和密码,账户一般为root
,密码就是你自己设的。
像下面这样就表示登成功了,你就可以操控云服务器的 Linux 系统了。
命令提示符:[当前登录的用户名@主机名:当前目录(~表示home目录,是用户存放数据的目录)]#(管理员)/$(普通用户)
,root 用户的 home 目录就是 /root, 是以 root 身份登录后,默认所在的目录。
比如:
命令行操作的好处:
- 带宽、系统资源的占用非常低
- 适合通过脚本来实现批量的重复的操作
2. Linux常用命令
Linux 中ctrl+c
表示取消当行输入,ctrl+insert
表示复制,shift+insert
表示粘贴,ctrl+l
清屏。
man
是帮助指令,可以查看 Linux 中的指令帮助,配置文件帮助和编程帮助等信息。
Linux,命令通用格式:
command [-options] [parameter]
command:命令本身。
-options:[可选项]命令的一些选项,可以通过选项来控制命令的行为细节。
parameter:[可选项]命令的参数,多用于命令的指向目标等。
ls
ls
:查看当前目录里所包含的文件和目录。
ls [-a -l -h] [Linux路径]
当我们不使用选项和参数时,直接使用 ls 时,就会以平埔的方式列出当前目录下的内容,蓝色的是目录,白色的是普通文件。
-a
选项,表示 all,即列出全部文件(包含隐藏的文件/文件夹),这里列出的是/
(根目录的文件夹和文件),云服务器的任意一个文件都是从属于/
目录的。
图中以./..
开头的,就是 Linux 系统中隐藏的文件/文件夹。
-l
选项,表示以列表的形式展示内容,展示更多信息,可以使用ll
来替代ls -l
。
语法中的选项是可以组合使用的,比如 -a -l,下面几种写法效果都是一样的。
ls -l -a
ls -la
ls -al
-h
的作用是列出文件的大小 K、M、G,-h 必须搭配 -l 一起使用,因为 -l 才会列出文件大小的属性。
-d
将目录像文件一样显示,而不是显示其下的文件。
-r
对目录反向排序。
-t
以时间排序。
-R
列出所有子目录下的文件(递归)。
cd pwd
cd
:切换目录,cd ./路径
可以简写为cd 路径
。
cd [Linux路径]
cd 无需选项,只有参数,表示切换到指定目录下,如果 cd 不写参数,会直接返回到 home 目录(回程)。
在使用 cd 的时候,切换的路径不一定要逐字母输入,可以使用tab
键补全,如果只有一个匹配的选项直接就补全了,如果有多个选项,双击tab
可以列出所有匹配结果。
我们敲的所有的 Linux 命令, 都可以使用tab
键来尝试补全, 加快效率。
路径可以使用绝对路径(以/
开头)和相对路径(使用特殊路径符)。
. 表示当前目录
.. 表示上一级目录
~ 表示初始目录
pwd
:查看当前所在目录的路径。
touch cat more echo mkdir
touch
:创建一个空文件。
cat
:显示一个文件的内容。
more
:显示一个文件的内容,cat 是直接将文件内容全部显示出来,more 支持翻页,如果文件内容过多,可以一页页的展示,查看过程中,按空格翻页,按q
退出查看。
touch Linux路径
cat Linux路径
more Linux路径
echo
:打印文件名在控制台,也可以用来写文件,比如echo+字符串
就是在控制台打印一个字符串,echo 字符串 > 文件名.后缀
表示将字符串写入后面的文件中,叫做重定向,每次重定向,会清空文件原有的内容;将>
换成>>
效果就会有覆盖变为拼接。
mkdir
:创建目录。
mkdir [-p] Linux路径
参数是必填的,表示 Linux 路径,即要创建文件的路径,-p
可选表示自动创建不存在的父目录,适用于我们创建连续多层级的目录。
vi/vim
vi\vim 是 Linux 最经典的文本编辑器,vim 是 vi 的加强版,兼容 vi 的所有指令,它为了为了追求编辑效率,引入了大量的快捷键,默认情况下,键盘上的按键都是按照快捷键的方式来进行作用的,此时,键盘按键都被赋予了特殊的含义,不再是单纯的输入文本了。
vim 文件路径
vim 命令默认进入的是普通模式(normal),不能对文件内容进行修改,此时的键盘按键都是快捷键,要编辑文件内容,进入 vim 后需要使用i
命令切换到插入模式(insert);
文件内容修改完毕以后,先按esc
退出插入模式,回到默认的普通模式,输入:wq
保存退出,w
即write
,q
即quit
,:
的作用就是切换到底线命令模式。
底线命令模式命令:
命令 | 作用 |
---|---|
:wq | 保存并退出 |
:q | 退出 |
:q! | 强制退出 |
:w | 保存 |
:set nu | 显示行号 |
:set paste | 设置粘贴 |
如果 vim 没有正确关闭,在下次启动的时候,就会报错(提示你说上次使用没有正确关闭),此时可以直接按D
就是删除未保存的内容,按R
就是恢复之前的编辑内容。
rm cp mv
rm
: 删除文件/删除目录
rm [-r -f] 参数1 参数2 ... 参数n
rm 文件名:删除文件,会提示是否删除,输入 y 就删除。
rm -r 目录名:递归式删除目录,会提示是否确认删除。
rm -rf 目录名:递归式删除目录,不会提示是否确认删除,直接强制删除目录,rm -rf /
表示删除系统上的所有文件,危险操作,慎重使用rm
命令,因为如果将rm -rf /路径
命令中的路径前面多敲了一个空格,系统会认为要删除/
目录和./路径
目录,一样会触发删除所有文件的操作。
rm 命令支持通配符*
(匹配任何内容,包含空)来做模糊匹配:
test*
代表匹配任何以 test 开头的内容*test
代表匹配任何以 test 结尾的内容*tets*
代表匹配任何包含 test的内容
cp
:用于复制文件/文件夹
cp [-r] 参数1 参数2
-r
用于复制文件夹使用,表示递归,参数 1 表示被复制的文件或文件夹,参数 2 表示要复制去的地方,要注意,拷贝操作,有的时候是比较危险的,如果拷贝的目标文件已经存在,就会发生“覆盖”的情况。
mv
:用于移动文件\文件夹,改名(Linux中没有单独的命令重命名)
mv 参数1 参数2
参数 1 表示被移动的文件或文件夹,参数 2 表示要移动的地方;如果参数 2 目标不存在,则将参数 1 则文件/文件夹移动到参数 2 路径的同时改名为参数 2 的文件/文件夹名(一边移动一边改名);如果两个参数都是在同一目录下,这个时候就是单纯的改名作用了;如果参数 1 和参数 2 都是文件,且参数 2 存在的情况下,参数 1 中的内容会覆盖掉参数 2 的内容,相当于将参数的文件删除。
grep ps netstat 管道符
grep
:字符串查找,从文件中通过关键字过滤文件行
grep [-n -R] "关键字" 文件路径
选项-n
显示匹配结果行的行号,-R
表示递归搜索,如果当前目录下还有目录,就会自动进入目录中进行搜索,如果文件路径使用*
就表示扫描当前目录下的所有文件。
管道符 |
:将管道符左边命令的结果,作为右边命令的输入。
ps
:用于查看当前系统上运行的进程
ps [-a -u -x]
-a
显示一个终端的所有进程,-u
以用户为主的格式来显示程序状况,-x
显示所有程序,不以终端机来区分。
可以结合管道符使用,快速筛选指定项进程状态。
ps aux | grep "关键字"
比如要查看 mysql 进程的 pid。
netstat
:查看系统上的网络状态
netstat [-a -n -p]
-a
显示所有正在或不在侦听的套接字,-n
显示数字形式的网络地址而不去解析主机、端口或用户名,-p
显示套接字所属进程的 pid 和名称。
也可以结合管道符使用。
netstat -anp | grep "关键字"
比如,想查询 mysql 服务器的端口号。
yum相关
tree
:查看目录结构,是第三方的 Linux 命令,需要先下载安装,安装命令为yum install tree
,其中yum
命令是一种“包管理器”相当于“应用商店”。
yum list [条件]
:搜索指定条件的资源(指令也算),条件可以没有,相当于手机的应用商店。
yum install [资源名称]
:下载指定资源。
Linux权限
r
:可读权限
w
:可写权限
x
:可执行权限
例如:
rx
表示可读可写但是不可执行
rw
表示可读可执行但是不可写
rwx
表示可读可写可执行
可以使用chmod
指令进行权限的修改。
chmod [-R] 权限 文件/文件夹
-R
表示对文件夹内的全部内容应用同样的操作。
例如,将 test.txt 权限修改为 rwxr-x–x,u 代表 user(文件的拥有者),g 代表 group(同组成员),o 代表 other(其它人)。
chmod u=rwx,g=rx,o=x test.txt
3. 使用Linux部署Servlet项目
我们要部署 Servlet项目,首先我们需要下载 Servlet 项目相关的支持,我们代码是用 Java 写的,所以需要 JDK,我们项目需要实现数据持久化,就需要数据库,我们的项目还需要一个 HTTP 服务器,所以需要 Tomcat。
下面的通过yum
完成的操作要保证当前登录使用的用户是 root 用户。
3.1. 安装JDK
可以基于yum
来安装即可。
grep
可以进行字符串过滤。
查询yum list | grep jdk
,查询含有jdk
字样的软件包。
我们选择 jdk8,64 位的。
然后执行安装命令:
yum install java-1.8.0-openjdk.x86_64 //安装
在安装的过程中,有个提示你是否要确认安装,按 y 就行了。
我们这里安装的是 open jdk,与我们在 Windows 上面的 jdk 并不是完全一样的,我们 Windows 上面的 jdk 是 oracle 官方的,而我们使用yum
在 Linux 上安装的是开源组织的 jdk,但由于使用的 jvm 是相同的,区别也不是很大。
安装完成后,输入 javac 来判断是否安装成功,如果安装成功,输入javac
会有如下的页面。
3.2. 安装Tomcat
yum 上安转 Tomcat 是存在问题的,我们使用yum
在 Linux 上搜索 Tomcat 会发现版本都比较老了,
由于不同版本的 Servlet 代码需要不同版本的 Tomcat,我这里需要的是 8.5 系列版本的 Tomcat,所以需要去其他的地方去下载 Tomcat,直接去官网下载即可。
下载好后就是将 Tomcat 安装包上传到 Linux 上(上传前要保证有 JDK),直接将安装包拖到Xshell
上就行,但是它是基于rz
命令实现的,但是rz
在 Linux 中默认是没有的,需要使用yum
进行下载,命令为yum install rzsz
,rz
是把文件从 Windows 上传到 Linux,sz
是把文件从 Linux 传给 Windows。
上传完成后,我们需要进行解压缩,需要使用unzip
命令,没有这个命令的话还是需要下载,yum installer unzip
。
upzip apache-tomcat-8.5.87.zip
在linux中startup
的.sh
文件可以启动Tomcat
程序,我们需要给这些启动脚本赋予权限。
到bin
目录,然后执行chmod +x *.sh
即可。
加权限之前:
加上权限之后:
使用sh startup.sh
启动 Tomcat,启动前先检查一下 Tomcat 需要的端口是否空闲(8080,8005
)。
如何验证 Tomcat 是否工作?
方式1:查 看进程ps aux | grep tomcat
。
方式2:查看端口netstat -anp | grep 8080
。
::::/:::*
是 ipv6 的写法。
Tomcat 默认端口有 8080,8005 两个端口,再看一下 8005。
方式3:访问 Tomcat 的欢迎页面。
还可以是访问公网IP:8080
,看有没有 Tomcat 的欢迎页面,但是第一次访问大概率是访问不了了,因为云服务器对大部分端口默认是不支持外部访问的,这样是为了减少黑客的攻击,需要我们去设置一下云服务器的防火墙,设置过程如下:
按照下图填写即可。
点击确定,小等一会儿,就能通过访问8080
端口访问 Tomcat 的欢迎页面了。
3.3. 通过yum安装MariaDB
MariaDB 语法与 MySQL 是差不多的,它是 MySQL 被 Oracle 收购后,MySQL 创始人又发明了 MariaDB。
🍂安装:
安装 mariadb 服务
yum install -y mariadb-server
安装 mariadb 命令行客户端
yum install -y mariadb
安装 mariadb C library
yum install -y mariadb-libs
安装 mariadb 开发包
yum install -y mariadb-devel
🍂启动:
启动服务
systemctl start mariadb
设置开机自动启动服务
systemctl enable mariadb
查看服务器状态
systemctl status mariadb
注意到 Active 状态为 active (running**)**
🍂测试连接:
默认是无密码的,使用命令行客户端尝试连接
mysql -uroot
查看mariadb版本号:
select version();
创建数据库时为了支持中文,统一使用 utf8mb4 字符集
MariaDB [(none)]> create database demo_db charset utf8mb4;
可以使用 ctrl+d 退出 mysql 客户端。
3.4. 部署Servlet项目
我这里部署的是我写的一个 Servlet 版的博客系统。
1️⃣第一步,在服务器建库建表,找到之前写的sql
语句,粘贴到服务器数据库即可。
2️⃣第二步,微调 Java 代码,主要就是 DBUtil 类中的数据源配置信息,主要是要修改为服务器数据库所对应的 url,用户名和密码,我这里的服务器数据库上是没有密码的,因此需要将密码设置为空字符串""
,数据库用户名仍然为root
,不需要改变,建库建表也是一样的,所以 url 也不用改。
3️⃣第三步,设置打包格式为war
包和名称,就是在pom.xml
配置文件加上以下格式的语句即可:
<!-- 设置打包方式为war包, 不写默认为jar包-->
<packaging>war</packaging>
<build>
<!--指定war包名-->
<finalName>blog_system</finalName>
</build>
4️⃣第四步,打包部署,上传到服务器 Tomcat 的webapps
目录中,即将war
包拖拽到webapps
目录。
此时程序算部署好了,就可以公网使用 IP 来访问进行访问,地址为http://101.42.25.148:8080/blog_system/login.html
。