Linux常用知识

快捷键

//强制停止
ctrl+c
//退出或者登出账户,不能退出vi/vim
ctrl+d
//自动执行上一次匹配前缀的命令,只能适用于短时间的命令
!+最近使用命令的前缀
//输入内容区匹配历史命令,回车会执行,键盘左右键可以得到此命令不执行
ctrl+r 输入内容匹配历史命令
//光标移动快捷键
1.ctrl +a	//跳到命令开头
2.ctrl +e	//跳到命令结尾
3.ctrl +键盘左键	//向左跳一个单词
4.ctrl +键盘右键	//向右跳一个单词
//清屏
ctrl+l

finalshell连接虚拟机

注意点:连接Ubuntu可能会遇到问题,解决方案

//1.首先打开虚拟机
//2.打开finalshell,点击左上角文件夹图标创建ssh连接
//3.去虚拟机中打开终端查询虚拟机ip(命令如下)
ifconfig   //查询虚拟机ip
//4.设置虚拟机登录用的用户名以及密码,在填写好连接的虚拟机系统的名称点击确定即可

finalshell连接Ubuntu问题解决方案

注意点:在终端操作过程中可能一些命令需要下载

使用 sudo apt install +需要下载的命令

//获取ip地址
ifconfig
//安装连接配件
sudo apt-get install openssh-server
//重启ssh服务
sudo service ssh restart
//检查ssh服务是否开启
sudo ps -e | grep ssh
//打开防火墙
sudo ufw enable
//查看防火墙状态(看是否配置的端口能被放行)
sudo ufw status
//若不存在连接的默认端口使用如下命令来放行指定端口连接
sudo ufw allow +指定端口号
//检查是否放行
sudo ufw status

Finalshell上传下载文件失败解决方案

  1. 看连接虚拟机使用的是否是root权限,不是的话更改设置为root权限进入
  2. 看版本是否是最新的版本

权限列标识

//1.第一列
d:表示文件夹
-:表示文件
l:表示软连接
//所属用户权限
//2.第二列
r:表示所属用户有查看此文件内容的权限或查看文件夹内容的权限如ls命令
-:表示所属用户没有查看此文件的权限
//3.第三列
w:表示所属用户有对文件夹创建、删除、改名等操作的权限或者修改文件内容的权限
-:表示所属用户没有这些权限
//4.第四列
x:表示针对文件夹,可以更改工作目录到此文件夹,即cd进入或将文件作为程序执行的权限
//所属用户组权限
//5.第五列
同所属用户权限的读的权限一致
//6.第六列
同所属用户权限的写的权限一致
//7.第七列
同所属用户执行权限一致
//其他用户权限
//8.第八列
同所属用户权限的读的权限一致
//9.第九列
同所属用户权限的写的权限一致
//10.第十列
同所属用户执行权限一致

通配符

用来模糊匹配使用

使用场景:

  1. rm命令
  2. find命令
//示例
1. *test	//以test结尾
2. test*	//以test开头
3. *test*	//包含test的

管道符

|:管道符|将左边命令的结果,作为右边命令的输入

示例:

cat hello.txt | grep hello

cat hello.txt的输出结果(文件内容)

作为右边grep命令的输入(被过滤的文件)

常用命令

ls命令

查看文件夹内容的命令

ls [-a -l -h] [Linux路径]

[-a -l -h]:是选项

[Linux路径]:可以查看指定路径下的文件

选项可以组合使用,使用格式举例:

ls -l -a

ls -la

ls -al

//选项
1.-a	:表示all的意思,列出所有文件(包括隐藏的文件和隐藏的文件夹)	//列出的文件中以.开头的表示是隐藏文件
2.-l	:表示以列表或者竖向排列的形式展示内容并且展示更多信息
3.-h	:表示以易于阅读的形式,列出文件的大小,如KMG		//-h选项必须搭配-l一起使用

cd命令

当Linux终端打开时,默认以Home目录作为当前的工作目录

cd命令用来更改当前所在的工作目录

cd [Linux路径]

注意:

cd命令无需选项,只有参数,表示要切换到哪个目录下

cd命令直接执行,不写参数,表示回到用户的HOME目录

pwd命令

pwd命令用来查看当前工作目录

pwd命令无选项,无参数,字节输入pwd即可

mkdir命令

创建文件夹命令

语法:mkdir [-p] Liux路径

注意:

参数必填,表示Linux路径,即要创建的文件夹的路径,相对路径或绝对路径均可

创建文件夹在HOME目录内是不需要权限的,在其他目录下可能需要权限

//选项
-p	:当需要创建多层级的目录且创建文件的父目录不存在时需要使用此选项
//比如需要在HOME目录下的test文件夹下创建一个hello文件夹时,test文件夹不存在需要使用-p选项如下:
mkdir -p ~/test/hello

touch、cat和more命令

touch:创建文件

语法:touch Linux路径

注意:

touch命令无选项,参数必填,表示要创建的文件路径,相对、绝对、特殊路径均可使用

cat:查看文件内容

语法:cat Linux路径

注意:

cat没有选项,只有必填参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符均可使用

cat只能查看文件内容不能进行修改

more:查看文件内容

语法:more Linux路径

注意:

同样没有选项,只有必填参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符均可使用

空格进行翻页,q退出查看

cat与more不同:

cat是直接将内容全部显示出来

more支持翻页,如果文件内容过多,可以一页页展示

cp命令

cp:复制文件、文件夹

语法:cp [-r] 参数1 参数2

注意:

参数1,Linux路径,表示被复制的文件或文件夹

参数2,Linux路径,表示要复制去的地方

//选项
-r :可选,用于复制文件夹使用,表示递归

mv命令

mv:移动文件、文件夹

语法:mv 参数1 参数2

注意:

参数1,Linux路径,表示被移动的文件或文件夹

参数2,Linux路径,表示要移动去的地方,如果目标不存在,则进行改名确保目标存在

rm命令

rm:删除文件、文件夹

语法:rm [-r -f] 参数1 参数2 …… 参数N

注意:

同cp命令一样,-r选项用于删除文件夹

-f表示force,强制删除(不会弹出提示确认信息)

​ 表示用户删除内容不会弹出提示,只有root管理员用户删除内容会有提示

​ 所以一般用户用不到-f选项

参数1、参数2、……、参数N表示要删除的文件或者文件夹路径,按照空格隔开

rm命令可以使用通配符*,用来模糊匹配

which命令

which:查找命令的程序文件(查找命令的.exe文件的存放位置)

语法:which 要查找的命令

find命令

find:可以通过find命令去搜索指定的文件

语法:

按文件名查找

find 起始路径 -name “被查找文件名”

按文件大小查找

find 起始路径 -size +|- n[kMG]

+、-:表示大于和小于

n:表示大小数字

KMG:表示大小单位,k(小写字母)表示kb,M表示MB,G表示GB

注意:

使用root用户可以在整个系统完成搜索

find命令可以使用通配符进行查找

//选项
-name	:按照文件名查找
-size	:按照文件大小查找

grep命令

grep:使用grep命令可以从文件中通过关键字过滤文件行

语法:grep [-n] 关键字 文件路径

