Linux系统基本使用 与 程序部署 - JavaEE初阶 - 细节狂魔

前言

我们Java这一块主要学习 Linux 的执行。
而隔壁 C++,还需要学习 系统编程 + 网络编程。

为什么我们Java的,只需要学习 Linux 指令呢?

这是因为 Java 对于 系统编程 和 网络编程,有着自己的一套 API。
而且,其实 系统编程 和 网络编程,在前面已经讲了。
网络编程:网络编程(TCP 和 UDP 协议)
系统编程:多线程基础篇

至于Java为什么这样的,这是因为 Java 是一个跨平台的编程语言。
意思就是像多线程编程,socket编程等等。。。Java标准库里原生就有。

而C++标准库相比于 Java 弱很多!!!
虽然 C++标准库里面已经有 多线程了,但是 网络编程至今仍然不支持。
因此他们想要进行相关的编程,就只能使用系统 API。
系统API:就是操作系统提供的API。
比如:
1、Windows 系统上面有一套
2、Linux 系统上有一套
3、mac 系统有一套
。。。
因此对于隔壁朋友压力是非常大的!

在 Java 这边,因为我们 Java 是一个跨平台的程序。
因此我们只要学习 Java 标准库这一套,不管是什么样的系统,什么样平台,我们都是一套代码解决问题。【一把嗦~】

因此我们Java这边学习 Linux 就简单很多,只需要学习 Linux 的基本操作就可以了。


Linux

首先,Linux 英文发音是什么样子的?

1、李纽克斯
2、李娜克死(正确发音:官方认准的标准发音)
3、李ne克死
4、里尼克斯

以后工作之后,你会听到很多中版本的发音。
注意!不要争!与其是和面试官!!!!
知道它说的是 Linux(李娜克死)就行了!

另外,Linux的作者,名字叫做 Linus(莱纳斯)
在这里插入图片描述
linus 发明 Linux 系统的时候,他还在读大学,具体好像是在一次假期中,在家闲聊无事,就写个操作系统玩玩。
然后 Linux 就问世了。
写出来之后,作者 linus 就把它发到论坛上面了。
再然后,Linux 就火了。
火到什么程度?
这么说吧:Linux 就是 世界上第一大操作系统,没有之一!!!!

然而,这个 linus 大佬,还不止创建一个 Linux。
本 Linux 已经够 作者 名垂青史了!
后面,大概到了 2000 年左右,linus 觉得已有的代码管理工具,不太方便用来管理 Linux 源码,就自己发明了一个,名字叫做 Git。。。
Git,也成为了当今最主流的 版本管理工具。
Git,就是GitHub
在这里插入图片描述
上面就是 GitHub 的logo,是一只章鱼猫。
据说:
linus 老哥,他在开发 Git 的过程中,有一天,他做了一个梦。
梦中,他梦见自己出海,遇见风暴,风暴中就隐约看到有一只 长着猫头的大章鱼,
因此,就有了这个logo、

我说 Linux 是世界第一大操作系统,有的朋友可能会表示 我 Windows 不服!

肯定有一部分朋友认为 巨硬老哥 表示不服!
难道我们Windows不能打嘛?

注意!Windows 确实很好用,也很难打。
但是,Windows 是属于世界上第一大 “桌面” 操作系统。
但是你觉得是桌面系统大,还是操作系统大?
那肯定是操作系统更大!

操作系统中,又可以分为这几个大类:
1、服务器用的操作系统
2、PC(个人电脑)用的操作系统
3、嵌入式设备用的操作系统
4、特殊的情况。。。。

在 PC 这个领域俩面,我们生活中常用的笔记本,台式机。。。这些里面我们的 Windows 确实是最强的!
但是!!!
剩下的几个领域里,Linux 一家独大,处于 Top One 地位。

而且,更准确的来说,Linux 不是一个完整的操作系统,而是一个“操作系统内核”。
然后,Linux 内核 + 各种配置的应用程序,才构成了一个完整的操作系统。
这种形式,我们将其称为 “发行版”。
其中有一个非常NB的发行版,叫做 Android(安卓)。
安卓系统,可以说是我们当今世界上 装机量 最高的系统!!!
完爆PC,想想一下:安卓系统的手机有多少?没有百亿,也有几十亿了吧?

虽然 在日常生活中,大家对于 Linux 感知的不高。
但是作为一个 程序员,在实际工作中,无论你是从事的哪方面的开发。
无论是你做 后端 / 前端 / 算法 / 运维 / 测试。。。
多多少少都是会接触到 Linux 的。


Unix & Linux 发展历程图

在这里插入图片描述

1、 1969-1970 年, 贝尔实验室的 Dennis Ritchie (上图) 和 Ken Tompson (下图) 开发了 Unix 操作系统
在这里插入图片描述
这俩大佬本来是想开发一个操作系统, 但是开发着开发着, 发现现有的编程语言不太好使, 于是俩人一合计, 先整个编程语言出来吧. 于是 C 语言 就诞生了.
Dennis Ritchie 大佬 2011 年就去天堂写代码了. Ken Tompson 大佬后来在 google, 又参与发明了 Go 语言

