Linux-Shell编程、日志管理、可视化平台

目录

一、shell编程

1、Shell脚本的执行方式

2、Shell的变量

3、设置环境变量

4、位置参数变量

5、预定义变量

6、运算符

7、条件判断

8、流程控制

9、case语句

10、for循环

11、while循环

12、read读取控制台输入

13、函数

14、Shell编程综合案例

二、日志管理

1、系统常用的日志

2、日志管理服务rsyslogd

3、日志查看实例

4、日志管理服务应用实例

5、日志轮替

6、日志轮替原理

7、内存日志

三、Diy-Linux系统

四、内核升级

五、备份与恢复

1、使用dump完成备份

2、使用restore完成恢复

六、webmin与bt宝塔

1、webim基本介绍

2、bt宝塔基本介绍

七、在Linux上安装Mysql

------------------------------------------------------------------------------

一、shell编程

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

1、Shell脚本的执行方式

脚本格式要求

1)脚本以#!/bin/bash开头

2)脚本需要有可执行权限

编写第一个Shell脚本
需求说明:创建一个Shell脚本,输出hello world!
vim hello.sh
#!/bin/bash
echo "hello,world~"

脚本的常用执行方式

方式1:输入脚本的绝对路径或相对路径

说明:首先要赋予helloworld.sh脚本的+x权限,再执行脚本

比如./hello.sh或者使用绝对路径/root/shcode/hello.sh

方式2:sh+脚本

说明:不用赋予脚本+x权限,直接执行即可

比如sh hello.sh,也可以使用绝对路径

2、Shell的变量

Linux Shell中的变量分为,系统变量和用户自定义变量

系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME等

set    #显示当前shell中所有变量

shell 变量的定义

定义变量:变量名=值

撤销变量:unset变量

声明静态变量:readonly变量,注意:静态变量不能unset

案例1:定义变量A
#!/bin/bash
A=100
echo "A=$A"
案例2:撤销变量A
#!/bin/bash
A=100
echo "A=$A"
unset A
echo "A=$A"
案例3:声明静态的变量B=2,不能unset
readonly B=2
echo "B=$B"
unset B    #会报错
#再shell加多行注释
:<<:!
代码体
!

定义变量的规则

①变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)

②等号两侧不能有空格

③变量名称一般习惯为大写,这是一个规范,我们遵守即可

将命令的返回值赋给变量

A='date'      #反引号,运行里面的命令,并把结果返回给变量A
A=$(date)    #等价于反引号

3、设置环境变量

设置玩环境变量之后,再其他的shell脚本里也可以调用,可以理解为全局变量

基本语法

export变量名=变量值    #将shell变量输出为环境变量/全局变量
source 配置文件           #让修改后的配置信息立即生效
echo $变量名              #查询环境变量的值
①在/etc/profile文件中定义TOMCAT_HOME环境变量
vim /etc/profile
export TOMCAT_HOME=/opt/tomcat
source /etc/profile
②查看环境变量TOMCAT_HOME的值
$TOMCAT_HOME
#如此设计即可在另外一个shell程序中使用TOMCAT_HOME
#注意:在输出TOMCAT_HOME环境变量前,需要让其生效source /etc/profile

4、位置参数变量

当我们执行一个shell脚本时,如果希望获取到再命令行中输入的参数信息,就可以使用到位置参数变量

 ./myshel.sh 100 200
#这个就是一个执行shell的命令行,可以在myshell脚本中获取到100和200这两个参数的信息

基本语法

$n(功能描述: n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

$*(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)

S@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

$#(功能描述:这个变量代表命令行中所有参数的个数)

#编写一个shell脚本 my.sh ,在脚本中获取到命令行的各个参数信息
echo "命令本身=$0   第一个参数=$1    第二个参数=$2"
echo "所有的参数=$*"
echo "所有的参数=$@"
echo "参数的个数=$#"

5、预定义变量

是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

$$     #当前进程的进程号(PID) 
$!      #后台运行的最后一个进程的进程号(PID))
$?     #最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确
#!/bin/bash
echo "当前执行的进程id:$$"
/root/shcode/myshell.sh &     #&表示以后台的方式运行一个脚本,并获取他的进程号
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"

6、运算符

S((运算式))
$[运算式]
expr m + n
expr *,/,%    乘,除,取余
#注意expr运算符间要有空格,如果希望将expr的结果赋给某个变量,使用``
案例1:计算(2+3)X4的值
#方式一
echo $(((2+3)*4))
#方式二
echo $[(2+3)*4]
#方式三
RES=`expr 2 + 3`
RESULT=`expr $RES * 4`
echo $RESULT

案例2:请求出命令行的两个参数[整数]的和20 50
#!/bin/bash
SUM=$[$1+$2]
echo "sum=$SUM"

7、条件判断

[ condition ]    #注意condition前后都有空格
#非空返回true,可使用$?验证(0为true,>1为 false)
[ hspEdu ]   #返回true
[ ]          #返回false
[ condition ] && echo OK ll echo notok      #条件满足,执行后面的语句
&&    #
||    #

判断语句

1)=:字符串比较

