博客主页:敲代码的布莱恩特
欢迎点赞 收藏 ⭐留言 欢迎讨论!
本文由 【敲代码的布莱恩特】 原创,首发于 CSDN
由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!✨
精品专栏(不定时更新)【JavaSE】 【Java数据结构】【LeetCode】
Linux 是一个操作系统. 和 Windows 是 “并列” 的关系.
Unix
操作系统.Minix
”. 由荷兰的Andrew S. Tanenbaum 教授开发. MINIX 含义为 “小型的UNIX”, 源代码开放给大学教学和研究工作.Linux
的第一个版本.
值的一提的是, Linus 在开发 Linux 的时候, 觉得现有的 版本管理工具 并不太方便. 于是开发了一个新的版本管理工具,也就是现在最广泛使用的 git
Linus 大佬现在 50 多岁了, 但是仍然在互联网上非常活跃. 经常会拍一些视频. 在 油管 或者 B站 上就可以找到.
Linux 严格意义来说只是一个 “操作系统内核”.
一个完整的操作系统 = 操作系统内核 + 配套的应用程序.
由于 Linux 是一个完全开源免费的内核, 因此有些公司/开源组织又基于 Linux 内核, 提供了不同的配套程序. 这就构成了不同的 “发行版”.
企业中最主要使用的发行版是 RedHat (红帽). 但是 RedHat 是一个收费的系统
因此我们学习使用的是基于红帽系统的的社区免费版本 CentOS
CentOS 和 RedHat 的关系 RedHat一直都提供源代码的发行方式,CentOS就是将RedHat发行的源代码去掉RedHat 的 logo 商标, 重新编译一次.
RedHat对这种发行版的态度是:“我们其实并不反对这种发行版,真正向我们付费的用户,他们
重视的并不是系统本身,而是我们所提供的商业服务。”
所以,CentOS可以得到RedHat的所有功能,甚至是更好的软件。但CentOS并不向用户提供商业 支持,当然也不负上任何商业责任。
Linux 虽然也有图形化界面, 但是在 服务器 / 嵌入式设备上往往都是通过命令行的方式操作的.
因此学习Linux 命令就是使用 Linux 的重要基础.
Linux 自身提供了一些 API, 供程序猿调用来完成一些更复杂的编程任务(比如文件操作, 多线程编程, socket 编程等). 但是由于 Java 跨平台的特性, 这部分功能已经被 Java 自身封装好了 (流对象, Thread 对象, Socket 对象等). 所以这部分内容我们不必再学习了.
我们自己写的 web 程序, 要想让其他的用户能够访问, 就需要发布到服务器上. 这是我们接下里重点学习的内容.
一句话:对于 Java 程序猿, 关于 Linux 重点学习 基础命令 和 项目部署 即可.
主要四种方式:
使用云服务器, 可以直接在 腾讯云, 阿里云或华为云 等服务器厂商处直接购买一个云服务器. [墙裂推荐]
使用云服务器不仅环境搭建简单, 避免折腾, 同时还有一个最大的好处, 部署在云服务器上的项目可以直接被外网访问到,
这个时候就和一个公司发布一个正式的网站没有任何区别. 也就能让我们自己写的程序真的去给别人去使用.
https://cloud.tencent.com/act/campus
3. 右侧的操作系统选择 CentOS 7.6 64位
. 购买时长根据需要选择(建议1年), 点击立即购买即可. 这个步骤需要实名认证
购买完成后, 可以在控制台中找到自己买的服务器. 点进去能够看到服务器的 IP 地址
.
设置 root 密码
: 勾选服务器, 点击重置密码
(这个环节可能需要手机短信验证). root 密码建议设置的稍微复杂一些, 否则容易被黑客入侵.
小结:
在这个环节我们最重要的是得到三个信息:
这三个信息是我们登陆到 Linux 上的必要条件
.
终端软件是一类工具软件, 可以和远程的主机建立网络连接, 从而对主机进行一些操作.
常见的终端软件:
我使用的是 XShell.
下载地址: https://www.netsarang.com/en/free-for-home-school/
在 XShell 终端下输入
ssh 服务器外网ip地址
如果网络畅通, 将会提示输入用户名密码. 输入即可正确登陆.
备注:
- 这里的用户名为 root, 密码是在最初购买服务器的时候设置的密码.
- 关于XShell 下的复制粘贴
复制: ctrl + insert (有些同学的 insert 需要配合 fn 来按)
粘贴: shift+ insert- ctrl + c / ctrl + v 是不行的.
语法: ls [选项] [目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
常用选项:
举例:
ls -l 也可简写成 ll
ls -l
语法: pwd
功能:显示用户当前所在的目录
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。
语法: cd 目录名
功能: 改变工作目录。将当前工作目录改变到指定的目录下.
举例:
认识 Linux 目录结构
Linux 是一个树形目录结构.
几个特殊的目录:
绝对路径 vs 相对路径
形如: /usr/share/tomcat/logs/ 以根目录开头的, 称为绝对路径.
形如: ./logs 以 . 或者 … 开头的, 称为相对路径.
使用 tab 键补全 我们敲的所有的 Linux 命令, 都可以
使用 tab 键来尝试补全
, 加快效率.
使用 ctrl + c 重新输入
如果命令或者目录敲错了, 可以 ctrl + c 取消当前的命令
语法: touch [选项]… 文件…
功能: touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新
建一个不存在的文件。
语法:cat [选项] [文件]
功能: 查看目标文件的内容
常用选项:
语法:mkdir [选项] dirname…
功能:在当前目录下创建一个名为 “dirname”的目录
常用选项:
mkdir –p test/test1 : 递归建立多个目录
语法:rm [-f-i-r-v] [dirName/dir]
功能:删除文件或目录
常用选项:
注意事项:
千万不要运行 rm -rf / , 尤其是在公司的生产服务器上.
理解递归删除的过程:先手动创建如下目录结构:
test
├── a
│ ├── a1
│ │ ├── 1.txt
│ │ └── 2.txt
│ └── a2
├── b
│ ├── b1`
│ │ ├── 1.txt
│ │ └── 2.txt
│ └── b2
└── c
使用 rm -ri 命令删除 test, 观察删除的顺序.
语法:cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
常用选项:
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
常用选项:
举例:
mv wjq.txt zyq.txt
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。
语法: man [选项] 命令
常用选项
举例
man -ls
语法: less [参数] 文件
功能:查看文件内容. 不会立刻把所有文件内容加载到内存中
. 也能进行查找.
选项:
语法:head [参数]… [文件]…
功能:head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行
。
选项:
语法: tail [必要参数] [选择参数] [文件]
功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
可以用于实时查看日志,默认最后10行
)举例:有一个文件共有100行内容,请取出第50行内容
# 方法1
head -n50 test > tmp # 将前50行装入临时文件 tmp
tail -n1 tmp # 得到中间行
# 方法2
head -n50 test | tail -n1
关于重定向
Linux 的很多指令, 如 cat head tail 等都是默认输出到 “标准输出” 中, 也就是显示器上的. 可以通 过 > 这样的符号把本来要输出到标准输出上的内容写到特定文件中. 这样的操作称为 “重定向”. 重定向有三种方式:
- 标准输入重定向(<)
java 先构造一个文件, 里面添加一些内容. cat < test.txt
- 标准输出重定向 (>)
java cat test.txt > test2.txt
- 标准错误重定向 (2>), 注意 2 和 > 之间不能有空格.
# 尝试删除一个不存在的文件 rm aaa > test.txt # 输出结果, 这个提示并没有被重定向到 test.txt 文件中. rm: cannot remove ‘aaa’: No such file or directory # 正确做法 rm aaa 2> test.txt
标准输入, 标准输出, 标准错误 是三个特殊的文件
每个进程在启动的时候都会默认打开. 分别对应到:键盘, 显示器, 显示器这样的设备.
在 Java 中, 分别对应到 System.in , System.out , System.err
关于管道
管道是一种古老的 “进程间通信” 方式. 在 Linux 指令中可以使用 | 作为管道标记.
意思是将前一个指令标准输出的内容, 作为第二个指令的标准输入内容.
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
2. 时间戳
时间->时间戳:date +%s
时间戳->时间:date -d@1508749502
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日
(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
vim 是一个知名的文本编辑器. 前面学习的 cat, less, head, tail 等命令只能查看文本, 不能编辑文本
. 使 用 vim 就可以进行编辑了.
vim 就相当于 Windows 的记事本. 只不过功能比记事本强大一些.
vim [文件名]
vim 打开文件后默认是普通模式. 普通模式下键盘的按键表示一些特殊功能的快捷键. (例如按下 j 并不是
输入字母 “j”, 而是表示光标往下移动一行). 需要进入插入模式才能进行文本编辑.
使用 i 键可以进入到插入模式
. (左下角提示 --INSERT-- ) 然后就可以像记事本一样正常编辑了.
在插入模式下不能保存文件, 需要先回到 普通模式 . 按下 Esc
回到普通模式.
在普通模式下输入 :w
, 再按下回车, 即可保存文件.
在插入模式下不能退出, 需要先回到 普通模式.
在普通模式下输入 :q
, 再按下回车, 即可退出.
也可以直接使用 :wq
同时执行保存和退出
(不要忘记引号!!!)
语法:grep [参数]… [文件]…
功能:用于查找文件中是否包含指定字符串, 并显示对应的行.
选项:
举例:
grep "hello" Hello.java
语法:ps [参数]…
功能:用于查看当前系统上运行的进程
选项:
举例:
ps aux # 显示系统上所有的进程
ps aux | grep "进程名"
ps aux | grep "进程id"
语法:netstat [参数]…
功能:查看系统上的网络状态.
选项:
举例:
netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"
Linux下有两种用户:超级用户(root)、普通用户。
#
”,普通用户的命令提示符是“$
”。我们的服务器买好了, 默认是 root 用户. 但是 root 用户权力比较大, 一旦使用不当可能会造成严重后果
(例如 rm -rf /). 因此我们真正在公司中不会直接使用 root 用户来操作服务器.
useradd test
passwd test
注意, 输入密码的时候, 在控制台中不会有提示. 但实际上已经输入进去了.
例如,要从root用户切换到普通用户user,则使用 su user。
su user
要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的
口令。
su root
访问一个文件的人可能分成三种类别.
文件和文件目录的所有者:u—User
文件和文件目录的所有者所在的组的用户:g—Group
其它用户:o—Others
a) 文件类型
b) 基本权限
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
chmod命令权限值的格式
① 用户表示符+/-=权限字符
实例:
# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt
# chmod a=x /home/abc.txt
② 三位8进制数字
实例:
# chmod 664 /home/abc.txt
# chmod 640 /home/abc.txt
想要部署一个在公网上能被其他用户访问到的网站,主要需要三个东西
安装方式可以有两种,推荐用宝塔面板一键安装,在此我主要讲下宝塔面板的玩法
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 [软件包名字]
注意事项
我们已经买好了一个全新的云服务器,重点来了,保证这是个全新的服务器,不然安装宝塔面板容易出问题
打开宝塔官网https://www.bt.cn/new/download.html
输入自己买的服务器的公网ip和密码,可以去云服务器官网的控制台看,上文已经讲过在哪看了,不多赘叙
然后根据重置后的账号密码,打开外网面板地址,即可登录面板控制页(如果重置的密码登不上,就bt 5 bt 6 自己改一下,就行了,这应该是个bug,反正我遇到了
)(再有如果无法访问面板,需要去服务器控制台,防火墙,添加安全组给宝塔面板的端口放行,如下图
)
http://[服务器外网ip]:8080/
即可看到这个默认页面(看不到这个默认页面的话请看下一个步骤)第一次弄的话,现在应该看不到这个默认页面,因为你的云服务器防火墙没给8080这个端口开放,需要到云服务器官网控制台配置一下防火墙安全组
现在Tomcat和Java运行环境都搞定了,最后一步,就是将本地代码打包上传到我们的云服务器上去
在pom文件里的build标签下加上一个文件最终名
在pom文件最后加上这一句代码
双击package,即可完成打包
打包完就会生成一个war包
右键点击,在文件夹中显示
到这一步,就完成我们的部署了,当然,在这个过程中要注意代码中涉及到文件路径的地方,因为我们原本是在本地跑代码,涉及到的文件路径是我们本地电脑的文件目录,但现在是在服务器上跑,所以代码中涉及到文件路径的地方要改成我们服务器上的文件路径,这个很关键,不然代码肯定跑不起来
8.然后在浏览器输入正确的ip地址和资源路径即可访问到我们的页面了http://114.132.210.189:8080/java_doc_searcher/index.html