2、 Unix 火了之后, 衍生出很多的分支. 其中有一只为 “Minix”. 由荷兰的Andrew S. Tanenbaum 教授开发. MINIX 含义为 “小型的UNIX”, 源代码开放给大学教学和研究工作
在这里插入图片描述

3) 1991 年, 还在读大学的 芬兰人 Linus Benedict Torvalds (1969年12月28日出生, 当时 22 岁) 基于Minix 的启发, 开发出了 Linux 的第一个版本.
在这里插入图片描述
Linus 大佬现在 50 多岁了, 但是仍然在互联网上非常活跃. 经常会拍一些视频. 在 油管 或者 B站 上
就可以找到.
https://www.bilibili.com/video/BV1qv411b79d?from=search&seid=3828654573220073441

我们作为 Java 程序员,在实际开发中,一般不需要使用系统原生的 API,但是经常会涉及到一些 和 Linux 相关的部署 和 调试 的 工作。

比如:我们做了一个网站。
那它的后端就需要部署到服务器上之后,才能被各个用户拉访问。
正如我们前面所说:服务器主要使用的系统还是 Linux 。
那么,这个部署的过程,就需要涉及到一些基本 的 Linux 操作。
比如:
我们的服务器程序在机器上运行的时候,它出问题。
出问题之后,我们是不是得上去看看它是除了上面问题啊?
那么,我们就得能够 基于 Linux 操作 来针对 我们的一些日志,或者通过一些命令,查看系统参数,来去观察到 当前问题的一些线索。
这是我们定义问题的主要依据。
总之,像这样的一些基本操作,对于我们的实际开发,还是具有非常重要的意义!


Linux 环境搭建

要想学习 Linux , 需要先有一个 Linux 的环境.

环境搭建方式

主要有四种:
1、直接安装在物理机上. 但是由于 Linux 桌面使用起来非常不友好. [不推荐].

2.、使用虚拟机软件, 将 Linux 搭建在虚拟机上. 但是由于当前的虚拟机软件(如 VMWare 之类的)存在一些 bug , 会导致环境上出现各种莫名其妙的问题, 比较折腾. [非常不推荐]

3、 使用 WSL (Windows Subsystem for Linux). 这个是 Windows 近几年开发的新功能, 在 Windows 系统内集成了一个 Linux. 但是目前这个技术还不够成熟. [暂时不推荐].

4、 使用云服务器, 可以直接在 腾讯云, 阿里云或华为云 等服务器厂商处直接购买一个云服务器. [墙裂推荐]

国内有很多的云服务器厂商:阿里云,腾讯云,华为云 ,金山云。。。。。
云服务器,本质上还是 虚拟机。
不同的是,这个虚拟机不是自己的电脑上,而是装在人家机房里。
我们需用通过网络来去使用。
这个云服务器相比于自己使用虚拟机来说,最大的区别:
1、云服务器会同时给你一个外网 IP(这个外网IP最关键)
2、云服务器是非常稳定的,基本没有什么bug,就不太需要我们去折腾
毕竟是花钱买了,别人都会有售后服务。
真遇到什么问题,你给别人售后客服反馈问题,人家都会非常热情的帮你解决。
而且甚至你可以让别人给你内推都是可以的!

价格不是很贵!
https://cloud.tencent.com/act/pro/lighthouse2021
另外不要太着急下单,每个地区的价格都是不一样的。
你可以切换城市,价格最低好像是20多,还是30多来着。。。反正是一年的使用权。
总之,那个都行,挑最便宜的买就行。
包括配置第一点都没有关系!!! 足够学习使用!
在这里插入图片描述
像上面这种 2 核:2核心的CPU
2G:内存是 2G
4M:指的是网络带宽是 4Mbps/s
这个配置,完全能够胜任学习的需要。

具体购买哪一个,自己决定。这里就不再细讲了。

购买的时候,需要注意的是:
1、选择机房的位置(活动区域),北京/伤害/成都。。。都为所谓,随便选。只是价格上可能有所差异。
2、选择 系统镜像:简单来说,就是给你的服务器装那个系统。
注意!选择 Centos 7 系列!!!
除了Centos之外,像Ubuntu,Debian,Debian,SUSE。。。等等,也是Linux。
但是这些 LInux 会和我博客将的 Centos 有所差别。
因此,为了减去不必要的麻烦,建议选择 Centos 7。
当然选错了,也不要紧,可以改!!
还需要注意:不要选择带 docker 的版本!!!
就选择如下图所示的 版本 就可以了。
在这里插入图片描述
如果你是在不会买服务器,找客户。
她会非常地热情,毕竟你想要消费嘛。

另外拿到服务器之后,最好给它设置一个密码。
复杂点最好,前提是你自己能够记住,
因为 外网的环境是非常凶险的!!!
你的服务器随时肯能遭受到 黑客的攻击!
设置一个复杂的密码,更安全一点!

如果真的被黑客入侵了!重装系统即可!
千万别给钱!
要钱没有,要命也tm不给。

不过话说回来,我们的服务器存储的数据,压根就不值钱。
穷,即安全。


