• The Sixth Week(Lucklyzpp)


          expect脚本示例,简单在这记录下下面会用到的一些命令

      set timeout         #设置超时时间,默认超时时间10s.

      spawn shell command   # spawn后面接的是我们要执行的shell命令

      expect "hi"      #匹配输出内容“hi”

      {send “hello ”}      # 匹配到内容''hi"后输出“hello”,“ ”是代表是返回字符。

      interact           #执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为[expect eof]

    1 ,编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。

    [14:39:22 root@lucklyzpp8 data]#cat login_expect2.exp 
    #!/usr/bin/expect 
    set ip [lindex $argv 0]  
    set port [lindex $argv 1] 
    set passwd "root123"
    spawn ssh $ip -p$port  
    expect {
        "yes/no" {send "yes
    ";exp_continue}
        "password:" {send "$passwd
    "}
    }
    interact
    
    [14:37:42 root@lucklyzpp8 data]#./login_expect2.exp 192.168.33.128 22
    spawn ssh 192.168.33.128 -p22
    root@192.168.33.128's password: 
    Last login: Mon Oct 18 22:36:26 2021 from 192.168.33.131
    [22:38:50 root@lucklyzpp7 ~]#
    [22:58:50 root@lucklyzpp7 ~]#exit
    [14:59:29 root@lucklyzpp8 data]#cat login_expect.exp 
    #!/usr/bin/expect
    spawn ssh root@192.168.33.128
    expect {
    "*(yes/no*" { send "yes
    ";exp_continue }
    "*password:*" { send "root123
    ";exp_continue }
    }
    interact
    [14:58:15 root@lucklyzpp8 data]#./login_expect.exp 
    [22:58:37 root@lucklyzpp7 ~]#ls
    anaconda-ks.cfg  data  redis-6.2.5.tar.gz
    [22:58:38 root@lucklyzpp7 ~]#hostname
    lucklyzpp7
    [15:16:06 root@lucklyzpp8 data]#cat relogin.sh 
    #!/bin/bash
    Address=192.168.33.128
    User=root
    Passwd=root123
    expect <<EOF
    spawn ssh $User@$Address
    expect {
    "*(yes/no*" { send "yes
    ";exp_continue  }
    "*password:*" { send "root123
    ";exp_continue  }
    }
    interact;
    EOF
    [15:16:11 root@lucklyzpp8 data]#bash relogin.sh 
    spawn ssh root@192.168.33.128
    root@192.168.33.128's password: 
    Last login: Mon Oct 18 23:15:31 2021 from 192.168.33.131
    [23:16:14 root@lucklyzpp7 ~]#

    2、生成10个随机数保存于数组中,并找出其最大值和最小值

    [15:19:51 root@lucklyzpp8 data]#bash -n zu.sh 
    [15:19:58 root@lucklyzpp8 data]#bash zu.sh 
    “All numbers are 9226 11048 23498 13201 31271 17642 31355 16391 13548 30543”
    Max is 31355
    Min is 9226
    [15:20:04 root@lucklyzpp8 data]#cat zu.sh 
    #!/bin/bash 
    declare -i min max 
    declare -a nums 
    for ((i=0;i<10;i++));do 
        nums[$i]=$RANDOM 
        [ $i -eq 0 ] && min=${nums[$i]} && max=${nums[$i]}&& continue 
        [ ${nums[$i]} -gt $max ] && max=${nums[$i]} 
        [ ${nums[$i]} -lt $min ] && min=${nums[$i]} 
    done 
    echo “All numbers are ${nums[*]}” 
    echo Max is $max 
    echo Min is $min

    3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

    [15:27:39 root@lucklyzpp8 data]#cat mun.sh 
    #!/bin/bash
    read -p "请输入数值个数:" COUNT
    declare -a nums
    for ((i=0;i<$COUNT;i++));do
        num[$i]=$RANDOM
    done
    echo "The initial array:"
    echo ${num[@]}
    
    declare -i n=$COUNT
    for (( i=0; i<n-1; i++ ));do
        for (( j=0; j<n-1-i; j++ ));do
            let x=$j+1
            if (( ${num[$j]} < ${num[$x]} ));then
     #从大到小排列
               tmp=${num[$x]}
                num[$x]=${num[$j]}
                num[$j]=$tmp
            fi
        done
    done
    echo "After sort:"
    echo ${num[*]}
    echo "the max integer is $num,the min integer is ${num[$((n-1))]}"
    [15:29:04 root@lucklyzpp8 data]#bash mun.sh 
    请输入数值个数:9
    The initial array:
    29719 12356 24301 15770 853 20815 9794 20667 13857
    After sort:
    29719 24301 20815 20667 15770 13857 12356 9794 853
    the max integer is 29719,the min integer is 853

    4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义

    [15:31:48 root@lucklyzpp8 data]#w
     15:35:23 up  1:10,  1 user,  load average: 0.00, 0.00, 0.00
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.33.2     14:25    0.00s  0.58s  0.00s w
    [15:35:23 root@lucklyzpp8 data]#cat /proc/cpuinfo 
    processor    : 0
    vendor_id    : GenuineIntel
    cpu family    : 6
    model        : 142
    model name    : Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
    stepping    : 9
    microcode    : 0x62
    .............
    [15:35:49 root@lucklyzpp8 data]#uptime 
     15:35:54 up  1:11,  1 user,  load average: 0.00, 0.00, 0.00
    ——————————————————————————————
    什么原因导致cpu不正常了,系统的瓶颈在哪里,通过vmstat查看
    r:有多少个进程处于run状态;1个cpu处理10个进程
    b: 阻塞的进程;被网络,硬盘显示处理等待状态,卡死了,block;有多少个进程在等待
    swapd:当数字不停变换,表示内存不够;如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
    si:有多少kb数据从swap进入到内存中
    so:有多少从内存出来的到swap
    bi:从磁盘读,判断磁盘读   
    bo:从磁盘写,判断磁盘写
    us:用户占用cpu,比如mysql,http,表示用户态的资源,长时间大于50,表示资源不够,一共是100
    sy:系统态
    id:空闲的
    wa:等待cpu的百分百,有多少进程在等待,这列很大表示cpu不够用
    ——————————————————
    [15:35:54 root@lucklyzpp8 data]#vmstat
    进程                内存            交换分区     磁盘IO   系统        cpu
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     2  0      0 234164   3260 225864    0    0    47    10   74  163  1  1 98  0  0
    [15:36:13 root@lucklyzpp8 data]#top | head -n9
    top - 15:36:54 up  1:12,  1 user,  load average: 0.22, 0.06, 0.02
    Tasks: 136 total,   1 running, 135 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  5.6 us,  5.6 sy,  0.0 ni, 77.8 id, 11.1 wa,  0.0 hi,  0.0 si,  0.0 st
    MiB Mem :    699.5 total,    227.9 free,    247.8 used,    223.8 buff/cache
    MiB Swap:   5120.0 total,   5120.0 free,      0.0 used.    334.9 avail Mem 
    
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                 
       1594 root      20   0  274288   4424   3800 R   6.7   0.6   0:00.01 top                     
          1 root      20   0  176752  10784   8348 S   0.0   1.5   0:02.64 systemd

    top - 15:45:43 up  1:21,  1 user,  load average: 0.07, 0.05, 0.01
    15:45:43:系统当前时间 
    1 users:当前1用户在线 
    
    Tasks: 135 total,   1 running, 134 sleeping,   0 stopped,   0 zombie
    135 total:当前有135个任务 
    1 running:1个任务正在运行 
    134 sleeping:134个进程处于睡眠状态 
    0 stopped:停止的进程数 
    0 zombie:僵死的进程数
    
    %Cpu(s):  0.0 us,  6.2 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    us:用户态进程占用CPU时间百分比 
    sy:内核占用CPU时间百分比 
    ni:renice值为负的任务的用户态进程的CPU时间百分比。nice是优先级的意思 

    id:空闲CPU时间百分比
    wa:等待I/O的CPU时间百分比
    hi:CPU硬中断时间百分比
    si:CPU软中断时间百分比

    sar命令介绍。

    监控系统状态
    [15:45:44 root@lucklyzpp8 data]#yum install -y sysstat
    15:57:18 root@lucklyzpp8 data]#sar -n DEV 1
    Linux 4.18.0-193.el8.x86_64 (lucklyzpp8)     2021年10月18日     _x86_64_    (1 CPU)
    15时58分28秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
    15时58分29秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00  查看系统负载
    [15:58:39 root@lucklyzpp8 data]#sar -q 1 5
    Linux 4.18.0-193.el8.x86_64 (lucklyzpp8)     2021年10月18日     _x86_64_    (1 CPU)
    15时59分51秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
    15时59分52秒         0       361      0.00      0.04      0.01         0
    15时59分53秒         0       361      0.00      0.04      0.01         0
    15时59分54秒         0       361      0.00      0.04      0.01         0
    15时59分55秒         0       361      0.00      0.04      0.01         0
    15时59分56秒         0       361      0.00      0.04      0.01         0
    平均时间:         0       361      0.00      0.04      0.01         0
    监控cpu
    [15:59:56 root@lucklyzpp8 data]#sar -u 1 3
    Linux 4.18.0-193.el8.x86_64 (lucklyzpp8)     2021年10月18日     _x86_64_    (1 CPU)
    16时00分34秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
    16时00分35秒     all      0.00      0.00      0.00      0.00      0.00    100.00
    16时00分36秒     all      0.00      0.00      1.98      0.00      0.00     98.02
    16时00分37秒     all      0.00      0.00      0.00      0.00      0.00    100.00
    平均时间:     all      0.00      0.00      0.67      0.00      0.00     99.33
    
    IO传输速率的监控
    [16:00:37 root@lucklyzpp8 data]#sar -b 3 3
    Linux 4.18.0-193.el8.x86_64 (lucklyzpp8)     2021年10月18日     _x86_64_    (1 CPU)
    16时01分34秒       tps      rtps      wtps   bread/s   bwrtn/s
    16时01分37秒      0.00      0.00      0.00      0.00      0.00
    16时01分40秒      0.00      0.00      0.00      0.00      0.00
    16时01分43秒      0.00      0.00      0.00      0.00      0.00
    
     tps:每秒钟物理设备的 I/O 传输总量。
     rtps:每秒钟从物理设备读入的数据总量。
     wtps:每秒钟向物理设备写入的数据总量。
     bread/s:每秒钟从物理设备读入的数据量,单位为 块/s。
     bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s。

    5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"

    [16:26:20 root@lucklyzpp8 data]#bash ping.sh 
    192.168.33.2 lived,Successed
    192.168.33.1 lived,Successed
    192.168.33.131 lived,Successed
    192.168.33.127 lived,Successed
    192.168.33.128 lived,Successed
    192.168.33.222 lived,Successed
    [16:26:49 root@lucklyzpp8 data]#cat ping.sh 
    #!/bin/bash
    #
    Id=192.168.33.
    for HostId in {1..254};do
    {
        if /bin/ping -c 1 -W 1 $Id$HostId > /dev/null;then
            echo "$Id$HostId lived,Successed"
        else
            echo "$Id$HostId not lived,Failed"
        fi
    
    } &
    done
    wait
    
    [16:26:53 root@lucklyzpp8 data]#bash ping1.sh 
    2 lived,Successed
    1 lived,Successed
    131 lived,Successed
    128 lived,Successed
    127 lived,Successed
    222 lived,Successed
    [16:28:01 root@lucklyzpp8 data]#cat ping1.sh 
    #!/bin/bash
    #
    Id=192.168.33.
    declare -i HostId=1
    while [ $HostId -le 254 ];do
    {       ping -c 1 -W 1 $Id$HostId > /dev/null
            if [ $? -eq 0 ];then
                    echo "$NetId$HostId lived,Successed"
            else
                    echo "$NetId$HostId no lived,Failed"
        fi
    } &
        let HostId++
    done
    wait

    6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间

    [16:34:49 root@lucklyzpp8 data]#bash etcback.sh 
    [16:35:02 root@lucklyzpp8 data]#ls /backup/
    etcbak-2021-10-17-16.log  etcbak-2021-10-17-16.tar.gz
    [16:35:26 root@lucklyzpp8 data]#cat etcback.sh 
    #!/bin/bash
    BackDir="/backup"
    Filename_tar="etcbak-"`date -d "-1 days" +%Y-%m-%d-%H`".tar.gz"
    Filename_log="etcbak-"`date -d "-1 days" +%Y-%m-%d-%H`".log"
    [ ! -d $BackDir ]&& mkdir -p /backup
    tar czvf $BackDir/$Filename_tar /etc > $BackDir/$Filename_log   2>&1

    [16:38:57 root@lucklyzpp8 data]#crontab -l
    30 1 * * 1-5 /data/etcback.sh

  • 相关阅读:
    使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)
    js和jquery页面初始化加载函数的方法及先后顺序
    熔断器原理
    List<T>线性查找和二分查找BinarySearch效率分析
    ASP.NET资源大全-知识分享 【转载】
    C#语法——委托,架构的血液
    SUPERSOCKET 客户端
    VS 中的几种注释方法
    计算机专业术语中英文对照
    2018服务端架构师技术图谱
  • 原文地址:https://www.cnblogs.com/zpkf/p/15421169.html
Copyright © 2020-2023  润新知