2)两个整数的比较

  -lt:小于

  -le:小于等于(little equal)

  -eq:等于

  -gt:大于

  -ge:大于等于

  -ne:不等于

3)按照文件权限进行判断

  -r:有读的权限

  -w:有写的权限

  -x:有执行的权限

4)按照文件类型进行判断

  -f:文件存在并且是一个常规的文件

  -e:文件存在

  -d:文件存在并是一个目录

#案例1: "ok"是否等于"ok"判断语句
vim csae.sh
if [ "ok"="ok" ]
then
        echo "equal"
fi
chmod u+x case.sh
./case.sh
#案例2:23是否大于等于22判断语句
vim csae.sh
if [ 23 -gt 22 ]
then
        echo "大于"
fi
chmod u+x case.sh
./case.sh
#案例3:/root/shcode/aaa.txt目录中的文件是否存在判断语句
vim csae.sh
if [ -f /root/shcodel/aaa.txt ]
then
        echo "存在"
fi
chmod u+x case.sh
./case.sh

8、流程控制

#单分支
if [ 条件判断式 ]
then
代码
fi
#多分支
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi
#注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格
#案例:请编写一个shell程序,如果输入的参数,大于等于60,则输出“及格了",如果小于60,则输出"不及格"if [ $1 -lt 60 ]
then
        echo "不及格"
elif [ $1 -gt 60 ]
then
        echo "及格了"
fi

9、case语句

case $变量名 in
"值1")
;;
如果变量的值等于值1,则执行程序1
"值2")
;;
如果变量的值等于值2,则执行程序2
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
#案例:当命令行参数是1时,输出"周一",是2时,就输出"周二",其它情况输出"other"
case $1 in
"1")
echo "周一"
;;
"2")
echo ""周二”
;;
*)
echo "other"
;;
esac

10、for循环

基本语法1

for 变量 in 值1 值2 值3...
do
程序/代码
done
#案例:打印命令行输入的参数「这里可以看出$*和 $@的区别]
for i in "$*"
do
echo "*=$i"
done
for i in "$@"
do
echo "@=$i"
done

基本语法2

for (( 初始值;循环控制条件;变量变化 ))
do
程序/代码
done
#案例:从1加到100的值输出显示
SUM=0
for (( i=1; i<=$1; i++ ))
do
        SUM=$[$SUM+$i]
done
echo "sum=$SUM"

11、while循环