最后需要注意:不要轻易暴露自己的外网IP,很容易被 DDOS 攻击。
在这里插入图片描述

上述操作完毕之后,就可以使用 终端工具 来远程登录到服务器上了


使用终端软件连接到 Linux

什么是终端软件

终端软件是一类工具软件, 可以和远程的主机建立网络连接, 从而对主机进行一些操作.

常见的终端软件:
XShell
Putty
MobaXTerm
Iterm2
SecureCRT
。。。

本文主要使用的是 XShell。注意XShell 只支持 Windows系统。
如果你是其他系统,就徐亚使用其它的工具了。自己百度吧。

下载安装 XShell

下载地址: https://www.xshell.com/zh/xshell/
在这里插入图片描述


使用 XShell 登陆主机

我们买了服务器之后,它不是会给我们一个外网IP嘛。
在这里插入图片描述
这个外网 IP,就是我们使用 XShell 登录 服务器主机 的关键。

先打开XShell
在这里插入图片描述
第一次打开的,会有一个注册流程,自行搞定。

下面,我们就可以与服务器建立连接了。
[PS: 云服务器要处于运行状态可以连接成功]
在这里插入图片描述
在这里插入图片描述
另外,经过这一次操作,下次,再访问就不需要再进行这一套操作了。
直接双击会话,它就会自动进行链接登录了。

而且,针对同一个服务器,创建多个会话来访问都是可以的!
因此,一个人有服务器,整个寝室的人都可以用的!


下面我们来解析一下 我们登录成功后,看到第一条指令。
【PS:看到这条指令就说明:我们就登陆成功了。】
在这里插入图片描述
后续和Linux 服务器之间的交互,都是基于命令来完成的!
和 Windows 上这种基于图形化界面的交互方式是截然不同的。

有的可能会有疑问:图形化操作 不比 命令行操作,来的更加直观!?

这是因为使用命令行来操作,由它的好处!
命令操作其实在大部分工作场景中,是比图形化操作更好的!!!

1、命令节省资源(网络带宽),运行更流畅!
别忘了我们是操作服务器啊!
你如果是 图形化操作服务器,服务器就需要通过网络把图形界面给你传过来。
那你想想传图片需要多少带宽,一个普通图片少说也有 一两M 吧?高清直接十几M!
网络带宽直接拉满!
如果是命令行操作,就只需要传输一些简单的字符串即可。
一个字符串才几byte,1 MB == 1024 kb == 1024 * 1024 byte。
可想而知,一张图片不知道顶我们多少句命令!!!
于此,我们不难思考出 用命令行 操作系统,执行起来会更加流畅。

2、命令更有助于 基于脚本来完成重复性工作。
我们在未来工作中会经常接触到 shell 脚本。
shell 脚本:就是通过一个文件,把你要执行的命令写进去,然后批量执行。以此来完成重复性工作。
这一点是图形化操作很难做到的,

因此,整体来说:我们在工作中,在这些生产力的环境下,那肯定还是命令要更香。
可能大家刚开始的时候,体会不到。但是在工作久了之后,就觉得 命令行操作 还是 更香一些。


Linux 常用命令

Linux 的指令有很多,本文只介绍 最最常见的操作命令。
大概十几个,不过就这十几个命令就已经覆盖到了工作中大部分内容。

1、ls

ls:列出当前目录中包含的文件 和 目录
ls的功能,就类似于在 Windows 上 双击某个目录,把它打开,看看目录里面都有些什么。
ls:本身的含义就是 list(列表)
下面我们来输入这个指令来看一下效果。
在这里插入图片描述
另外,ls 指令的后面,还可以跟上一个具体的路径。
这个路径可以是 相对路径,也可以是绝对路径。
在这里插入图片描述
这里的点 是相对路径,表示显示当前目录底下的文件。
这里没有显示的原因,前面已经说了,我就不再讲了

拓展:
Linux 的命令很多都支持 “选项”,在命令后面跟上 - ,以及一些特殊的 字母 / 单词,来开启不同的功能。
比如:输入 ls - l
其作用就是:以列表的方式,来显示当前目录下的 文件和目录。
在这里插入图片描述
ls -l ,这个命令是我们最常使用的命令。
因为它敲起来有点复杂。。。
因此,我们一般直接写作 ll 来替代。【真香。】
ll 是 ls -l 的 缩写形式。相关是一样的。

小结&拓展

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

这些命令的选项,是非常多,非常丰富的。
全部记住是不现实的,只需要了解一些最长使用的就行了。
其他的用到的时候,再查即可。
Linux 命令的学习,没有任何难点!
就是比较繁琐,命令比较多。


2、pwd

pwd: 能够告诉我们当前所处的位置是哪个目录下面

在使用 命令行的时候,有的时候,目录结构比较复杂,容易不记得自己在那。【迷路了。】
这个时候,就可以使用 pwd 来查看自己所处的位置。
在这里插入图片描述
显示出了当前目录所对应的绝对路径。
/root 对应的就是 根目录。
另外,在Linux上,是以 / 开头(根目录) 就是绝对路径。
没有 Windows 中 盘符的概念:
在这里插入图片描述
这里我们在小拓展一下:
为什么 Windows 的盘符是 C D E F G?有没有 A 盘?有没有 B 盘?
答案:有的!
历史上存在过,只是现在没有了。
在那个时候 A盘是 软盘,B盘是 磁盘。
而现在用的都是 硬盘,硬盘 和 前面两个 完全不是同一个设备。


