目录
[绝对路径 vs 相对路径](#绝对路径 vs 相对路径)
[使用 tab 键补全](#使用 tab 键补全)
[使用 ctrl + c 重新输入](#使用 ctrl + c 重新输入)
[5.部署 Web 项目到 Linux](#5.部署 Web 项目到 Linux)
[5.1 数据库建表](#5.1 数据库建表)
[5.2 构建项目并打包](#5.2 构建项目并打包)
[5.3 拷贝到 Tomcat 中](#5.3 拷贝到 Tomcat 中)
1.Linux发行版
Linux 是一个操作系统. 和 Windows 是 "并列" 的关系. 严格意义来说只是一个**"操作系统内核".**
一个完整的操作系统 = 操作系统内核 + 配套的应用程序.
由于 Linux 是一个完全开源免费的内核, 因此有些公司/开源组织又基于 Linux 内核, 提供了不同的配套程序. 这就构成了不同的 "发行版".

2.Linux常用命令
ls
语法 : ls [选项] [目录或文件]
功能 :对于目录,该命令列出该目录下的所有子目录与文件。对于文件将列出文件名以及其他信息
常用选项:
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如: ls --d 指定目录
-k 以 k 字节的形式表示文件的大小。 ls --alk 指定文件
-l 列出文件的详细信息。
-r 对目录反向排序。
-t 以时间排序。
-R 列出所有子目录下的文件。 (递归)

pwd
语法 : pwd
功能 :显示用户当前所在的目录

cd
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
语********法 : cd 目录名
功能 : 改变工作目录。将当前工作目录改变到指定的目录下.
举例 :
cd .. : 返回上级目录
cd ~:进入当前用户的主目录
cd -:返回最近访问目录
认识 Linux 目录结构
Linux 是一个树形目录结构.

在 Linux 中有一些特殊目录具有特定含义,比如:
- /(根目录):整个文件系统的起始点。
- /home:通常存放用户主目录。
- /bin 和 /sbin:分别存放普通用户和系统管理员常用的可执行命令。
- /etc:系统配置文件的存放地。
- /var:存放经常变化的数据,如日志等。
- /usr:包含系统软件资源等。
- /proc:虚拟文件系统,反映系统运行状态。
- /dev:设备文件目录。
touch
语法 : touch [选项]... 文件...
功能 : 创建一个空文件。如果指定的文件不存在,使用"touch"命令会创建一个新的空文件。更新文件的时间戳。如果指定的文件已经存在,命令会将该文件的访问时间和修改时间更新为当前时间。
举例 :
touch test.txt
mkdir
语法 : mkdir [选项] dirname...
功能 :在当前目录下创建一个名为 "dirname"的目录,
"mkdir dirname":直接创建一个名为"dirname"的目录。
"mkdir -p parent/dir":可以一次性创建多级嵌套的目录,若父目录不存在也会自动创建。
举例:
mkdir --p test/test1 : 递归建立多个目录
cat
语法 :cat [选项] [文件]
功能 : 查看目标文件的内容
-n 对输出的所有行编号、多个文件可连接查看
cat test.txt
rm
语法 : rm [-f-i-r-v] [dirName/dir]
功能 :删除文件或目录
-f 即使文件属性为只读(即写保护),亦直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
举例 :
rm -r test .txt
cp
语法 :cp [选项] 源文件或目录 目标文件或目录 功能 : 复制文件或目录
说明 : cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
cp test1.txt test2.txt
mv
语法 : mv [选项] 源文件或目录 目标文件或目录
功能 :(move)
-
视mv命令中第二个参数类型的不同(是目标文件还是目标目录), mv命令将文件重命名或将其移至一个新的目录中。
-
当第二个参数类型是文件时, mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目 录名),它将所给的源文件或目录重命名为给定的目标文件名。
-
当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个, mv命令将各参数指定的源文件均移至目标目录中
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
mv test1.txt test2.txt
man
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。
语法 : man [选项] 命令
查看ls相关使用说明:
man ls
vim
vim 是一个知名的文本编辑器. 前面学习的 cat, less, head, tail 等命令只能查看文本, 不能编辑文本. 使用 vim 就可以进行编辑了.
vim 就相当于 Windows 的记事本. 只不过功能比记事本强大一些.
1) 创建文件 / 打开文件
|-------------|
| vim [文件名] |
2) 进入插入模式
vim 打开文件后默认是普通模式 . 普通模式下键盘的按键表示一些特殊功能的快捷键. (例如按下 j 并不是输入字母 "j", 而是表示光标往下移动一行).需要进入插入模式才能进行文本编辑.
使用 i 键可以进入到插入模式 . (左下角提示 --INSERT-- ) 然后就可以像记事本一样正常编辑了.
3) 保存
在插入模式下不能保存文件, 需要先回到 普通模式 . 按下 Esc 回到普通模式. 在普通模式下输入 :w , 再按下回车, 即可保存文件.
4) 退出
在插入模式下不能退出, 需要先回到普通模式 . 在普通模式下输入 :q , 再按下回车, 即可退出.
也可以直接使用 :wq 同时执行保存和退出.
grep
语法: grep [参数]... [文件]...
功能 :用于查找文件中是否包含指定字符串, 并显示对应的行.
选项 :
-n<行数> 显示的行数
-w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, 而不仅仅是一个单词的一部分.
-r 递归查找. 可以搜索多级目录下的所有文件.
--color 高亮查找到的结果
--include 指定查找某些文件
--exclude 指定排除某些文件
grep "hello" Hello.java
ps
语法: ps [参数]...
功能 :用于查看当前系统上运行的进程
a 显示一个终端的所有进程
u 以用户为主的格式来显示程序状况
x 显示所有程序,不以终端机来区分
ps aux # 显示系统上所有的进程
ps aux | grep "进程名"
ps aux | grep "进程id"
netstat
语法: netstat [参数]...
功能 :查看系统上的网络状态.
-a 显示所有正在或不在侦听的套接字
-n 显示数字形式地址而不是去解析主机、端口或用户名
-p 显示套接字所属进程的PID和名称
netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"
绝对路径 vs 相对路径
使用 tab 键补全
我们敲的所有的 Linux 命令, 都可以使用 tab 键来尝试补全, 加快效率,且不易出错
使用 ctrl + c 重新输入
如果命令或者目录敲错了, 可以ctrl + c取消当前的命令.
粘贴与复制快捷键
复制命令:Ctrl+Insert 组合键或用鼠标选中即是复制
粘贴命令:Shift+Insert 组合键或单击鼠标滚轮即为粘贴
3.Linux环境搭建
环境搭建方式
-
直接安装在物理机上. 但是由于 Linux 桌面使用起来非常不友好. [不推荐 ].
-
使用虚拟机软件, 将 Linux 搭建在虚拟机上. 但是由于当前的虚拟机软件(如 VMWare 之类的)存在一 些 bug ,会导致环境上出现各种莫名其妙的问题, 比较折腾. [非常不推荐 ]
-
使用 WSL (Windows Subsystem for Linux). 这个是 Windows 近几年开发的新功能, 在 Windows 系统内集成了一个 Linux.但是目前这个技术还不够成熟. [暂时不推荐 ].
-
使用云服务器, 可以直接在腾讯云, 阿里云等服务器厂商处直接购买一个云服务器. [推荐 ]
使用云服务器
使用云服务器并设置安全组,避免后期通过终端软件连接不上Linux,例如:

这边要确认端口22和端口8080允许被访问,不然后期终端软件和Tomcat连接不上
记得重新设置密码,不要太简单,不然容易被黑客攻击
4.搭建Java部署环境
Tomcat
1. 下载 Tomcat 压缩包
下载路径可以参考官网 Apache Tomcat® - Apache Tomcat 8 Software Downloads
下载过后可以直接拖动压缩包到控制台,前提是在Linux上下载了Lrzsz
第一步:更新库
sudo apt-get update
第二步:下载lrzsz
sudo apt install lrzsz
2. 解压缩 Tomcat
# 使用 unzip 命令解压缩
unzip apache-tomcat-8.5.47.zip
3. 修改可执行权限
先到bin目录下
cd apache-tomcat-8.5.47/bin
# 将所有 .sh 后缀的文件加上可执行权限
chmod +x *.sh
4. 启动 Tomcat
./startup.sh
JDK
直接使用apt命令安装:
apt-cache search java11
选择安装的JDK版本

sudo apt-get install openjdk-11-jdk
安装完成后查看jdk版本:
java -version

MySQL
使用 apt 命令安装mysql
#1、更新安装包管理工具
sudo apt-get update
#2、安装 mysql数据库,过程中的选项选择 y
sudo apt-get install mysql-server
要修改一些配置,具体参考下列文章
https://zhuanlan.zhihu.com/p/49046496
5.部署 Web 项目到 Linux
工作中涉及到的 "环境"
开发环境 : 程序猿写代码用的机器.
测试环境 : 测试人员测试程序使用的机器. 一般是退役的部署机器.
生产环境 (线上环境): 最终项目发布时所使用的机器. 对稳定性要求很高.
把程序拷贝安装到生产环境上, 这个过程称为 "部署". 也叫 "上线".
这个过程需要拷贝对应的 .class 文件和依赖的资源文件(各种配置文件, html等) 一旦程序部署成功, 那么这个程序就能被外网中千千万万的普通用户访问到.
5.1 数据库建表
按照之前的数据库建表脚本, 在服务器上运行, 建立相同的表结构.
mysql -u[数据库用户名] -p[数据库密码] < [数据库脚本].sql
5.2 构建项目并打包
使用 idea 的 maven 针对项目进行打包.双击package

5.3 拷贝到 Tomcat 中
将 war 包拷贝到****Tomcat 的webapps 目录中.
稍等片刻, Tomcat 会自动解压缩 war 包, 完成部署.
注意 : 如果该项目之前部署过, 需要先删除之前的包.