while [ 条件判断式 ]
do
程序/代码
done
注意: while 和 [ 之间有空格,条件判断式 和 [ 直接按也有空格
#案例:从命令行输入一个数n,统计从1+……+n的值是多少?
NUM=1
SUM=0
while [ $NUM -le  $1 ]
do
        SUM=$[$SUM+$NUM]
        NUM=$[$NUM+1]
done
echo "result=$SUM"

12、read读取控制台输入

read (选项) (参数)
选项:
-p     #指定读取值时的提示符
-t      #指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
#案例1:读取控制台输入一个NUM1值
read -p "请输入NUM1=" NUM1     #将用户输入的值赋给NUM1
echo "你输入的NUM1=$NUM1"
#案例2:读取控制台输入一个NUM2值,在10秒内输入
read -t 10 -p "请输入NUM2=" NUM2
echo "你输入的NUM2=$NUM2"

上图中第4行为超过十秒没输入内容的结果

13、函数

shell编程和其它编程语言一样,有系统函数,也可以自定义函数

系统函数

basename的基本语法

basename [pathname] [suffix]    #返回完整路径最后人的部分,常用于获取文件名
basename [string] [suffix]    #功能描述: basename命令会删掉所有的前缀包括最后一个(/)字符,然后将字符串显示出来
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
#案例1:请返回/home/aaa/test.txt的"test.txt"部分
basename /home/aaa/test.txt
#案例2:请返回/home/aaa/test.txt的"test"部分
basename /home/aaa/test.txt .txt

dirname基本语法

dirname用于返回完整路径最后/的前面的部分,常用于返回路径部分
dimame 文件绝对路径      #从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
#案例1:请返回/home/aaa/test.txt 的/home/aaa
dirname /home/aaa/test.txt

自定义函数

基本语法

[ function ] funname[()]
{
Action;
[return int;]
}
调用直接写函数名:fiunname [值]
#案例1:计算输入两个参数的和(动态的获取),getsum
function getsum()
{
        SUM=$[$N1+$N2]
        echo "sum=$SUM"
}
read -p "请输入第一个数字:" N1
read -p "请输入第二个数字:" N2
getsum $N1 $N2

14、Shell编程综合案例

需求分析

1、每天凌晨2:30备份数据库hspedu到/data/backup/db

2、备份开始和备份结束能够给出相应的提示信息

3、备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2021-03-12_230201.tar.gz

4、在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。

#!/bin/bash
#设置备份目录
BACKUP=/data/backup/db
#处理当前时间
DATETIME=`date +%Y-%m-%d_%H%M%S`
echo $DATETIME
#设置数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=root
#备份的数据库名
DATABASE=hk9527
#创建备份目录,如果不存在此目录,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -P${db_pw} --host=${HOST} -q -R --datebase ${DATEBASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf ${DATETIME}.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf{};
echo "备份数据库${BACKUP}成功。"  

二、日志管理

1)日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。

2)日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。

3)可以这样理解:日志是用来记录重大事件的工具

/var/log/目录就是系统日志文件的保存位置

1、系统常用的日志

#应用案例
使用root 用户通过xshell6登陆,第一次使用错误的密码,第二次使用正确的密码登录成功看看在日志文件/var/log/secure里有没有记录相关信息

2、日志管理服务rsyslogd

CentOS7.6日志服务是rsyslogd ,CentOS6.x日志服务是syslogd,rsyslogd功能更强大。rsyslogd 的使用、日志文件的格式,和 syslogd服务兼容的。

ps -aux | grep "rsyslog" l grep -v "grep"    #查询Linux中的rsyslogd_服务是否启动
systemctl list-unit-files | grep rsyslog      #查询rsyslogd服务的自启动状态
| grep -v "grep"   #-v表示反向查找,即除了结果grep之外全部显示出来

配置文件:/etc/rsyslog.conf

编辑文件时的格式为:

**                      存放日志文件

其中第一个*代表日志类型,第二个*代表日志级别

 日志类型分为:

auth        #pam产生的日志
authpriv    #ssh、ftp等登录信息的验证信息
corn        #时间任务相关
kern        #内核
lpr         #打印
mail        #邮件
mark(syslog)-rsyslog    #服务内部的信息,时间标识
news        #新闻组
user        #用户程序产生的相关信息
uucp        #unix to nuix copy主机之间相关的通信
local 1-7   #自定义的日志设备

日志级别分为:

debug     #有调试信息的,日志通信最多
info      #一般信息日志,最常用
notice    #最具有重要性的普通条件的信息
warning   #警告级别
err       #错误级别,阻止某个功能或者模块不能正常工作的信息
crit      #严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert     #需要立刻修改的信息
emerg     #内核崩溃等重要信息
none      #什么都不记录
注意:从上到下,级别从低到高,记录信息越来越少

3、日志查看实例

由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列

①事件产生的时间

②产生事件的服务器的主机名

③产生事件的服务名或程序名

④事件的具体信息

查看一下/var/log/secure日志,这个日志中记录的是用户验证和授权方面的信息来分析如何查看

4、日志管理服务应用实例

在/etc/rsyslog.conf 中添加一个日志文件/var/log/zrh.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存,演示重启,登录的情况,看看是否有日志保存
<<root@HK9527 ~>># touch /var/log/zrh.log
<<root@HK9527 ~>># vim /etc/rsyslog.conf

 然后进行重启、登录操作,查看日志情况

5、日志轮替

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除

日志轮替文件命名

