Linux 是一个操作系统. 和 Windows 是 “并列” 的关系.
Unix & Linux 发展历程图

这俩大佬本来是想开发一个操作系统, 但是开发着开发着, 发现现有的编程语言不太好使, 于是俩人一合计, 先整个编程语言出来吧. 于是 C 语言 就诞生了.
Dennis Ritchie 大佬 2011 年就去天堂写代码了. Ken Tompson 大佬后来在 google, 又参与发明了 Go 语言.


值的一提的是, Linus 在开发 Linux 的时候, 觉得现有的 版本管理工具 并不太方便. 于是开发了一个新的版本管理工具. 也就是现在最广泛使用的 git .
Linus 大佬现在 50 多岁了, 但是仍然在互联网上非常活跃. 经常会拍一些视频. 在 油管 或者 B站 上就可以找到.
经过这么多年的发展, Linux 已经成为 世界第一大操作系统.
各位可能表示, Linux 都是世界第一大操作系统了, 我咋还没听说过? 不, 其实你听说过. 安卓系统本质上就是 Linux.
Linux 严格意义来说只是一个 “操作系统内核”.
一个完整的操作系统 = 操作系统内核 + 配套的应用程序.
由于 Linux 是一个完全开源免费的内核, 因此有些公司/开源组织又基于 Linux 内核, 提供了不同的配套程序. 这就构成了不同的 “发行版”.

CentOS 和 RedHat 的关系
RedHat一直都提供源代码的发行方式,CentOS就是将RedHat发行的源代码去掉 RedHat 的 logo 商标, 重新编译一次.
RedHat对这种发行版的态度是:“我们其实并不反对这种发行版,真正向我们付费的用户,他们重视的并不是系统本身,而是我们所提供的商业服务。”
所以,CentOS可以得到RedHat的所有功能,甚至是更好的软件。但CentOS并不向用户提供商业支持,当然也不负上任何商业责任
作为Java程序猿,在实际开发过程中,一般不需要使用系统原生的API,但是会经常涉及一些和Linux相关的 部署 或者 调试 的工作
比如做了一个网站,后端就需要部署到服务器上(服务器主要用的系统就是LInux),才可以被各个用户访问到,这个部署的过程就涉及到一些基本的LInux操作
要想学习 Linux , 需要先有一个 Linux 的环境
主要有四种:
- 直接安装在物理机上. 但是由于 Linux 桌面使用起来非常不友好. [不推荐].
- 使用虚拟机软件, 将 Linux 搭建在虚拟机上. 但是由于当前的虚拟机软件(如 VMWare 之类的)存在一些 bug , 会导致环境上出现各种莫名其妙的问题, 比较折腾. [非常不推荐]
- 使用 WSL (Windows Subsystem for Linux). 这个是 Windows 近几年开发的新功能, 在 Windows 系统内集成了一个 Linux. 但是目前这个技术还不够成熟. [暂时不推荐].
- 使用云服务器, 可以直接在 腾讯云, 阿里云或华为云 等服务器厂商处直接购买一个云服务器. [墙裂推荐]
使用云服务器不仅环境搭建简单, 避免折腾, 同时还有一个最大的好处, 部署在云服务器上的项目可以直接被外网访问到, 这个时候就和一个公司发布一个正式的网站没有任何区别. 也就能让我们自己写的程序真的去给别人去使用.
能够在外网被访问是非常有意义的. 这样我们以后面试的时候就可以提前部署好项目, 现场给面试官演示了.
所以这里就拿服务器做演示
我们以腾讯云为例, 其他的服务器厂商也是类似
进入官方网站 https://cloud.tencent.com/ (这里显示的是腾讯云服务器的官网,各位如果要买云服务的话,可以看本小节,博主当时买的时候,做活动,所以花费的比较少,各位可以各个云服务器厂商看一下,选择一个适合的价位)
登陆网站(可以使用 qq 或者 微信 登陆)

在选好服务器后,点击立即购买就会出现配置选择的框框,这里可以按照自己的选择进行配置
博主在这里的选择
- 活动地域,选择任何地方都可以,都无所谓,随便选择
- 系统镜像(云服务器系统):主要选择的是Centos 7 系列,博主学习的时候用的就是这个系统.



首次使用的时候,需要设置一个初始密码,后期如果密码忘记了,也可以在这里进行重置,这个密码最好设置的稍微复杂一点,前提是自己得记住,外网的环境是十分凶险的 !你的云服务器随时可能会被黑客攻击,有一个复杂点的密码,可以有效的保护自己的机器不被入侵,如果被入侵了,重装系统就好了,前提是服务器里没有特别值钱的东西

做完上述任务后,就可以使用终端工具来远程登录服务器了,这里使用的是Xshell Xshell免费下载地址
下载安装后就可以点击使用Xshell了