注意:

选项-n,可选,表示在结果中显示匹配的行的行号

参数,关键字,必填,表示过滤的关键字,带有空格或其他特殊符号,建议使用“ ”将关键字包围起来

参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口

-n	:显示匹配到的关键字所在的行的行号

wc命令

wc:统计文件的行数、单词数量等

语法:wc [-c -m -l -w] 文件路径

注意:

参数,文件路径,被统计的文件,可作为内容输入端口

//选项
-c	:统计bytes数量(字节数量)
-m	:统计字符数量
-l	:统计行数
-w	:统计单词数量

echo命令

echo:输出内容

语法:echo 输出的内容

注意:

无需选项,只有一个参数,表示要输出的内容,复杂内容可以用“ ”包围

带有空格或\等符号,建议使用双引号包围,因为不包围的话,空格后很容易被识别为参数2,尽管echo不受影响,但是要养成习惯

tail命令

tail:查看文件尾部内容,跟踪文件的最新更改

语法:tail [-f -num] Linux路径

注意:

参数,Linux路径,表示被跟踪的文件路径

//参数
-f	:表示持续跟踪,相当于对文件进行修改会实时更新最后添加的内容
-num	:表示查看尾部多少行,不填默认10行,num选项可以直接填写数字如tail -5 test.txt

vi和vim

vi和vim:都是文本编辑器

语法:vi/vim Linux路径

不同:

vim是vi的加强版本,兼容vi所有指令,不仅能编辑文本,而且还具有shell程序编辑的功能,可以不同暗色的字体来辨别语法的正确性,极大的方便了程序的设计和编辑性。

注意:

如果文件路径表示的文件不存在,那么此命令会用于编辑新文件

如果文件路径表示文件存在,那么此命令用于编辑已有文件

模式:

命令模式:可以通过输入指令对文件进行修改等一系列操作

底线模式:在命令模式下输入:即可进入底线模式(不需要敲回车),底线模式主要用来对文件内容进行保存或者退出编辑等操作

输入模式:通过指定按键进入输入模式,输入模式下可以对文件内容进行修改

任何情况下回到命令模式的按键都是是Esc

//命令模式指令
1. i	:在当前光标位置进入输入模式,可以对文件内容进行修改
2. a	:在当前光标位置之后进入输入模式
3. I	:在当前行的开头进入输入模式
4. A	:在当前行的结尾进入输入模式
5. o	:在当前光标的下一行进入输入模式
6. O	:在当前光标的上一行进入输入模式
7. 0	:数字0移动光标到当前行的开头
8. $	:移动光标到当前行的结尾
9. pageup(PgUp)	:向上翻页
10. pangdown(PgDn)	:向下翻页
11. /	:进入搜索模式
12. n	:向下继续搜索
13. N	:向上继续搜索
14. dd	:删除一行
15. ndd	:删除当前光标下n行
16. yy	:复制当前行
17. nyy	:复制当前光标下n行
18. p	:粘贴
19. u	:撤销
20. ctrl+r	:反向撤销修改
21. gg	:跳到首行
22. G	:跳到行尾
23. dG	:从当前行开始,向下全部删除
24. dgg	:从当前行开始,向上全部删除
25. d$	:从当前光标开始,删除到本行的结尾
25. d0	:从当前光标开始,删除到本行的开头
//底线模式指令:
:wq		:保存退出
:q		:仅退出
:q!		:强制退出
:w		:仅保存
:set nu		:显示行号
:set paste	:设置粘贴模式(确保你从文件外部复制的内容保持一致)

getent命令

getent:查看当前系统中有那些用户

语法:

查看系统中用户

getent passwd

输出信息分析:用户名:密码(x):用户ID:描述信息(无用):HOME目录:执行终端(默认bash)

查看系统中用户组

getent group

输出信息分析:组名称:组认证(显示为x):组ID

//查看系统中用户
getent passwd
//查看系统中用户组
getent group 

chmod命令

chmod:修改权限控制

语法:chmod [-R] 权限 文件或文件夹

注意:

只有文件、文件夹的所属用户或root用户可以修改

选项:-R,对文件夹内的全部内容应用同样的操作

示例:

  • chmod u=rwx,g=rx,o=x hello.txt,将文件权限修改为:rwxr-x—x

    • 其中:u表示所属用户权限,g表示所属用户组权限,o表示其他用户权限
  • chmod -R u=rwx,g=rx,o=x test,将文件夹test以及文件夹内全部内容权限设置为rwxr-x—x

权限可以用3位数字来表示,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其他用户权限

数字细节如下:r记为4,w记为2,x记为1,每个用户权限可以用相加来表示

如:所属用户有读和写的权限,则可以用4+2=6,用6来表示所属用户的权限以此类推。

chown命令

chown:修改所属用户、用户组

语法:chown [-R] [用户] [:] [用户组] 文件或文件夹

注意:

此命令只适用于root用户

选项,-R,同chmod,对文件夹内全部内容应用相同规则

选项,用户,修改所属用户

选项,用户组,修改所属用户组

:用于分隔用户和用户组

//示例
chown root hello.txt	//将hello.txt所属用户修改为root
chown :root hello.txt	//将hello.txt所属用户组修改为root
chown root:chen hello.txt	//将hello.txt所属用户名修改为root,所属用户组修改为chen
chown -R root test	//将文件夹test的所属用户修改为root并对文件夹内全部内容应用相同规则

systemctl命令

linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启能够被systemctl管理的软件,一般也称之为:服务

语法:systemctl start | stop | status | enable | disable 服务名

注意:

start:启动

stop:停止

status:查看状态

enable:开启开机自启

disable:关闭开机自启

系统内置的服务比较多,比如:

NetworkManager,主网络服务

network,副网络服务

firewalld,防火墙服务

sshd,ssh服务(FinalShell远程登录Linux使用的就是这个服务)

部分软件安装后并不会自动集成到systemctl中,我们可以手动添加。

ping命令

ping:检查服务器是否可联通

语法:ping [-c num] ip或主机名

注意:

  • 选项:-c,检查的次数,不使用-c选项,将无限次数持续检查
  • 参数:ip或主机名,被检查的服务器的ip地址或主机名地址

wget命令

wget:是非交互式的文件下载器,可以在命令行内下载网络文件

语法:wget [-b] url

注意:

不论下载是否完成,都会生成要下载的文件,如果未完成一定要及时删除为下载完成的文件

  • 选项:-b,可选,后台下载,会将日志写入到当前工作目录的wget-log文件
  • 参数:url,下载链接
//示例: 
//下载apache-hadoop3.3.0版本:
wget http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

//在后台下载:
wget -b  http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

//可以通过tail命令监控后台下载进度
tail -f wget-log

curl命令

curl:可以发送http网络请求,可用于下载文件、获取信息等

语法:curl [-0] url

注意:

  • 选项:-O,用于下载文件,当url是下载链接时,可以使用此选项保存文件
  • 参数:url,要发起请求的网络地址

ps命令

ps:通过ps命令查看Linux系统中的进程信息

语法:ps [-e -f]