1)centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate.conf 配置文件中 “daeext”参数

2)如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀

例如“secure-20201010”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。

3)如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。

当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。

当第二次进行日志轮替时,“secure.1"会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建"secure”日志,用来保存新的日志,以此类推。

logrotate配置文件

/etc/logrotate.conf为logrotate的全局配置文件
# rotate log files weekly:每周对日志文件进行一次轮替
weekly
#keep 4 weeks worth of backlogs:共保存4份日志文件,当建立新的日志文件时,旧的将会被删除
rotate 4
#create new (empty) log files after rotating old ones:创建新的空的日志文件,在日志轮替后
create
#use date as a suffix of the rotated file:使用日期作为日志轮替文件的后缀
dateext
#uncomment this if you want your log files compressed:日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩
#compress
#RPM packages drop log rotation information into thisdirectory
include /etc/logrotate.d    #包含/etc/logrotate.d目录中所有的子配置文件。也就是说会把这个目录中所有子配置文件读取进来.
#下面是单独设置,优先级更高
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly   #每月对日志文件进行一次轮替
create 0664 root utmp   #建立的新日志文件,权限是0664,所有者是root ,所属组是_utmp 组
minsize 1M      #日志文件最小轮替大小是1MB。也就是日志一定要超过lMB才会轮替,否则就算时间达到一个月,也不进行日志转储
rotate 1   #仅保留一个日志备份。也就是只有wtmp和wtmp.1日志保留而已
}
/var/log/btmp {
missingok #如果日志不存在,则忽略该日志的警告信息
monthly
create 0600 root utmp
rotate 1
}
参数           #参数说明
daily         #日志的轮替周期是每天
weekly        #日志的轮替周期是每周
monthly       #日志的轮替周期是每月
rotate 数字    #保留的日志文件的个数。0指没有备份
compress      #日志轮替时,旧的日志进行压缩
create mode owner group    #建立新日志,同时指定新日志的权限与所有者和所属组。
mail address         #当日志轮替时,输出内容通过邮件发送到指定的邮件地址
missingok            #如果日志不存在,则忽略该日志的警告信息
notifempty           #如果日志为空文件,则不进行日志轮替
minsize 大小                  #日志轮替的最小值,也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替
size 大小                     #日志只有大于指定大小才进行日志轮替,而不是按照时间轮替
dateext                      #使用日期作为日志轮替文件的后缀
sharedscripts                #在此关键字之后的脚本只执行一次
prerotate/endscript        #在日志轮替之前执行脚本命令
postrotate/endscript       #在日志轮替之后执行脚本命令

把自己的日志加入日志轮替

1)第一种方法是直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略

2)第二种方法是在/etc/logrotate.d目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。

3)推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入/etc/logrotate.conf配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。

#例:在/etc/logrotate.conf进行配置、或者直接在letc/logroate.d下创建文件zrhlog编写如下内容
cd /etc/logrotate.conf
touchu zrhlog
vim zrhlog
/var/log/zrhlog
{
missingok
daily
rotate 7
}
:wq

6、日志轮替原理

日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。

在/etc/cron.daily/目录,就会发现这个目录中是有logrotate 文件(可执行),logrotate 通过这个文件依赖定时任务执行的。

7、内存日志

有一部分日志是在内存中的,是实时变化的,是与当前系统相关的日志,内存日志重启后会被清空

常用的指令
journalctl          #查看全部
journalctl -n 3     #查看最新3条
joumalctl--since 19:00 --until 19:10:10  #查看起始时间到结束时间的日志可加日期
journaletl -p err        #报错日志
journalctl -o verbose    #日志详细内容
journalctl_PID=1245 _COMM=sshd  #查看包含这些参数的日志(在详细日志查看)或者 journalctl | grep sshd
#注意: journalctl查看的是内存日志,重启清空
演示案例:
在内存日志中查看看用户登录清空,重启系统,再次查询,看看日志有什么变化没有
#journalctl | grep sshd
或者
#journalctl _COMM=sshd

三、Diy-Linux系统

首先,需要向现有的Linux系统添加一块大小为20G的硬盘,注意将虚拟磁盘存储为单个文件,并且将磁盘名字需要记住

这里的磁盘名字设置为CentOS-7.6-diy.vmdk

 然后进入到现有Linux系统进行系统设置