此时这里的名称可以随便填写
此处的主机填写的就是外网ip
输入完成后点击连接

此时的用户名默认是root



当前情况就是登录成功,至此Linux环境配置完成

关于XShell 下的复制粘贴
复制: ctrl + insert (有些同学的 insert 需要配合 fn 来按)
粘贴: shift + insert
ctrl + c / ctrl + v 是不行的.
Linux的命是有很多的,这里总结的是最最最常见的常见命令
功能:列出当前目录中包含的文件和目录,类似于window下双击某目录 ,把它打开,看看里面有什么
ls ----> list

此时输入ls指令后,就会显示当前目录下的所有文件和目录,此时的java是蓝色的,那是因为java是一个目录,而text.txt是白色的,那是因为text.txt就是一个单纯的文件而已
需要注意的是,我这里之所以会有显示,那是因为我这里博主创建了文件和目录,如果没有文件和目录,就不会显示任何东西

在ls的后面还可以加上路径,格式为 ls [路径],此处的路径不论是绝对路径还是相对路径都可

ls / 此处的/是Linux下的特殊目录,成为"根目录"相当于windows下面的此电脑
Linux的命令很多支持"选项",在命令后面加上 - 以及一些特殊字母/单词,来开启不同的功能

此处
-l是小写的L,表示使用列表的方式列出目录中的内容,一般用ll代替

常用选项:
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
-l 列出文件的详细信息。
-r 对目录反向排序。
-t 以时间排序。
-R 列出所有子目录下的文件。(递归)
功能:显示用户当前所在的目录

change directory 切换目录
cd 和ls是在工作中最高配使用的命令
功能:cd的功能就是切换到指定的目录,cd 后面加上一个路径,这个路径可以是绝对路径,也可以是一个相对路径

cd .. : 返回上级目录
cd ~:进入用户家目
cd -:返回最近访问目录
认识 Linux 目录结构
Linux 是一个树形目录结构.

几个特殊的目录:
绝对路径 vs 相对路径
形如: /usr/share/tomcat/logs/ 以根目录开头的, 称为绝对路径.
形如: ./logs 以 . 或者 … 开头的, 称为相对路径.
使用 tab 键补全
我们敲的所有的 Linux 命令, 都可以使用 tab 键来尝试补全, 加快效率.
使用 ctrl + c 重新输入
如果命令或者目录敲错了, 可以 ctrl + c 取消当前的命令.
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。

功能: 查看目标文件的内容

因为文件中没有任何内容,所以没有显示
功能:打印内容到控制台,也可以用于写文件

此处的读写文件,只是能进行简单的读写,不能进行复杂的编辑
功能:在当前目录下创建一个名为 “dirname”的目录

此时的tree不是LInux自带的,需要单独下载安装
yum install tree
yun相当于"应用商店",成为"包管理器"
remove 删除,既可以删除文件,也可以删除目录

通过rm text.txt就可以删除文件了

rm可以删除目录,但是却提示ccc是一个目录,无法删除,因为目录下面会有其他目录和文件,rm要加选项才可以删除,比如如果想删除目录的话可以使用
rm -r [目录名]-r 删除目录及其下所有文件

常用选项:
-f 即使文件属性为只读(即写保护),亦直接删除
-i 删除前逐一询问确认
-r 删除目录及其下所有文件
重要注意事项:
千万不要运行 rm -rf / , 尤其是在公司的生产服务器上.
copy复制

cp 直接可以拷贝文件,如果需要拷贝目录,就需要加上 -r 参数


此时不仅仅将aaa目录拷贝了,aaa下面的所有内容全部拷贝到bbb目录了
常用选项:
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
move移动

这两个路径都是绝对路径 / 相对路径均可
直接可以移动目录/移动文件
mv除了可以进行移动,还可以进行重命名

mv操作和cp操作的区别
mv操作,本质是修改文件的名字/路径,这个改动是非常轻量,快速的
cp操作,本质上需要拷贝大量的数据,这个拷贝的过程其实是非常消耗时间的,尤其是文件很大的情况下
常用选项
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
这是Linux上非常有用的命令,man是手册的缩写
man的用途就是查看其它命令的帮助手册,每个命令,其实都是可以支持很多的参数选项的,这些选项全部记住是不现实的,就可以通过man随时来查看帮助
man ls

按q退出
功能:读取文件内容
lss最主要的功能就是读取文件内容,用来看的
less最大的优势就是大文件可以秒开(懒加载),尤其是日志文件,以后开发过程中经常需要看服务器日志
选项:
j k / 方向键: 向上向下滚动屏幕.
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
q: 退出
功能:即能读取,也能编辑{文本编辑器}
编辑服务器上的一个重要操作!!!
vim这个软件的操作对新说不是很友好,vim为了可以高效实现文本编辑,引用了"模式"以及海量的快捷键 ,这个工具的使用方式,和日常使用的其他文本编辑器相比,差别比较大