注意:

  • 选项:-e,显示出全部的进程
  • 选项:-f,以完全格式化的形似展示信息(展示全部信息)

一般来说,固定用法就是:ps -ef列出全部进程的全部信息

查询信息列表代表含义:

  1. UID:进程所属的用户ID
  2. PID:进程的进程号ID
  3. PPID:进程的父ID(启动此进程的其他进程)
  4. C:此进程的CPU占用率
  5. STIME:进程的启动时间
  6. TTY:启动此进程的终端序号,如显示?,表示非终端启动
  7. TIME:进程占用CPU时间
  8. CMD:进程对应的名称或启动路径或启动命令

可以配合管道符进行使用更快的找到想要看到的进程

//理出全部进程的全部信息
ps -ef
//列出关于tail的进程
ps -ef | grep tail
//关闭进程,-9表示强制关闭进程,不适用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制
kill [-9] 进程ID

top命令

top:查看CPU、内存使用情况,每5秒刷新一次

选项:

  1. -p 只显示某个进程的信息
  2. -d 设置刷新时间,默认是5s
  3. -c 显示产生进程的完整命令,默认是进程名
  4. -n 指定刷新次数,比如top -n 3,刷新输出3次后退出
  5. -b 以非交互非全屏模式运行,以批次的方式执行top,一般配合-n指定输出几次统计信息,将输出重定向到指定文件,比如 top -b -n 3 > /tmp/top.tmp
  6. -i 不显示任何闲置(idle)或无用(zombie)的进程
  7. -u 查找特定用户启动的进程

信息前5行信息

  • 第一行:

    top:命令名称,当前系统时间,up:启动时间,2 user:2个用户登录,load:1、5、15分钟负载

  • 第二行

    Tasks:175 total:175个进程,1 running:1个进程在运行,174 sleeping:174个进程睡眠,0stopped:0个停止进程,0 zombie:0个僵尸进程

  • 第三行

    %Cpu(s):cpu使用率,us:用户cpu使用率,sy:系统cpu使用率,ni:高优先级进程占用cpu时间百分比,id:空闲cpu率,wa:io等待cpu占用率,hi:cpu硬件中断率,si:cpu软件中断率,st:强制等待占用cpu率

  • 第四、五行

    Kib Mem:物理内存,total:总量,free:空闲,used:使用,buff/cache:buff和cache占用

    KibSwap:虚拟内存(交换空间),total:总i昂,free:空闲,used:使用,buff/cache:buff和cache占用

df命令

df:查看硬盘使用情况

语法:df [-h]

注意:

  • 选项:-h,以更加人性化的单位显示

iostat命令

iostat:查看CPU、磁盘的相关信息

语法:iostat [-x] [num1] [num2]

注意:

  • 选项:-x,显示更多信息
  • num1:数字,刷新间隔,num2:数字,刷新几次
//显示cpu、磁盘的更多信息,每隔5秒刷新1次,刷新4次
iostat -x 5 4

sar命令

sar:查看网络的相关统计(sar命令非常父子,这里仅简单用于统计网络)

固定语法:sar -n DEV num1 num2

注意:

  • 选项 -n,查看网络,DEV表示查看网络接口
  • num1:刷新间隔(不填就查看一次结束),num2:查看次数(不填无限次数)

信息解读:

  • IFACE本地网卡接口名称
  • rxpck/s每秒钟接收数据包
  • txpck/s没秒钟发送的数据包
  • rxKB/S每秒钟接收数据包大小,单位为KB
  • txKB/S每秒钟发送的数据包大小,单位为KB
  • rxcmp/s每秒钟接收的压缩数据包
  • txcmp/s每秒钟发送的压缩包
  • rxmcst/s每秒钟接收的多播数据包

rz、sz上传和下载命令

FinalShell可以直接进行拖拽操作,遇到大文件建议直接拖拽

上传语法:直接输入rz即可

下载语法:sz 要下载的文件

注意:

文件会自动下载到桌面的:fsdownload文件夹中

tar解压缩命令

tar [-c -v -x -f -z -C] 参数1 参数2 … 参数N

注意:

  1. -c,创建压缩文件,用于压缩模式
  2. -v,显示压缩、解压过程,用于查看进度
  3. -x,解压模式
  4. -f,要创建的文件,或要解压的文件,-f选项必须在所有选项中位置处于最后一个
  5. -z,gzip模式,不使用-z就是普通的tarball格式,一般处于选项位第一个
  6. -C,选择解压的目的地,用于解压模式,单独使用,和解压缩所需的其他参数分开
//常用压缩组合
//1.新建压缩文件
tar -cvf test.tar 1.txt 2.txt 3.txt	//将1.txt2.txt3.txt文件压缩成test.tar归档文件
//2.将文件压缩到已有的压缩文件中
tar -zcvf test.tar.gz 1.txt 2.txt 3.txt	//将1.txt2.txt3.txt压缩到test.tar.gz文件中,使用gzip模式

//常用的解压组合
//1.解压至当前目录
tar -xvf test.tar
//2.解压到指定目录
tar -xvf test.tar -C /home/chen	//将test.tar文件解压至/home/chen目录下
//3.以Gzip模式解压.gz文件至指定目录
tar	-zxvf test.tar.gz -C /home/chen

zip压缩命令

zip:压缩文件为zip压缩包

语法:zip [-r] 参数1 参数2 … 参数N

注意:

  • -r,被压缩的包含文件夹的时候,需要使用-r选项,和rm、cp等命令的-r效果一致
//将文件压缩到已有压缩文件中
zip test.zip a.txt b.txt c.txt	//将a.txtb.txtc.txt压缩到test.zip文件内
//将文件夹压缩和文件压缩到压缩文件中
zip test.zip test chen a.txt	//将test和chen文件夹和a.txt文件压缩到test.zip文件内

unzip解压命令

unzip:解压zip压缩包

语法:unzip [-d] 参数

注意:

  • -d,指定要解压去的位置,同tar的-C选项
  • 参数,被解压的zip压缩包文件
//解压到当前目录
unzip test.zip	//将test.zip解压到当前目录
//解压到指定目录
unzip test.zip -d /home/chen

scp命令

scp命令是cp命令的升级版,即:ssh cp,通过SSH协议完成文件的复制。

其主要的功能就是:在不同的Linux服务器之间,通过SSH协议互相传输文件。

只要知晓服务器的账户和密码(或密钥),即可通过SCP互传文件。

语法:scp [-r] 参数1 参数2

  • -r选项用于复制文件夹使用,如果复制文件夹,必须使用-r
  • 参数1:本机路径 或 远程目标路径
  • 参数2:远程目标路径 或 本机路径

如:
scp -r /export/server/jdk root@node2:/export/server/
将本机上的jdk文件夹, 以root的身份复制到node2的/export/server/内
同SSH登陆一样,账户名可以省略(使用本机当前的同名账户登陆)

如:
scp -r node2:/export/server/jdk /export/server/
将远程node2的jdk文件夹,复制到本机的/export/server/内

# scp命令的高级用法
cd /export/server
scp -r jdk node2:`pwd`/    # 将本机当前路径的jdk文件夹,复制到node2服务器的同名路径下
scp -r jdk node2:$PWD      # 将本机当前路径的jdk文件夹,复制到node2服务器的同名路径下

