zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    每天一点点java---继承exception类来实现自己的异常类
    由Java代码运行shell命令/脚本
    虚拟现实及增强现实(眼镜或头盔)现状与未来-基本介绍
    Struts2大约Action系统培训6大约action的接受三个参数的方法
    main真正的形状函数
    为了交易-存储过程
    Oracle 数据库 JOB 失败后解密法重试
    [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
    十依据一个有用的算法来找到最小(最大)的k的数量-线性搜索算法
    Maven配置
  • 原文地址:https://www.cnblogs.com/zrh918/p/15468006.html
Copyright © 2011-2022 走看看