文件存在就直接打开,文件不存在就创建一个文件
vim 打开文件后默认是普通模式. 普通模式下键盘的按键表示一些特殊功能的快捷键. (例如按下 j 并不是输入字母 “j”, 而是表示光标往下移动一行). 需要进入插入模式才能进行文本编辑.
使用 i 键可以进入到插入模式. (左下角提示 --INSERT-- ) 然后就可以像记事本一样正常编辑了.

此时的保存不再是ctrl+s,ctrl+s在vim中不是保存,而是Xshell的快捷键,功能是冻结屏幕
如果不小心按到了ctrl+s,可以按ctrl+q解除冻结
在插入模式下不能保存文件, 需要先回到 普通模式 . 按下 Esc 回到普通模式.
在普通模式下输入 :w , 再按下回车, 即可保存文件.
在插入模式下不能退出, 需要先回到 普通模式.
在普通模式下输入 :q , 再按下回车, 即可退出.
也可以直接使用 :wq 同时执行保存和退出.
如果想对vim有更多了解,可以使用vim自带的教程进行学习,输入vimtutor即可
**语法:**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 [参数]…
功能:查看系统上的网络状态.
选项:
-a 显示所有正在或不在侦听的套接字
-n 显示数字形式地址而不是去解析主机、端口或用户名
-p 显示套接字所属进程的PID和名称
举例:
netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"
权限是对操作的限制

文件拥有者:类似于房产证上写名的人
同组用户:虽然房产证没写名字,但是可以住的人
其他用户:和房主没任何关系的人
但是,在这些规则之上,有一种特殊情况 管理员用户不需要遵守上述规则(root)
最终目的就是能够在Linux系统搭建Java环境,并且能部署Java Web程序
最简答的方法就是通过yum进行下载安装
yum是"包管理器",相当于"应用商店"
首先,先搜索一下,看看yum关于jdk有没有,以及叫什么名字
通过yum list命令,可以列出应用商店服务器上所有的软件包的名字
而要找jdk的命令为 yum list | grep jdk 此处,grep命令的功能是进行字符串过滤,| 叫做管道,功能是把前一个命令的输出作为后一个命令的输入(像一根管,把两个命令连接起来) grep jdk就是依据yum list输出的结果,来匹配包含jdk三个子母的文本行


yum install java-1.8.0-openjdk-devel.x86_64 执行这个命名,就可以下载安装jdk 1.8
因为yum中的tomcat版本太低,可以在百度官网找到tomcat 8.5.x,下载zip文件,然后直接拖进Xshell即可

在LInux配置Tomcat稍微有点麻烦
- 在官网下载 .zip包
- 把 .zip传到Linux上,直接通过Xshell拖进去,可能需要安装lrzsz
- 使用unzip命令解压缩,可能需要安装unzip
- 切换到bin目录,给所哟.sh加上可执行权限
chmod+x*.sh- sh startup.sh启动tomcat
验证启动成功
# 方法1 查看 tomcat 进程是否存在
ps aux | grep tomcat
# 方法2 查看端口 8080 是否被绑定
netstat -anp | grep 8080
# 方法3 使用 curl 命令访问默认 demo
curl 127.0.0.1:8080
启动成功后就可以通过ip地址+端口号访问了,但是会出现无妨访问页面的问题
云服务器厂商,为了保护咱们的服务器不受黑客的攻击,对于哪些端口可以对外访问进行了严格的限制,绝大多数端口,默认情况下无法通过外网来访问,需要在云服务器的后台页面进行配置,允许那些端口可以对外访问
博主的是轻量级服务器,所以可以在防火墙进行配置



MySQL 同样也可以使用 yum 安装. 但是要修改一些配置, 稍微复杂一些.
可以参考一个知乎上的文章.
https://zhuanlan.zhihu.com/p/49046496
yum 上的是 MariaDB, 和纯正的 MySQL 还不太一样.
MariaDB 和 MySQL 的关系, 类似于 CentOS 和 RedHat 的关系. 从使用角度上, MariaDB 和
MySQL 之间都是兼容的
MySQL 中除了错误日志, 还有很多其他类型的日志. 详细可以参考
https://www.cnblogs.com/f-ck-need-u/p/9001061.html
工作中涉及到的 “环境”
切换到已经写好的代码中, 在pow.xml中加入
<!-- 打的包是一个war包,默认的是一个jar包 --> <packaging>war</packaging> <!--指定打出的war包的名称--> <build> <finalName>名称</finalName> </build>
- 1
- 2
- 3
- 4
- 5
- 6
然后在进行打包操作
生成的war包在target目录中
Linux 一直cd到tomcat的wabapp目录下,然后将war包拷贝,接着重启启动tomcat,至此就可以在浏览器中看到自己写好的Web项目