cd

cd:change directory - 切换目录

此处的 cd 和 ls 是 工作中最高频率使用的命令
ls 用来显示目录底下的文件。
看到自己想要进入的文件之后
再来使用 cd + 文件路径,进入该文件。
这个路径可以是相对路径,也可以是绝对路径。
在这里插入图片描述
cd [路径] 操作就类似于 Windows系统中 的鼠标双击操作:双击一个文件/目录,进入其内部。

前面 绝对路径的例子,下面我们来看看 相对路径 的 切换。
… 表示当前路径的上级路径
在这里插入图片描述

小结

cd … : 返回上级目录
cd ~:进入用户家目
cd -:返回最近访问目录

拓展:认识 Linux 目录结构

Linux 是一个树形目录结构.
在这里插入图片描述
几个特殊的目录:
/ 称为根目录
. 称为当前目录
… 称为当前目录的上级目录

使用 ctrl + c 重新输入 && 复制:Ctrl + insert && 粘贴:shift + insert 键

如果命令或者目录敲错了, 可以 ctrl + c 取消当前的命令.
在这里插入图片描述

复制:Ctrl + insert && 粘贴:shift + insert 键
在这里插入图片描述
另外,这种复制粘贴的方式,Windows 也是同样支持的!

如果是笔记本的朋友肯定会觉的这种方式比较难受。
实际上是可以修改的。
但是尽量不要使用 Ctrl + C,因为它已经有了自己的用法
在这里插入图片描述


小结

ls,cd,pwd 都是属于操作目录的一些常见命令。
起到了 类似于 Windows中的“文件管理器” 这样的功能。


下一组命令

1、touch:创建一个文件
2、cat:显示文件内容
3、echo:打印内容到控制台,也可以用于写文件。

touch:创建一个文件

如果文件不存在,直接创建。
反之,如果文件存在,它只是会更新文件被访问的时间,就不会去创建一个新的文件了。
在这里插入图片描述
另外,随着我们敲得指令逐渐增加。
在这里插入图片描述
看起来,就很难受!
这里,我们就可以使用 Ctrl + L 清空目前的指令记录在这里插入图片描述

cat: 显示文件内容

在这里插入图片描述

echo:打印内容到控制台,也可以用于写文件

在这里插入图片描述

此处的 > 操作称为“重定向”。
整体来说:echo ‘hello’ > java.txt 这条指令意思就是; 把本来要显示在控制台的内容给重定向到指定的文件中


小结

此处的读写文件操作,只是能进行简单的读写,不能进行复杂的编辑。
如果是搞一个简单的小文件,上面这三个操作,够用。
如果是一个比较大的文件,读也好,写也好,使用上面的操作,就比较麻烦了。

在后面,我会给大家介绍一组 读写 指令。
使用 less指令 来进行读文件,使用 vim 来 编辑文件(后面再说)


mkdir && rm

mkdir: make directory - 创建目录

在这里插入图片描述


rm:remove - 删除

rm 既可以用于 删除文件,也可以用于删除目录。
在这里插入图片描述
rm -rf/ :但凡是学过一点点 Linux 命令的人都知道这个是危险操作。
但是仍然还是经常有人真的会敲这个命令(不是故意的,而是不小心的)

有的人可能就会说:不是吧,这还能不小心?
是的,这是真的!!
在这里插入图片描述

总之,就一点:没事不要使用 rm 操作。