相对路径和绝对路径

绝对路径:以根目录为起点,描述路径的一种写法,路径描述以/开头

相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以/开头

//特殊路径符
1.表示当前目录,比如cd ./Desktop表示切换到当前目录下的Desktop目录内,于cd Desktop一致
2..表示上一级目录,比如:cd ..即可切换到上一级目录,cd ../.. 切换到上二级的目录
3~表示HOME目录,比如:cd ~即可切换到HOME目录或cd ~/Desktop,切换到HOME目录内的Desktop目录

反引号

反引号:被反引号(``)包围的内容作为命令去执行

重定向符

“>”:将左侧命令结果,覆盖到符号右侧的指定文件中

“>>”:将左侧命令的结果,追加写入到符号右侧的指定的文件中

示例:

echo “Hello Linux” >hello.txt

超级管理员

root:超级管理员,具有最大的系统操作权限,普通用户在许多地方的权限是受限的

举例:

在根目录下创建文件夹:

普通用户:无法创建的

root超级管理员:可以直接创建

语法:su [-] [用户名]

注意:

-:符号是可选的,表示是否在切换用户的同时加载环境变量

参数:用户名,表示要切换的用户,用户名也可以省略不写,不写默认切换到超级管理员用户

//切换超级管理员的命令
su - root
//退出超级管理员
exit/ctrl+d

sudo认证

普通用户想要临时使用超级管理员权限执行命令是需要使用sudo命令但是需要输入密码,当完成sudo认证后则可以直接使用sudo命令,不需要使用密码

//1.切换超级管理员
su - root
//2.修改sudoers内容
vim /etc/sudoers
//3.在文件最后添加如下内容
普通用户名 ALL=(ALL)	NOPASSWD: ALL

用户和用户组

用户组管理

以下命令需要root用户执行

//1.创建用户组
groupadd 用户组名
//2.删除用户组
groupdel 用户组名

用户管理

以下命令需要root用户执行

//1.创建用户
useradd [-g -d] 用户名
	//选项
    -g	:指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g
    -d	:指定用户HOME路径,不指定,HOME目录默认在:/home/用户名
//2.删除用户
userdel [-r] 用户名
    //选项
    -r	:删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留
//3.查看用户所属组
id [用户名]
    //选项
    参数:用户名,被查看的用户,如果不提供则查看自身
//4.修改用户所属组
usermod -aG 用户组 用户名,被指定用户加入指定用户组

软件安装

yum命令(centos)

centos系统的软件安装包的格式为.rpm

yum:RPM包软件管理器,用于自动化安装Linux软件,并可以自动解决依赖问题

语法:yum [-y] [install | remove |search] 软件名称

注意:

yum命令需要root权限,可以su切换到root,或者用sudo提权,且yum命令需要联网

  1. 选项:-y,自动确认,无需手动确认安装或卸载过程
  2. install:安装
  3. remove:卸载
  4. search:搜索

apt命令(Ubuntu)

ubuntu系统的软件安装包格式为.deb

apt:Ubuntu系统只能装软件使用命令

语法:apt [-y] [install | remove | search] 软件名称

注意:

用法与yum一致,同样需要root权限

软连接

软连接:在系统中创建软连接,可以将文件、文件夹链接到其他位置,类似Windows系统中的快捷方式

语法:ln -s 参数1 参数2

注意:

  • -s选项,创建软连接
  • 参数1:被链接的文件或文件夹
  • 参数2:要链接去的目的地

date命令

通过date查看的日期是不准确的,这是因为:系统默认时区非中国的东八区,解决方案

date:通过date命令可以在命令行中查看系统的时间

语法:date [-d] [+格式字符串]

注意:

+格式字符串如果有特殊字符如空格的话,用双引号将其整个+格式字符串包裹起来

  • -d按照给定的字符串显示日期,一般用于日期计算

    • 可以和格式话字符串配合使用,其中支持的时间标记为:
      • year年
      • Month月
      • day天
      • hour小时
      • minute分钟
      • second秒
    • 使用方式举例:date -d “+1 day” +%Y%m%d #显示后一天的日期
  • 格式化字符串:通过特定字符串标记,来控制显示的日期格式

    • %Y:年
    • %y:年份后两位数字(00~99
    • %m:月份(01~12)
    • %d:日(01~31)
    • %H:小时(00~23)
    • %M:分钟(00~60)
    • %S:秒(00~60)
    • %s:自1970-01-01 00:00:00 UTC 到现在的秒数

修改时区

//1.使用root权限
su root
//删除系统自带的localtime文件
rm -f /etc/localtime
//软连接连接
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

时间自动校准

当ntpd启动后会定期的帮助我们联网校准系统时间

也可以手动校准

自动校准

//1.安装ntp
yum -y install ntp
//开启服务
systemctl start ntpd
//设置开机自启
systemctl enable ntpd

手动校准

需要root权限

ntpdate -u ntp.aliyun.com	//通过阿里云提供的服务网址配合ntpdate(安装ntp后会附带这个命令)命令自动校准

IP地址和主机名

IP地址:每一台联网的电脑都会有一个地址,用于和其他计算机进行通讯

ip地址主要有v4和v6两个版本(主要是v4版本)

IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.16888.101就是一个标准的IP地址

特殊IP:

  • 127.0.0.1 这个地址用于指代本机
  • 0.0.0.0
    • 可以指代本机
    • 可以在端口绑定中用来确定绑定关系
    • 在一些IP地址限制中,表示所有IP的意思,如放行规则设置为0.0.0.0,表示允许任意IP访问
//查看ip地址
ifconfig

主机名

每一台电脑除了对外联络地址(IP地址)以外还可以有一个名字,称之为主机名,这个是可以自行进行设置的

//查看系统主机名
hostname
//修改主机名(需root),需改结束重新登录FinalShell即可看到主机名
hostnamectl set-hostname 主机名

域名解析

访问www.baidu.com的流程

  1. 访问www.baidu.com
  2. 首先会检查本地记录(私人地址本)
    • Windows:C:\Windows\System32\drivers\hosts
    • Linux:/etc/hosts
  3. 若不过本地没有会联网询问公开的DNS服务器是否有记录www.baidu.com的地址

虚拟机固定IP

//1. 打开编辑中的虚拟网络编辑器
//2.点击右下角的更改设置按钮
//3.选中名称为VMnet8类型为NAT模式
//4.修改子网IP:192.168.x.0,子网掩码为255.255.255.0
//5.点击NAT设置
//6.修改网关为192.168.X.2
//7.开启虚拟机
//8.使用root权限
su root
//9.修改指定文件内容
vi /etc/sysconfig/network-scripts/ifcfg-ens33
//10.修改内容:需要跟虚拟网络编辑器中匹配
BOOTPROTO="static"
IPADDR="192.168.X.X"	//输入你想要设置的ip
NETMASK="255.255.255.0"	//子网掩码
GATEWAY="192.168.X.2"	//网关
DNS1="192.168.X.2"		//与网关一致即可

端口

端口:是设备与外界通讯交流的出入口。端口可以分为物理端口和虚拟端口两类

  • 物理端口:又可称之为接口,是可见的端口,如USB接口RJ45网口,HDMI端口等
  • 虚拟端口:是指计算机内部的端口,是不可见的,用来操作系统和外部进行交互使用的
    • 举例:当两台主机想要联通只需要知道ip地址即可,但是当想要锁定计算机上具体程序,确保程序之间沟通则是使用端口。

IP地址相当于小区地址,在小区内又可以有许多住户(程序),而门牌号(端口)就是各个住户(程序)的联系地址

Linux系统是一个超大号小区,可以支持65535个端口,这6万多个端口分为三类使用:

  • 公认端口:1~1023,通常用于一些系统内置或知名程序的预留,如SSH服务的22端口,HTTPS服务的443端口,非特殊需要,不要占用这个范围的端口
  • 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序/服务
  • 动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用。
    • 举例:当计算机A的微信连接计算机B的微信,A使用的50001即为动态端口,临时找一个端口作为出口,计算机B的微信使用端口5678,即注册端口,长期绑定此端口等待别人连接

nmap命令

nmap:扫描ip地址对外暴露的端口

//查看端口占用情况
nmap 被查看的ip地址
//安装nmap
yum -y install nmap

netstat命令

netstat:查看指定端口的占用情况

//查看指定端口的占用情况
netstat -anp | grep 端口号
//安装netstat
yum -y install net-tools

环境变量

查看环境变量

一些命令如cd可以在任何地方执行就是因为配置了环境变量,当输入命令点击回车时,系统会优先从环境变量配置的几个文件夹下查找,查找到即可直接拿来执行

//查看环境变量
env | grep PATH

$符号

$配合echo可以用来取“变量”的值

//使用echo和$符号打印出PATH变量的值
echo $PATH
//在输出内容后拼接ABC
echo ${PATH}ABC

自行设置环境变量

  • 临时设置:

    语法:export 变量名=变量值

  • 永久生效

    • 针对当前用户生效,配置在当前用户的:~/.bashrc文件中
    • 针对所有用户生效,配置在系统的:/etc/profile文件中
    • 并通过语法:souce配置文件,进行立刻生效,或重新登录FinalShell
//设置临时环境变量
export MYNAME=chen
//设置永久环境变量,以当前用户生效的情况为例
1.vi ~/.bashrc
2.在最后插入 export MYNAME=chen
3.保存退出后输入source .bashrc

部署MySQL数据库管理系统

主要版本:

  • MySQL 5.7版本安装
  • MySQL 8.x版本安装

5.7版本MySQL安装配置

安装

  1. 配置yum仓库

    由于MySQL并不在CentOS的官方仓库中,所以我们通过下面rpm命令:

    • 导入MySQL仓库密钥
    • 配置MySQL的yum仓库
    #更新密钥
    rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
    
    #安装Mysql yum库
    rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm
  2. 使用yum安装MySQL

    #yum安装Mysql
    yum -y install mysql-community-server
  3. 启动MySQL并配置开机自启动

    MySQL安装完成后,会自动配置名为:mysqld的服务,可以被systemctl所管理

    systemctl start mysqld	#启动
    systemctl enable mysqld	#开机自启
  4. 查看MySQL的运行状态

    systemctl status mysqld

配置

  1. 获取MySQL的初始密码

    #通过grep命令,在/var/log/mysqld.log文件中,过滤temporary password关键字,得到初始密码
    cat /var/log/mysqld.log | grep "temporary password“
  2. 登录MySQL数据库系统

    -u,登录的用户,MySQL数据库的管理员用户同Linux一样,是root

    -p,表示使用密码登录

    执行完毕后输入上一步得到的初始密码即可进入MySQL数据库

    #执行
    mysql -uroot -p
  3. 修改root用户密码

    #在MySQL控制台内执行
    ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';	-- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续简单语句如123,abc
  4. 配置root的简单密码

    我们可以给root设置简单密码,如123456.

    注意:

    此配置仅仅用于测试学习环境的MySQL,如果是正式使用,请勿设置简单密码

    #如果想要设置简单密码,需要降低Mysql密码的安全级别
    set global validate_password_policy=LOW;	#密码安全级别低
    set global validate_password_length=4;	#密码成都最低4位即可
    
    #然后就可以用简单密码了
    ALTER USER 'root'@'localhost' IDENTIFIED BY '简单密码';
  5. 配置root远程登录

    默认情况下,root用户是不运行远程登陆的,只允许在MySQL所在的Linux服务器登录MySQL系统

    注意:

    允许root远程登录会带来安全风险

    #授权root远程登录
    grant all privileges on *.* to root@"IP地址" identified by '密码' with grant option;
    #IP地址即为允许登录的IP地址,也可以填写%,表示允许任何地址
    #密码表示给远程登录独立设置密码,和本地登录的密码可以不同
    
    #刷新权限,生效
    flush privileges;
  6. 退出MySQL控制台页面

    #退出命令
    exit
    
    #或者通过快捷键退出:ctrl + d
  7. 检查端口

    MySQL默认端口3306端口,可以通过端口占用检查MySQL的网络状态

    netstat -anp | grep 3306

8.0版本MySQL安装配置

安装

  1. 配置yum仓库

    由于MySQL并不在CentOS的官方仓库中,所以我们通过下面rpm命令:

    • 导入MySQL仓库密钥
    • 配置MySQL的yum仓库
    #更新密钥
    rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
    
    #安装Mysql yum库
    rpm -Uvh http://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
  2. 使用yum安装MySQL

    #yum安装Mysql
    yum -y install mysql-community-server
  3. 启动MySQL并配置开机自启动

    MySQL安装完成后,会自动配置名为:mysqld的服务,可以被systemctl所管理

    systemctl start mysqld	#启动
    systemctl enable mysqld	#开机自启
  4. 查看MySQL的运行状态

    systemctl status mysqld

配置

  1. 获取MySQL的初始密码

    #通过grep命令,在/var/log/mysqld.log文件中,过滤temporary password关键字,得到初始密码
    cat /var/log/mysqld.log | grep "temporary password“
  2. 登录MySQL数据库系统

    -u,登录的用户,MySQL数据库的管理员用户同Linux一样,是root

    -p,表示使用密码登录

    执行完毕后输入上一步得到的初始密码即可进入MySQL数据库

    #执行
    mysql -uroot -p
  3. 修改root用户密码

    #在MySQL控制台内执行
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';	-- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续简单语句如123,abc
  4. 配置root的简单密码

    我们可以给root设置简单密码,如123456.

    注意:

    此配置仅仅用于测试学习环境的MySQL,如果是正式使用,请勿设置简单密码

    #如果想要设置简单密码,需要降低Mysql密码的安全级别
    set global validate_password_policy=0;	#密码安全级别低
    set global validate_password_length=4;	#密码成都最低4位即可
    
    #然后就可以用简单密码了
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
  5. 配置root远程登录

    默认情况下,root用户是不运行远程登陆的,只允许在MySQL所在的Linux服务器登录MySQL系统

    注意:

    允许root远程登录会带来安全风险

    #第一次授权root远程登录
    create user 'root'@'%/IP地址' IDENTIFIED WITH mysql_native_password BY '密码'#IP地址即为允许登录的IP地址,也可以填写%,表示允许任何地址
    #密码表示给远程登录独立设置密码,和本地登录的密码可以不同
    
    #后续修改密码使用如下SQL命令
    ALTER USER 'root'@'%/IP地址' IDENTIFIED WITH mysql_native_password BY '密码'#刷新权限,生效
    flush privileges;
  6. 退出MySQL控制台页面

    #退出命令
    exit;
    
    #或者通过快捷键退出:ctrl + d
  7. 检查端口

    MySQL默认端口3306端口,可以通过端口占用检查MySQL的网络状态

    netstat -anp | grep 3306

tomcat安装部署

tomcat版本:10.0.2

JDK版本:8u351或更高

安装

安装部署JDK环境

  1. 下载JDK软件

    https://www.oracle.com/java/technologies/downloads找到对应版本下载

  2. 登录Linux系统,切换到root用户

    su -
  3. 通过FinalShell,上传下载好的JDK安装包解决办法

  4. 创建文件夹,用来部署JDK;将JDK和Tomcat都安装部署到:/export/server内

    mkdir -p /export/server
  5. 解压缩JDK安装文件

    tar -zxvf jdk-8u351-linux-x64.tar.gz -C /export/server
  6. 配置JDK软连接

    ln -s /export/server/jdk1.8.0_351 /export/server/jdk
  7. 配置JAVA_HOME环境变量,以及将$JAVA_HOME/bin文件夹加入PATH环境变量中

    #编辑/etc/profile文件
    export JAVA_HOME=/export/server/jdk
    export PATH=$PATH:$JAVA_HOME/bin
  8. 生效环境变量

    source /etc/profile
  9. 配置java执行程序的软链接

    #删除系统自带的Java程序
    rm -f /usr/bin/java
    #建立软链接将想要使用的jdk版本指向/usr/bin/java
    ln -s /export/server/jdk/bin/java /usr/bin/java
    #验证是否可以在随意位置查看版本
    java -version

安装部署Tomcat

Tomcat建议使用非root用户安装并启动

可以创建一个用户:tomcat用以部署

  1. 首先,放行tomcat需要使用的8080端口的外部访问权限

    CenOS系统默认开启防火墙,阻止外部网络流量访问系统内部

    所以如果想要Tomcat可以正常使用,需要对Tomcat默认使用的8080端口进行放行

    放行的2种方式

    1. 关闭防火墙
    2. 配置防火墙规则,放行端口
    #方式1:关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    
    #方式2:放行8080端口的外部访问
    firewall-cmd --add-port=8080/tcp --permanent	#--add-port=8080/tcp表示放行8080端口的tcp访问,--permanent表示永久生效
    firewall-cmd --reload	#重新载入防火墙规则使其生效

    方便起见,建议选择方式1,直接关闭防火墙一劳永逸

  2. 以root用户操作,创建tomcat用户

    #以root用户操作
    useradd tomcat
    #可选,为tomcat用户配置密码,避免被外人拿到root最高权限
    passwd tomcat
  3. 下载Tomcat安装包

    下载链接需要自己进入网站复制,进入https://dlcdn.apache.org/tomcat/找到想要下载的版本复制链接替换

    #使用tomcat用户操作
    wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
    #如果出现https相关错误可以使用--no-check-certificate选项,如:ERROR: cannot verify dlcdn.apache.org's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:Issued certificate has expired.
    
    wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
  4. 解压Tomcat安装包

    #使用root用户操作,否则无权限解压到/export/server内,除非修改此文件夹权限首先要先找到文件所在位置
    cd /home/tomcat/
    #然后解压文件到/export/server
    tar -zxvf apache-tomcat-10.0.27.tar.gz -C /export/server
  5. 创建Tomcat软链接

    #使用root用户操作
    ln -s /export/server/apache-tomcat-10.0.27 /export/server/tomcat
  6. 修改tomcat安装目录权限

    #使用root用户操作,同时对软链接和tomcat安装文件夹进行修改,使用通配符*进行匹配
    chown -R tomcat:tomcat /exort/export/server/*tomcat*
  7. 启动到tomcat用户

    su - tomcat
  8. 启动tomcat

    /export/server/tomcat/bin/startup.sh
  1. tomcat启动在8080端口,可以检查是否正常启动

    netstat -anp | grep 8080

Nginx安装部署

安装

需要配置额外的yum仓库,才可以使用yum安装

安装需要root身份

  1. 安装yum依赖程序

    #root执行
    yum install -y yum-utils
  2. 手动添加,nginx的yum仓库

    yum程序使用的仓库配置文件,存放在:/etc/yum.repo.d内

    通过以下操作,我们手动添加了nginx的yum仓库

    # root执行
    # 创建文件使用vim编辑
    vim /etc/yum.repos.d/nginx.repo
    # 填入如下内容并保存退出
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
  3. 通过yum安装最新稳定版的nginx

    #root执行
    yum install -y nginx
  4. 启动

    # nginx自动注册了systemctl系统服务
    systemctl start nginx		# 启动
    systemctl stop nginx		# 停止
    systemctl status nginx		# 运行状态
    systemctl enable nginx		# 开机自启
    systemctl disable nginx		# 关闭开机自启
  5. 配置防火墙放行

    nginx默认绑定80端口,可根据tomcat中防火墙放行方式自行配置

  6. 启动后浏览器输入Linux服务器的IP地址或主机名可访问

    访问方式:http://192.168.88.128

    80端口是访问网站的默认端口,所以后面无需跟随端口号

RabbitMQ安装部署

安装

rabbitmq在yum仓库中的版本较老,所以需要手动构建yum仓库

  1. 准备yum仓库

    #root执行
    #1.主备gpgkey密钥
    rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey
    rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
    
    #2.准备仓库文件
    vim /etc/yum.repos.d/rabbitmq.repo
    #填写如下内容
    ##
    ## Zero dependency Erlang
    ##
    
    [rabbitmq_erlang]
    name=rabbitmq_erlang
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
    repo_gpgcheck=1
    gpgcheck=1
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
    [rabbitmq_erlang-source]
    name=rabbitmq_erlang-source
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
    ##
    ## RabbitMQ server
    ##
    
    [rabbitmq_server]
    name=rabbitmq_server
    baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
    [rabbitmq_server-source]
    name=rabbitmq_server-source
    baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/SRPMS
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
  2. 安装RabbitMQ

    #root执行安装erlang和rabbitmq
    yum install -y erlang rabbitmq-server
  3. 启动

    # root执行
    # 使用systemctl管控,服务名:rabbitmq-server
    systemctl enable rabbitmq-server		# 开机自启
    systemctl disable rabbitmq-server		# 关闭开机自启
    systemctl start rabbitmq-server			# 启动
    systemctl stop rabbitmq-server			# 关闭
    systemctl status rabbitmq-server		# 查看状态
  4. 放行防火墙,RabbitMQ使用5672、15672、25672这3个端口

    # 方式1(推荐),关闭防火墙
    systemctl stop firewalld		# 关闭
    systemctl disable firewalld		# 关闭开机自启
    
    # 方式2,放行5672 25672端口
    firewall-cmd --add-port=5672/tcp --permanent		# 放行tcp规则下的5672端口,永久生效
    firewall-cmd --add-port=15672/tcp --permanent		# 放行tcp规则下的15672端口,永久生效
    firewall-cmd --add-port=25672/tcp --permanent		# 放行tcp规则下的25672端口,永久生效
    firewall-cmd --reload								# 重新加载防火墙规则
  5. 启动RabbitMQ的WEB管理控制台

    rabbitmq-plugins enable rabbitmq_management
  6. 添加admin用户,并赋予权限

    rabbitmqctl add_user admin '12345';	#配置用户及密码密码
    
    rabbitmqctl set_permissions -p "/" "admin" ".*" ".*" ".*"	#配置权限,此时是最大权限
    rabbitmqctl set_user_tags admin administrator	#设置标签
  7. 浏览器打开管理控制台

    http://192.168.88.128:15672

Redis安装部署

安装

  1. 配置EPEL仓库

    EPEL 的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。EPEL则为服务器版本提供大量的rpm包(yum程序所使用的程序安装包,类似Windows的exe),而且大多数rpm包在官方 repository 中是找不到的。

    #root执行
    yum install -y epel-release
  2. 安装redis

    #root执行
    yum install -y redis
  3. 启动redis

    # root执行
    # 使用systemctl管控,服务名:redis
    systemctl enable redis		# 开机自启
    systemctl disable redis		# 关闭开机自启
    systemctl start redis		# 启动
    systemctl stop redis		# 关闭
    systemctl status redis		# 查看状态
  4. 放行防火墙,redis使用端口号6379

    # 方式1(推荐),关闭防火墙
    systemctl stop firewalld		# 关闭
    systemctl disable firewalld		# 关闭开机自启
    
    # 方式2,放行6379端口
    firewall-cmd --add-port=6379/tcp --permanent		# 放行tcp规则下的6379端口,永久生效
    firewall-cmd --reload	
  5. 进入redis服务

    #执行redis-cli
    [root@centos ~]# redis-cli
    127.0.0.1:6379>: set mykey hello
    OK
    127.0.0.1:6379>: get mykey
    "hello"

ElasticSearch安装部署

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 es)是目前全文搜索引擎的首选。

它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。

Elasticsearch简称es,在企业内同样是一款应用非常广泛的搜索引擎服务。

很多服务中的搜索功能,都是基于es来实现的。

安装

  1. 添加yum仓库

    #root执行
    #导入仓库密钥
    rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
    #添加yum源
    #编辑文件
    vim /etc/yum.repos.d/elasticsearch.repo
    
    [elasticsearch-7.x]
    name=Elasticsearch repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
    # 更新yum缓存
    yum makecache
  2. 安装es

    yum install -y elasticsearch
  3. 配置es

    vim /etc/elasticsearch/elasticsearch.yml
    
    # 17行,设置集群名称
    cluster.name: my-cluster
    
    # 23行,设置节点名称
    node.name: node-1
    
    # 56行,允许外网访问
    network.host: 0.0.0.0
    
    # 74行,配置集群master节点
    cluster.initial_master_nodes: ["node-1"]
  4. 启动es

    systemctl start | stop | status | enable | disable elasticsearch
  5. 关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld
  6. 验证

    浏览器打开:https://ip:9200/?pretty

集群化环境前置准备

介绍

在前面,我们所学习安装的软件,都是以单机模式运行的。

后续,我们将要学习大数据相关的软件部署,所以后续我们所安装的软件服务,大多数都是以集群化(多台服务器共同工作)模式运行的。

所以,在当前小节,我们需要完成集群化环境的前置准备,包括创建多台虚拟机,配置主机名映射,SSH免密登录等等。

部署

配置多台Linux虚拟机

安装集群化软件,首要条件就是要有多台Linux服务器可用。

我们可以使用VMware提供的克隆功能,将我们的虚拟机额外克隆出3台来使用。

  1. 首先,关机当前CentOS系统虚拟机(可以使用root用户执行init 0来快速关机)

  2. 右键VMware虚拟机中的我的计算机点击新建文件夹,并起名为:虚拟机集群

  3. 右键目前已有的CentOS系统选中管理中的克隆

    1. 选择当前状态
    2. 创建完整克隆
    3. 定义名字
  4. 根据上边的操作克隆出林外两台

  5. 将克隆出来的虚拟机拉入创建好的文件夹中

  6. 开启第一台克隆,修改主机名为node1,并修改固定ip为:192.168.88.131

    #修改主机名
    hostnamectl set-hostname node1
    
    #修改IP地址
    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    IPADDR="192.168.88.131"
    
    #重启网卡
    systemctl stop network
    systemctl start network
    #或者直接
    systemctl restart network
  7. 同样的操作启动node2和node3

    修改node2主机名为node2,设置IP为192.168.88.132

    修改node2主机名为node3,设置IP为192.168.88.133

  8. 配置FinalShell,配置连接到node1、node2、node3的连接

为了简单起见,加你配置root用户登录

配置主机名映射

  1. 在Windows系统中修改hosts文件,填写如下内容

    如果使用的MacOS系统,请:

    1. sudo su -,切换到root
    2. 修改/etc/hosts文件
    192.168.88.131 node1
    192.168.88.132 node2
    192.168.88.133 node3
  2. 在3台Linux的/etc/hosts文件中,填写如下内容

    192.168.88.131 node1
    192.168.88.132 node2
    192.168.88.133 node3

SSH免密登录

SSH服务是一种用于远程登录的安全认证协议。

我们通过FinalShell远程连接到Linux,就是使用的SSH服务。

SSH服务支持:

  1. 通过账户+密码的认证方式来做用户认证
  2. 通过账户+秘钥文件的方式做用户认证

SSH可以让我们通过SSH命令,远程的登陆到其它的主机上,比如:

在node1执行:ssh root@node2,将以root用户登录node2服务器,输入密码即可成功登陆

或者ssh node2,将以当前用户直接登陆到node2服务器。

SSH免密配置

后续安装的集群化软件,多数需要远程登录以及远程执行命令,我们可以简单起见,配置三台Linux服务器之间的免密码互相SSH登陆

  1. 在每台机器上都执行:

    #回车到底,相当于加锁配钥匙
    ssh-keygen -t rsa -b 4096
    
    #想当于将配的钥匙分给其他几台机器
    ssh-copy-id node1
    ssh-copy-id node2
    ssh-copy-id node3
  2. 配置JDK环境

  3. 关闭防火墙和SELinux

    集群化软件之间需要通过端口互相通讯,为了避免出现网络不通的问题,我们可以简单的在集群内部关闭防火墙。

    systemctl stop firewalld
    systemctl disable firewalld

    Linux有一个安全模块:SELinux,用以限制用户和程序的相关权限,来确保系统的安全稳定。

    SELinux的配置同防火墙一样,非常复杂,课程中不多涉及,后续视情况可以出一章SELinux的配置课程。

    在当前,我们只需要关闭SELinux功能,避免导致后面的软件运行出现问题即可,在每一台机器都执行

    vim /etc/sysconfig/selinux
    
    # 将第七行,SELINUX=enforcing 改为
    SELINUX=disabled
    # 保存退出后,重启虚拟机即可,千万要注意disabled单词不要写错,不然无法启动系统
  4. 添加快照

    为了避免后续出现问题,在完成上述设置后,为每一台虚拟机都制作快照,留待使用。

Zookeeper集群安装部署

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

除了为Hadoop和HBase提供协调服务外,Zookeeper也被其它许多软件采用作为其分布式状态一致性的依赖,比如Kafka,又或者一些软件项目中,也经常能见到Zookeeper作为一致性协调服务存在。

Zookeeper不论是大数据领域亦或是其它服务器开发领域,涉及到分布式状态一致性的场景,总有它的身影存在。

安装

  1. 【node1上操作】下载Zookeeper安装包,并解压

    # 下载
    wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz
    
    # 确保如下目录存在,不存在就创建
    mkdir -p /export/server
    
    # 解压
    tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /export/server
  2. 【node1上操作】创建软链接

    ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper
  3. 【node1上操作】修改配置文件

    #修改文件名
    mv /export/server/zookeeper/conf/zoo_sample.cfg /export/server/zookeeper/conf/zoo.cfg
    #编辑配置文件
    vim /export/server/zookeeper/conf/zoo.cfg
    
    tickTime=2000
    # zookeeper数据存储目录
    dataDir=/export/server/zookeeper/data
    clientPort=2181
    initLimit=5
    syncLimit=2
    server.1=node1:2888:3888
    server.2=node2:2888:3888
    server.3=node3:2888:3888
  4. 【node1上操作】配置myid

    # 1. 创建Zookeeper的数据目录
    mkdir /export/server/zookeeper/data
    
    # 2. 创建文件,并填入1
    vim /export/server/zookeeper/data/myid
    # 在文件内填入1即可
  5. 【在node2和node3上操作】,创建文件夹

    mkdir -p /export/server
  6. 【node1上操作】将Zookeeper 复制到node2和node3

    cd /export/server
    
    scp -r apache-zookeeper-3.5.9 node2:`pwd`/
    scp -r apache-zookeeper-3.5.9 node3:`pwd`/
  7. 【在node2上操作】

    # 1. 创建软链接
    ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper
    
    # 2. 修改myid文件
    vim /export/server/zookeeper/data/myid
    # 修改内容为2
  8. 【在node3上操作】

    # 1. 创建软链接
    ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper
    
    # 2. 修改myid文件
    vim /export/server/zookeeper/data/myid
    # 修改内容为3
  9. 【在node1、node2、node3上分别执行】启动Zookeeper

    # 启动命令
    /export/server/zookeeper/bin/zkServer.sh start		# 启动Zookeeper
  10. 【在node1、node2、node3上分别执行】检查Zookeeper进程是否启动

    jps
    
    # 结果中找到有:QuorumPeerMain 进程即可
  11. 【node1上操作】验证Zookeeper

    /export/server/zookeeper/bin/zkCli.sh
    
    # 进入到Zookeeper控制台中后,执行
    ls /
    
    # 如无报错即配置成功

至此Zookeeper安装完成

Kafka集群安装部署

简介

Kafka是一款分布式的、去中心化的、高吞吐低延迟、订阅模式的消息队列系统。

同RabbitMQ一样,Kafka也是消息队列。不过RabbitMQ多用于后端系统,因其更加专注于消息的延迟和容错。

Kafka多用于大数据体系,因其更加专注于数据的吞吐能力。

Kafka多数都是运行在分布式(集群化)模式下,所以课程将以3台服务器,来完成Kafka集群的安装部署。

安装

  1. 确保已经跟随前面的视频,安装并部署了JDK和Zookeeper服务

    Kafka的运行依赖JDK环境和Zookeeper请确保已经有了JDK环境和Zookeeper

  2. 【在node1操作】下载并上传Kafka的安装包

    # 下载安装包
    wget http://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz
  3. 【在node1操作】解压

    mkdir -p /export/server			# 此文件夹如果不存在需先创建
    
    # 解压
    tar -zxvf kafka_2.12-2.4.1.tgz -C /export/server/
    
    # 创建软链接
    ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafka
  4. 【在node1操作】修改Kafka目录内的config目录内的server.properties文件

    cd /export/server/kafka/config
    # 指定broker的id
    broker.id=1
    # 指定 kafka的绑定监听的地址
    listeners=PLAINTEXT://node1:9092
    # 指定Kafka数据的位置
    log.dirs=/export/server/kafka/data
    # 指定Zookeeper的三个节点
    zookeeper.connect=node1:2181,node2:2181,node3:2181
  5. 【在node1操作】将node1的kafka复制到node2和node3

    cd /export/server
    
    # 复制到node2同名文件夹
    scp -r kafka_2.12-2.4.1 node2:`pwd`/
    # 复制到node3同名文件夹
    scp -r kafka_2.12-2.4.1 node3:$PWD
  6. 【在node2操作】

    # 创建软链接
    ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafka
    
    cd /export/server/kafka/config
    # 指定broker的id
    broker.id=2
    # 指定 kafka的绑定监听的地址
    listeners=PLAINTEXT://node2:9092
    # 指定Kafka数据的位置
    log.dirs=/export/server/kafka/data
    # 指定Zookeeper的三个节点
    zookeeper.connect=node1:2181,node2:2181,node3:2181
  7. 【在node3操作】

    # 创建软链接
    ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafka
    
    cd /export/server/kafka/config
    # 指定broker的id
    broker.id=3
    # 指定 kafka的绑定监听的地址
    listeners=PLAINTEXT://node3:9092
    # 指定Kafka数据的位置
    log.dirs=/export/server/kafka/data
    # 指定Zookeeper的三个节点
    zookeeper.connect=node1:2181,node2:2181,node3:2181
  8. 启动kafka

    # 请先确保Zookeeper已经启动了
    
    # 方式1:【前台启动】分别在node1、2、3上执行如下语句
    /export/server/kafka/bin/kafka-server-start.sh /export/server/kafka/config/server.properties
    
    # 方式2:【后台启动】分别在node1、2、3上执行如下语句
    nohup /export/server/kafka/bin/kafka-server-start.sh/export/server/kafka/config/server.properties 2>&1 >> /export/server/kafka/kafka-server.log &
  9. 验证Kafka启动

    # 在每一台服务器执行
    jps

测试Kafka能否正常使用

  1. 创建测试主题
# 在node1执行,创建一个主题
/export/server/kafka_2.12-2.4.1/bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 3 --topic test
  1. 运行测试,请在FinalShell中打开2个node1的终端页面
# 打开一个终端页面,启动一个模拟的数据生产者
/export/server/kafka_2.12-2.4.1/bin/kafka-console-producer.sh --broker-list node1:9092 --topic test
# 再打开一个新的终端页面,在启动一个模拟的数据消费者
/export/server/kafka_2.12-2.4.1/bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --topic test --from-beginning