<<root@HK9527 ~>># lsblk
<<root@HK9527 ~>># fdisk /dev/sdb
命令(输入 m 获取帮助):n
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+500M
分区 1 已设置为 Linux 类型,大小设为 500 MiB
命令(输入 m 获取帮助):n
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (1026048-41943039,默认为 1026048):
将使用默认值 1026048
Last 扇区, +扇区 or +size{K,M,G} (1026048-41943039,默认为 41943039):
将使用默认值 41943039
分区 2 已设置为 Linux 类型,大小设为 19.5 GiB
命令(输入 m 获取帮助):w
<<root@HK9527 ~>># mkfs -t ext4 /dev/sdb1
<<root@HK9527 ~>># mkfs -t ext4 /dev/sdb2
<<root@HK9527 ~>># lsblk -f
NAME   FSTYPE  LABEL           UUID                                 MOUNTPOINT
sda                                                                 
├─sda1 ext4                    6a3be652-f197-44e3-bfe6-55ee2d541d53 /boot
├─sda2 swap                    7a56735e-9dfa-4f4d-a03a-45d64d7a111c [SWAP]
└─sda3 ext4                    389b48a4-a970-4b94-aa6b-b209d9c5358d /
sdb                                                                 
├─sdb1 ext4                    28754a89-4191-4052-a3b4-df9d1c04058c 
└─sdb2 ext4                    7e095501-0466-4ed9-81d6-3a5c242180ce            
<<root@HK9527 ~>># mkdir -p /mnt/boot /mnt/sysroot
<<root@HK9527 ~>># mount /dev/sdb1 /mnt/boot
<<root@HK9527 ~>># mount /dev/sdb2 /mnt/sysroot
<<root@HK9527 ~>># grub2-install --root-directory=/mnt /dev/sdb
<<root@HK9527 ~>># hexdump -C -n 512 /dev/sdb
<<root@HK9527 ~>># cp -rf /boot/* /mnt/boot/
<<root@HK9527 ~>># vim /mnt/boot/grub2/grub.cfg
进入到cfg配置文件之后,可利用vim的底线命令模式进行批量替换
:g/6a3be652-f197-44e3-bfe6-55ee2d541d53/s//28754a89-4191-4052-a3b4-df9d1c04058/g
:g/389b48a4-a970-4b94-aa6b-b209d9c5358d/s//7e095501-0466-4ed9-81d6-3a5c242180ce/g
然后在"linux16"关键词所在行之后添加 selinux=0 init=/bin/bash
<<root@HK9527 ~>># mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}
<<root@HK9527 ~>># cp /lib64/*.* /mnt/sysroot/lib64/
<<root@HK9527 ~>># cp /bin/bash /mnt/sysroot/bin/
<<root@HK9527 ~>># init 0
#关机之后,拷贝新的命令
<<root@HK9527 ~>># mount /dev/sdb2 /mnt/sysroot
<<root@HK9527 ~>># cp /bin/ls /mnt/sysroot/bin/
<<root@HK9527 ~>># cp /bin/systemctl  /mnt/sysroot/bin/
<<root@HK9527 ~>># cp /sbin/reboot /mnt/sysroot/sbin/
<<root@HK9527 ~>># init 0

最后将磁盘挂载到一个新的虚拟机上,开机即可

四、内核升级

内核地址: https://www.kernel.org/

下载&解压最新版的内核
#wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.8.16.tar.gz
#tar -zxvf linux-5.8.16.tar.gz

升级内核不是说自己想升级到那个版本的内核就升级对的,系统会根据自身的情况去判断此设备可以升级到哪些内核

升级内核步骤

uname -a                 #查看当前的内核版本
yum info kernel -q       #检测内核版本,显示可以升级的内核
yum update kernel        #升级内核
yum list kernel -q       #查看已经安装的内核

 升级之后在Linux启动界面可以选择相应的内核进入系统

更换内核重启后,其他配置都不会改变,只是内核改变了

五、备份与恢复

实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失。所以我们可以使用备份和恢复技术

linux的备份和恢复很简单,有两种方式:

1、把需要的文件(或者分区)用TAR打包就行,下次需要恢复的时候,再解压开覆盖即可

2、使用 dump 和 restore 命令

如果linux上没有dump和restore指令,需要先安装
#yum -y install dump
#yum -y install restore

1、使用dump完成备份