但是话说回来。
其实 通过 rm -rf/ 和 rm -rf/* 删除的数据,其实是可以被找回的。

这么说吧:
虽说 rm 删除之后,可能就恢复不了。但是,也不是完全恢复不了!
操作系统删除文件,其实进行的是 “逻辑删除”。
逻辑删除:并不是真把磁盘的数据给删除了!!!而是 打上了一个 “无效” 的标记。
一旦有这个标记,系统就知道 这一块空间(盘块) 在后续操作中,就可以重复利用。
怎么利用?
将新的数据进行覆盖即可。

在这块空间真正被利用之前,其实这个数据还是存在的!
只不过是被标记位无效数据。
因此如果你真的不小心不想删了,还可以通过一些特殊的工具来把 盘块 上 还没有真正被“删除”的数据,给恢复一部分。
具体能回复多少?看脸。
而且这种补救措施,我们自己一般搞不定。
这个可以找对应的硬盘厂商来帮忙。【直接联系生产你硬盘的厂家进行解决】

但是!这个 rm 操作,还是能不用就不用。

小拓展:既然删除系统数据,并不是真正意义上的删除。那么,如果我们有一些重要的数据,我们想要删除掉,怎么办?

因为 rm 删除操作,删除的数据可能还在。
如果被有心人拿到,就有可能把你磁盘里面的内容给恢复了。
从而谋取利益。
有的朋友可能会说:你觉得我们像是有值钱数据的人吗?
注意!我们虽然现在没有,但是不代表未来没有!!
在我们工作之后,处理公司事务的时候,我们的电脑上多多少少都会有一些重要的数据在上面。这些都是属于商业机密。
因此,在我们工作之后,更换电脑设备的时候,最好把之前旧设备上的数据都给彻底销毁咯。

回到我们最初的问题:如何把数据彻底删除呢?
方法很直接暴力:“物理删除”
所谓的“物理删除”就是把硬盘给锤烂咯。。。。
以致于说:世面上还有 “硬盘粉碎机”。
这个就跟 碎纸机是一样,都是将一些重要的旧数据进行粉碎。
不同的是:一个碎纸,一个碎硬盘。


继续下一组命令:cp && mv

cp - copy:复制
mv - move:移动
在这里插入图片描述
文件的移动 和 文件的复制,是我们 操作文件中的常见操作。
因此,在我们的 linux 里面,就可以使用 cp(复制) 和 mv(移动)指令 来进行实现。

下面来看一下实战效果。
在这里插入图片描述

小拓展: mv 指令的其它作用 >> 给文件名重命名

注意:重命名的名字,不能是该目录下已经存在了的。
在这里插入图片描述
另外,我们再拓展一下:
mv 的常用选项【文件覆盖】
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!


小结:

其实 mv 操作,本质上就是在修改文件的 名字 / 路径。
这个改动是非常轻量快速的,因此执行速度是非常快的。

cp 操作,本质上需要拷贝大量的数据,这个拷贝的过程其实是非常消耗时间的。
尤其是文件很大的情况下!!
比如:文件是10G内存
如果你只是进行 mv的操作,来修改名字。或者移动位置,都是非常迅速的。
但如果你是 使用 cp 操作 来拷贝 文件,那就会非常的耗时。
毕竟你10个G的数据,写入硬盘里面,还是要点时间的。
一个机械硬盘的读写速度,大约 200M/s 左右。
那么写一个 10 G 数据,将近要一分钟【1G == 1000M】。


man命令

man 命令,这是 Linux 上一个非常有用的命令。

注意! 这里的 man 不是 男人的意思。
而是 manual page(手册)的缩写。
顾名思义:
man 指令 的用途是:查看其他命令的帮助手册。
每个命令,其实都可以支持很多的参数选项!
这些选项,你想全都记住是不可能的,不现实的!!!
如果对于某个指令的选项不清楚,一般我们都是通过 man 指令 来随时查看帮助。
在这里插入图片描述
因此,这么指令选项,你想考脑瓜子记住是不现实的,

当然如果你不想使用 man 来查看帮助,也可以直接百度搜索命令的用法。
【在上古时代,百度等搜索引擎还没怎么方便的时候,你就得依赖 man 命令 来查看 帮助手册。】

哦,对了。可能有些朋友看得快,遗漏到了其中的一个操作。
如何退出帮助手册?
在这里插入图片描述


less && vim

less: 读取文件内容
vim:既能读取文件内容,也能编辑文件。
其实 vim 就是一个文本编辑器

前面还和大家讲了 cat(读) 和 echo(写)能够读写文件,但只能支持 简单的读写。
cat 进行 读取文件的时候,是一股脑的全部给你展示出来。
这就很容易卡死。
而 less 内置了 翻页的功能,一次性只加载一页的内容。
翻页的时候,在加载一页。
也就是所谓的 “懒加载”,或者说成 “懒汉模式”,你们更容易理解一下。
简单来说:
就是用到的时候再加载,不用的时候就不加载。

less 演示

在这里插入图片描述
注意! less 是无法对文件进行编辑的。
less 最主要的功能就是 读文件内容,用来看的。

前面也讲了:less 是属于 “懒加载”。
用到什么,加载什么。
因此,less 最大的优势就是:大文件能够秒开!!!

vim 演示

编辑服务器上的文件 的 一个重要操作!!!
但是,有一个悲伤的故事就是: vim 这个软件的使用 对 新手 非常不友好!
vim,这个软件,为了能够高效的实现文本编辑,引入了 “模式” ,以及海量的快捷键。
这个工具的使用方式,和日常用的其它文本编辑器 相比(notepad,subline。。。),差异非常大!!!
但是我们 又不得不学习这个。
虽然 Linux 上支持 很多很多种编辑器,其中不乏有一些 使用方法简单的工具。
但是 vim 是 Linux 的默认编辑器。

这么说吧:编译器种类是很多,但是在公司的电脑上,Linux 可能没有。
但是 vim 编辑器 肯定是有的!
有的人可能会说:没有,我可以自己装啊!
注意!公司里的电脑,不是你想装什么就装什么的!都是统一规定好了的!!!
因此,vim的基础操作,还是要学习的!

但是我们不会去深入学习 vim,我们只学习 vim 最基础的使用,而不做过多讨论。

如果你想深入学习 vim,像 市面上 讲 vim 用法的数,大概是 1000 页左右。
因此,我是不建议你们话太多的时间在 vim 身上的。
因此,我们的目标,就是能够使用 vim 对 文本 进行 最基础最简单的编辑即可!!!
当然,如果你对 vim 的 使用很熟练,对于敲代码来说:确实会“行云流水”(提示敲代码的速度)。
总之,要深入,自行了解。【这个没有什么实质性的帮助,只是提升编码的速度】

下面我们就来看一下,对于 vim,我们需要掌握哪些基础编辑方式

1、使用 vim 创建 / 打开 文件
2、使用 vim 编辑文件内容
3、使用 vim 进行保存退出
在这里插入图片描述
需要注意的是:
有人可能举一反三:那我 冒号 加 q,不给 w,不就是 退出 b保存了 !?
注意! 这是要分情况的!
如果 文件的内容没有改变,确实 冒号 加 q,能够直接退出。
但是,如果文件内容改变了,这时候,就不行了。
它会报错
在这里插入图片描述
如果你非要 不保存,强制退出,需要输入指令:冒号 + q + 感叹号,然后回车。
才是 强制退出(不保存)。
在这里插入图片描述

拓展:

冒号 + x 和 冒号 + wq 的效果是一样的!都是保存并退出、


小结

less 指令只能查看文件内容,不能编辑。
而 vim 可以查看文件内容【如果文件不存在,则创建】,并且可以对其进行编辑。
但是 vim 有一个 问题,如果使用 vim 打开一个大文件会非常卡。

在使用 vim 的时候,需要注意!
vim 里面 有非常多的快捷键,目的是为了 让编辑更加高效。
这就像魔兽争霸和星际争霸,这种 RTS(战略) 类游戏 一样。
通过 大量的快捷键 进行 微操,通过 这个微操方法,就可以操作很多的单位。
以此来进行更加高效的操作。

还有因为 vim 有很多的快捷键,因此学习起来,不容易。
所以呢,我们这里是介绍了一些 最基本的操作。
1、打开 / 创建 文件【vim + 文件名】
2、编辑文件 【按下快捷键 i,普通模式进入insert模式,才能进行编辑】
3、退出并保存 编辑文件的内容。
 3.1、按下 ESC键,退出 insert 模式,回到普通模式
 3.2、 输入 冒号 + wq,或者 冒号 + x,进行保存和退出

如果你们相对 vim 有更多的了解

1、可在网售购买先关书籍

2、可以使用 vim 自带的教程 来 进行学习。
在这里插入图片描述
大家一定要明确:写代码主要瓶酒在脑子,不是手。
敲字的速度快,不见得代码敲的快,更不见得代码质量就过关。
而且学习 vim 编辑器,想要达到熟悉的程度,估计最少也得要几个月,甚至一年的时间。
vim 的学习 主要靠练习来形成肌肉记忆。
另外,像 idea / VSCode 等主流的编译器,都自带了 vim 插件。
等你熟悉了 vim 的 操作,就可以着手 在 编译器 使用 vim了。

哦,对了!
vimtutor的退出方式,还是和前面一样。
冒号 + q【因为我们没有修改内容,因此直接退出即可】


head

语法:head [参数]… [文件]…

功能:head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。

选项:

-n<行数> 显示的行数


tail

语法: tail [必要参数] [选择参数] [文件]

功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

选项:

-f 循环读取
-n<行数> 显示行数


date

date 指定格式显示时间: date +“%Y-%m-%d %H:%M:%S”

date 用法:date [OPTION]… [+FORMAT]

1. 在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记

%H : 小时(00…23)
%M : 分钟(00…59)
%S : 秒(00…61)
%X : 相当于 %H:%M:%S
%d : 日 (01…31)
%m : 月份 (01…12)
%Y : 完整年份 (0000…9999)
%F : 相当于 %Y-%m-%d


时间戳

时间->时间戳:date +%s
时间戳->时间:date -d@1508749502

Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒


grep

语法:grep [参数]… [文件]…
功能:用于查找文件中是否包含指定字符串, 并显示对应的行.
选项:

-n<行数> 显示的行数
-w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, 而不仅仅是一个单词的一部分.
-r 递归查找. 可以搜索多级目录下的所有文件.
–color 高亮查找到的结果
–include 指定查找某些文件
–exclude 指定排除某些文件


ps

语法:ps [参数]…
功能:用于查看当前系统上运行的进程
选项:

a 显示一个终端的所有进程
u 以用户为主的格式来显示程序状况
x 显示所有程序,不以终端机来区分


netstat

语法:netstat [参数]…
功能:查看系统上的网络状态.
选项:

-a 显示所有正在或不在侦听的套接字
-n 显示数字形式地址而不是去解析主机、端口或用户名
-p 显示套接字所属进程的PID和名称


总结

上述的这些命令都是最高频使用的命令。
这些命令,至少可以覆盖到 日常工作的 80%。

虽然 Linux 中的命令有很多:成百上千个
但是不必全部记住!
只要我们帮最常用使用的指令掌握,也就差不多了。


Linux权限

其实权限这个东西吧,离我们程序员的“距离”有点远。

因此,Linux 权限,作为程序员,一般只需要简单了解一下,就行了。
这个权限,一般是“运维”来关注权限的。

大家一定要明确:
权限,就是在限制你机器上面的一些 文件/目录 能进行哪些操作。
简单来说:权限就是对操作的限制。
不是说主机里面的东西,谁来都能 查看/删除/修改。
这就是权限的作用。
在这里插入图片描述

很显然,权限的概念是非常必要的。

想我们前面的有些操作,像 rm 这种操作是非常危险的!
你要是说,不小心敲了一个 这样的指令,后果是非常可怕的。
我们看了这篇文章知道了这个点,因此我们在日后工作的时候,都很注意这方面的问题。
但是,万一公司里来一个啥也不懂的实习生,也不知道他是怎么进来的。
直接给你秀了一波,这个操作。【公司表示很害怕。。。】
为了防止这种情况的发生,公司一般都会限制新人的权限。
让其在进行危险操作的时候,操作无法生效。

其实大部分程序员,都是肉体凡胎。
总会有出错的时候,因此像一些不必要的情况,都不会轻易的赋予权限。
因为 权限 越大,责任越大。
一旦出错,影响是非常大的。
作者表示:我只是想当一个安分守己,月入过万的小程序员。

另外,公司一般都是有专门的管理员来进行权限的划分的(管理员)。
这个管理员就是 运维工程师。
因此,我们作为一个普通的软件开发,或者测试人员,是不必关注这个权限的。
但是还是需要简单了解一下的。

Linux 的权限,主要还是围绕着 文件和目录 来展开的。

在这里插入图片描述
但是!请注意!
在上述的规则之上,还有一个特殊情况!!!
那就是管理员,管理员是可以不遵守上述规则的!!!!
这个管理员用户,就是我们在使用 Xshell 与 云服务器建立连接时,所设置的用户名 root。
这个root就代表的是 管理员用户!
在这里插入图片描述

另外,对于 三个角色的权限,是可以进行单独设置的

换个说法:根据这三个角色,就可以分别设置不同的权限。
至于你怎么去设置,每组设置成什么样子的权限,都可以。
每组的权限具体应该怎么去设置,还是要根据你的实际情况来决定。

具体怎么去设置每个角色的权限,我们可以通过 chmod 命令来实现。

chmod命令,可以针对上述权限就那些灵活的设置。暂不介绍。
自行百度了解。


搭建 java 部署环境

核心部分
1、需要能够在 Linux 系统上 搭建 java 的运行环境,并且能部署 Java Web 程序。

PS: 这也正是我们学习 Linux 的目的所在。
我们学习这些指令就是为了部署,而且在以后的工作中,Linux 也是用来部署。
只有当我们将程序部署了,这个软件才算是开发完成了。
毕竟 开发一款 软件(网站),不就是为了让大家都能访问到嘛!
如果你的程序,只是在本地跑跑,没有意义!
只有程序真正部署到生产环境上(类似于云服务器),真正上线了之后。
这才是齐活了,大家就可以通过网络去访问。
而且我们购买云服务器,也就是为了公网IP,有了公网IP,别人就能访问到我们部署在服务器上的程序了。

关于环境的搭建,就需要在 Linux 上安装一些必要的程序。
1、jdk:没有jdk,Java程序是运行不了的。
2、Tomcat:毕竟我们要部署一个 Java Web 程序,HTTP服务器是必要的。
3、MySQL:存储相关数据
其它更复杂的东西,可能需要引入依赖更多!
但此时我们先引入这三个最基本的依赖

1、jdk
PS:要想使用 yum install 指令,必须要有管理员的权限。
这也是为什么我一开始要求你们 将用户名设置为 root 的原因。
想要切换到 root用户也很简单!
使用 su 命令 既可以切换到 root 用户。
此时它会要求你输入 云服务器的登录密码。
在这里插入图片描述

2、Tomcat

在这里插入图片描述

小结:
在 Linux 上 配置 Tomcat 稍微有点麻烦,其实也还好。

1、现在官网上下载 zip 包【8版本】
2、把 zip 上传到 Linux,直接通过 Xshell 拖过去。【可能需要安装 lrzsz】
3、使用 unzip 命令 来解压缩【可能需要 安装 unzip】
4、切换到 bin 目录中,给所有的 ,sh后缀的文件 添加 可执行权限。【chmod +x *.sh】
5、使用命令 sh startup.sh 来启动 Tomcat

前 4 个步骤,只在首次使用 Tomcat 的时候 使用。
后续使用 Tomcat的时候,不需要进行重新部署。

另外,不管你使用那条指令,必须要进入 bin 目录中,才能执行。
Linux中的指令和目录是关联很大的。
如果你不是 cd 到 bin 目录中
sh startup,sh 是找不到对应的文件的。

有人朋友可能很细心,就会问到:如何判断 Tomcat 是启动成功了,还是失败了?

在这里插入图片描述

另外,我们还能通过访问 Tomcat 的欢迎页面,来判断Tomcat是否在运行。
如果能够正确访问到 欢迎页面,说明Tomcat一定是安装启动成功了!!!
反之,Tomcat 启动不成功,甚至可能都没有安装好。

方法:
打开浏览器,
在地址栏中输入 :我们云服务器提供的公网IP(外网IP) + 冒号 + 端口号 8080
如果你修改了 8080的端口号,你就填入修改之后的端口号。
在这里插入图片描述

好了,关于Tomcat的安装就到此为止了。

记得关闭Tomcat
在这里插入图片描述

3、MySQL
大家需要明确:我们自己用的电脑 和 Linux服务器 是两台机器!!!

因此我们自己电脑上安装的软件 与 Linux服务器 是没有关系的!
要想让程序在 服务器上运行,就需要给服务器装好依赖的软件(包括MySQL)。

有的朋友可能突发奇想:
我们能不能让 服务器上的程序来访问本地的MySQL?
想得美。。
同样也不能让服务器上的程序来访问本地的MySQL。
原因如下:
其实我在前面也是讲过的,
你本地的MySQL,虽然有个3306端口,但是它没有外网IP。
因为我们的电脑没有外网 IP,服务器是无法访问到你主机的。
除非,你购买了2个云服务器,一个服务器A部署程序(博客系统),另加一个服务器B安装了MySQL。
此时,服务器A是可以访问到 服务器B中的MySQL。
因为 云服务器是有一个外网IP,因此两个服务器之间是可以进行这样的操作的。
而我们的电脑使用的 内网 IP,因此是无法做到这样的操作。

废话不多说,下面我们开始安装 MySQL。

注意:MySQL的安装 比 Tomcat 的安装过程更加复杂!!
可以参考这篇文章的安装过程https://zhuanlan.zhihu.com/p/49046496
我们接下来的安装步骤就是这篇文章的内容。
网上不是有很多的方法吗?为什么是这篇文章的安装步骤?
因为这个是最简单的!!!
就是基于 yum 来安装MySQL。
但是 MySQL 比较复杂,光下载还不行。
我们还需要 简单的配置一下

在这里插入图片描述
补充一条指令,数据库的退出指令:Ctrl + d


环境配置好了之后,我们就要开始讲 博客系统的程序部署到 云服务器上了。

没有做博客系统的朋友,可以参考这两篇文章。
博客系统(页面设计) 小小项目-博客系统 - 服务器版本,这两篇博客是互通的。

先看 页面设计,把页面设计出来,再去看服务器版本的。
因为 服务器版本的,里面开始设计实现 前后端的交互逻辑了。
没有前面页面的支持,你是看不懂的。

前面的这些环境搭建,都是为了将我们的博客系统部署到 服务器上。

在部署之前,我们还需要做一些准备工作
1、要给服务器上准备依赖的数据
在这里插入图片描述

2、微调我们的Java代码
在这里插入图片描述

3、将 项目部署到 服务器上
在这里插入图片描述

4、验证程序:通过浏览器来访问我们网页
在这里插入图片描述


总结

其实在我们的部署 博客系统 的过程中,并没有涉及到太多的知识点。
只不过是回归了 最原始的 项目部署过程。

另外,做一个重要的补充!!!
在部署的时候,很多朋友不会像我这样这么顺利。
出现问题怎么办?
例如:有的朋友登录失败,状态码500,或者其他的错误。

两个重要的 定位问题 的手段。
1、抓包:熟练使用 fiddler,看清楚 请求 和 响应,是什么样子的。
尤其响应中的状态码是 500 的,响应中会带有发生异常代码的具体位置(异常调用栈)。
非常容易锁定问题具体的位置

2、查看 Tomcat 的日志
在这里插入图片描述

  • 59
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 45
    评论
开课吧-javaEE企业级分布式高级架构师是一门专注于培养企业级应用开发的高级技术课程。该课程旨在帮助学员全面掌握Java EE企业级开发的技能和知识,培养他们成为具备分布式应用系统设计和架构能力的高级架构师。 在这门课程中,学员将学习Java EE的核心概念和技术,包括Servlet、JSP、JDBC、EJB、JNDI等。同时,学员还将深入学习分布式应用开发的相关技术,如Web服务、消息队列、分布式缓存、负载均衡等。除此之外,课程还将涉及如何使用流行的Java EE开发框架(如Spring、Hibernate等)进行企业应用开发,并介绍分布式系统的设计原则和最佳实践。 通过学习这门课程,学员将能够了解分布式应用架构的基本原理,并具备设计和构建分布式应用系统的能力。他们将熟练掌握Java EE平台的各种技术和工具,能够灵活运用它们开发高性能、可扩展性强的企业级应用系统。此外,通过课程中的实战项目,学员还将锻炼解决实际问题和项目管理的能力。 作为一门高级架构师的课程,它将帮助学员进一步提升自己的职业发展。毕业后,学员可以在企业中担任分布式应用的架构师、系统设计师、技术经理等角色,负责企业级应用系统的设计和开发。此外,他们还可以选择独立开发,提供技术咨询和解决方案。 总之,开课吧-javaEE企业级分布式高级架构师是一门非常有价值的课程,它将帮助学员掌握Java EE企业级开发的核心技术和分布式应用架构的设计原理,培养他们成为具备高级架构师能力的软件开发专业人士。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dark And Grey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值