dump支持分卷和增量备份〈所谓增量备份是指备份上次备份后修改/增加过的文件,也称差异备份)

#语法说明
dump [-cu] [-123456789] [-f<备份后文件名>] [-T<日期>] [目录或文件系统]
dump -w/w

#-c:创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头
-0123456789:备份的层级,参数c具体的值,0为最完整备份,会备份所有文件。若指定0以上的层级,则备份至上一次备份以来修改或新增的文件,到9后,可以再次轮替.
#-f<备份后文件名>:指定备份后文件名 #-j:调用bzlib库压缩备份文件,也就是将备份后的文件压缩成bz2格式,让文件更小 #-T<日期>:指定开始备份的时间与日期 #-u:备份完毕后,在/etc/dumpdares中记录备份的文件系统,层级,日期与时间等 #-t:指定文件名,若该文件已存在备份文件中,则列出名称 #-W:显示需要备份的文件及其最后一次备份的层级,时间,日期 #-w :与-W类似,但仅显示需要备份的文件
#应用案例1:将/boot 分区所有内容备份到/opt/boot/bak0.bz2文件中,备份层级为"0"
dump -0uj -f /opt/boot.bak0.bz2 /boot
#应用案例2:在/boot目录下增加新文件,备份层级为“1”(只备份上次使用层级"0"备份后发生过改变的数据),注意比较看看这次生成的备份文件boot.bak1有多大
dump -1uj -f /opt/boot.bak1.bz2 /boot
通过dump命令在配合crontab 可以实现无人值守备份

dump -W    #显示需要备份的文件及其最后一次备份的层级,时间,日期

cat /etc/dumpdates    #查看备份时间文件

dump备份文件或者目录

前面我们在备份分区时,是可以支持增量备份的,如果备份文件或者目录,不再支持增量备份,即只能使用0级别备份
#案例:使用dump备份/etc整个目录
dump -0j -f /opt/etc.bak.bz2 /etc/
#下面这条语句会报错,提示DUMP: Only level 0 dumps are allowed on a subdirectory
dump-1j -f /opt/etc.bak.bz2 /etc/

如果是重要的备份文件,比如数据区,建议将文件上传到其它服务器保存,确保数据安全性

2、使用restore完成恢复

restore命令用来恢复已备份的文件,可以从dump 生成的备份文件中恢复原文件

restore [模式选项] [选项]
#说明下面四个模式,不能混用,在一次命令中,只能指定一种。
-C:使用对比模式,将备份的文件与已存在的文件相互对比
-i:使用交互模式,在进行还原操作时,restors指令将依序询问用户
-r:进行还原模式
-t:查看模式,看备份文件有哪些文件
选项
-f<备份设备>:从指定的文件中读取备份数据,进行还原操作

应用案例1:restore命令比较模式,比较备份文件和原文件的区别

<<root@HK9527 boot>># mv case.txt case01.txt
<<root@HK9527 boot>># restore -C -f /opt/back1.ba2 
Label: none
filesys = /boot
restore: unable to stat ./case.txt: No such file or directory
Some files were modified!  1 compare errors

<<root@HK9527 boot>># mv case01.txt case.txt
<<root@HK9527 boot>># restore -C -f /opt/back1.ba2 
Label: none
filesys = /boot

 Some files were modified!  1 compare errors 表示有1个文件不同

应用案例2:restore命令查看模式,看备份文件有哪些数据/文件

restore -t -f /opt/back1.ba2 

应用案例3:restore命令还原模式,注意细节:如果你有增量备份,需要把增量备份文件也进行恢复,有几个增量备份文件,就要恢复几个,按顺序来恢复即可。

mkdir /opt/boottmpcd /opt/boottmp
restore -r -f /opt/back0.bz2    #恢复到第1次完全备份状态
restore -r -f /opt/back1.bz2    #恢复到第2次增量备份状态

应用案例4:restore命令恢复备份的文件,或者整个目录的文件

<<root@HK9527 boot>># dump -0j -f /opt/etcback.bz2 /etc/
<<root@HK9527 boot>># mkdir etcback
<<root@HK9527 boot>># cd etcback/
<<root@HK9527 etcback>># restore -r -f /opt/etcback.bz2 
<<root@HK9527 etcback>># cd etc/
<<root@HK9527 etc>># ls

六、webmin与bt宝塔

1、webim基本介绍

Webmin是功能强大的基于Web的Unix linux系统管理工具

管理员通过浏览器访向Webmin的各种管理功能并完成相应的管理操作

除了各版本的 linux以外还可用于:AIX、HPUX、Solaris、 Unixware、lrix和FreeBSD等系统

#①下载地址
http:/ldownload.webmin.com/download/yum/ ,用下载工具下载即可
也可以使用
wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm
#②安装:rpm -ivh webmin-1.700-1.noarch.rpm
#③重置密码 /usr/libexec/webmin/changepass.pl /etc/webmin root hk9527
#root是webmin的用户名,不是OS的,这里就是把 webmin 的root 用户密码改成了hk9527
#④修改webmin服务的端口号(默认是10000出于安全目的)
vim /etc/webmin/miniserv.conf #修改端口
将port=10000修改为其他端口号,如port=66666
#⑤重启webmin
/etc/webmin/restart #重启
/etc/webmin/start   #启动
/etc/webmin/stop    #停止
#⑥防火墙放开6666端口
firewall-cmd --zone=public --add-port=6666/tcp -permanent    #配置防火墙开放6666端口
firewall-cmd --reload                                        #更新防火墙配置
firewall-cmd --zone=public --list-ports                      #查看已经开放的端口号
#⑦登录webmin
http://ip:6666可以访问了
用root账号和重置的新密码test

修改端口时修改以下红色框中的内容

登录时使用root与修改后的密码登录

 

对webmin进行语言配置

2、bt宝塔基本介绍

bt宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/IAVA等多项服务器管理功能。

#①安装
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
#②安装成功后控制台会显示登录地址,账户密码,复制浏览器打开登录

访问不了的话就要去防火墙开放[8888]端口

在宝塔上安装mysql数据库

七、在Linux上安装Mysql

#一——-------安装Mysql依赖【perl net-too1s 】
yum install perl net-tools -y
#一——-------卸载mariadb
rpm -qa l grep mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.e17_5.x86_64
#-—--------安装mysq1
tar -xvf mysq1-8.0.18-1.e17.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-8.0.18-1.e17.x86_64.rpm
rpm -ivh mysq1-community-libs-8.0.18-1.e17.x86_64.rpm
rpm -ivh mysq1-community-client-8.0.18-1.e17.x86_64 .rpmr
pm -ivh mysq1-community-server-8.0.18-1.e17.x86_64.rpm
---------启动mysq1
systemct1 start mysqld
#-—--------查找密码并登陆mysq1
cat /var/log/mysqld.log l grep password
mysql -u root -p
#----------修改Mysql密码8.0版本输入命令:
set global validate_password.po1icy=LOW;
set global validate_password.length=6;
#更改加密方式
ALTER USER 'root' @ 'localhost’ IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;#更新用户密码
ALTER USER 'root' @ 'loca1host' IDENTIFIED WITH mysql_native_password BY '123456‘
#刷新权限
FLUSH PRIVILEGES;
#—---------修改Mysq1密码5.7版本输入命令:
set global validate_password_policy=LOW;
set global validate_password_length=6;
alter user root@1ocalhost identified by '123456';
#-―--------修改Mysql链接地址
use mysql;
update user set host='%' where user = 'root ';
commit;
exit;
systemctl restart mysqld;
#----------使用Navicat连接Mysql

找回mysql数据库的root用户密码

vim /etc/my.cnf
skip-grant-tables    #在文本最后加入这句话,这句话是跳过权限列表的意思
systemcrl restart mysqld
mysql -u root -p  然后输入空密码即可进入数据库
show databases;
use mysql;
show tables;
desc user;
mysql> update user set authentication_string=password("hk9527") where user='root';
mysql> flush privileges;
mysql> exit

 八、tcpdump

tcpdump:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具

tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析

它支持针对网络层、协议、主机、网络或端口的过滤

tcpdump -i ens33    #监视指定网络接口的数据包
如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是ens33
监视指定主机的数据包,也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包
tcpdump host 210.27.48.1 
#使用tcpdump监听本机,将来自ip 192.168.200.1,tcp端口为22的数据,保存输出到tcpdump.log ,用做将来数据分析(美团)
tcpdump -i ens33 host 192.168.200.1 and port 22 >> /tmp*tcpdump.log
原文地址:https://www.cnblogs.com/zrh918/p/15468006.html