【06-01~06】第六周做作业 脚本的使用

【06-01~06】第六周做作业 脚本的使用

【06-01】编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。

1.单使用expect

#!/usr/bin/expect
set ip 10.0.1.11
set user root
set password 123456
set timeout 10
#设定超时时间
spawn ssh $user@$ip
#启动命令ssh
expect {
        "yes/no" { send "yes\n";exp_continue }
     #输入yes
        "password" { send "$password\n"  }
     #输入密码
}
interact
#保留环境不退出

执行测试

#先安装expect
[root@rhle010 ~]# yum -y install expect
# 授予执行权限
[root@rhle010 ~]# chmod u+x expect.sh
# 测试执行 登录成功
[root@rhle010 ~]# ./expect.sh 
spawn ssh root@10.0.1.11
root@10.0.1.11's password: 
Last login: Wed Mar  9 15:05:50 2022 from 10.0.1.10
[root@rhel011 ~]# 

2.配合shell使用

[root@rhel011 ~]# vi SshShell.sh 
#!/bin/bash
ip=10.0.1.10
user=root
password=123456
expect <<EOF
set timeout 20
spawn ssh $user@$ip
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$password\n" }
}
expect eof
EOF

执行测试

#也先安装expect
[root@rhel011 ~]# yum -y install expect
# 也授予执行权限
[root@rhel011 ~]# chmod u+x SshShell.sh 
# 测试执行登录去10 登录成功
[root@rhel011 ~]# ./SshShell.sh 
spawn ssh root@10.0.1.10
root@10.0.1.10's password: 
Last login: Wed Mar  9 15:17:26 2022 from 10.0.0.1
[root@rhle010 ~]# 

 

【06-02】生成10个随机数保存于数组中,并找出其最大值和最小值

# 创建文件
[root@rhle010 ~]# vim random_min_max.sh 
#!/bin/bash
# 定义min和max的变量 -i是定义整数变量
declare -i min max
# 定义名为nums的变量,-a表示数组array
declare -a nums
# 创建for循环来遍历数组,循环10次
for ((i=0;i<10;i++));do
# 将循环到的数字存入nums中
        nums[$i]=$RANDOM
#上一节点执行成功后,将小的数字存入min中将大的数字存入max中
        [ $i -eq 0 ] && min=${nums[$i]} && max=${nums[$i]} && continue
# 判断数字是否大于最大值,如果大于存入max中
        [ ${nums[$i]} -gt $max ] && max=${nums[$i]}
# 判断数字是否小于最大值,如果小于存入min中
        [ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo "随机10个数字为 ${nums[*]}"
echo "最大值为:$max"
echo "最小值为:$min"

执行结果

[root@rhle010 ~]# chmod u+x random_min_max.sh 
[root@rhle010 ~]# bash random_min_max.sh 
随机的10个数字为 29419 24080 8284 6023 9832 32646 21542 8426 28984 16917
最大值为:32646
最小值为:6023

 

【06-03】输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

#!/bin/bash
read -p "请输入数值个数:" COUNT
declare -a nums
for ((i=0;i<$COUNT;i++));do
        num[$i]=$[$RANDOM%100]
done
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 "排列之后:${num[*]}"
echo "排序后最大的数为$num,最小的数值为${num[$((n-1))]}"

 

执行结果

[root@rhle010 ~]# bash BubbleSort.sh 
请输入数值个数:10
原始数组45 55 56 37 73 37 92 98 94 34
排列之后:98 94 92 73 56 55 45 37 37 34
排序后最大的数为98,最小的数值为34

 

【06-04】总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)

4.1 系统负载查看方式

# top 实时查看进程状态
top - 22:52:57 up 71 days,  7:17,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 110 total,   1 running, 104 sleeping,   5 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3736.7 total,    545.8 free,    648.8 used,   2542.1 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   2803.8 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                      
1513789 root      20   0  513204  16724   4240 S   0.7   0.4 279:31.94 barad_agent                                  
2584017 root      20   0   24704  10312   7288 S   0.3   0.3  40:18.21 tat_agent                                    
3511080 root      20   0       0      0      0 I   0.3   0.0   0:00.35 kworker/0:1-events                           
      1 root      20   0  187164  13284   8760 S   0.0   0.3   5:36.89 systemd   
………………………………

# uptime 查看系统平均负载
[root@rhle010 ~]# uptime 
 10:27:23 up 13:47,  2 users,  load average: 0.01, 0.02, 0.00

# free 查看内存空间使用情况
[root@rhle010 ~]# free 
              total        used        free      shared  buff/cache   available
Mem:         448752      191116       68128        1624      189508      244260
Swap:       2097148       68352     2028796

# vmstat 查看虚拟内存信息,可以以用户定义的间隔不断刷新状态,能够看到内存与SWAP、磁盘之间的IO情况;
[root@rhle010 ~]# vmstat 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0  68352  67976     40 189556    1    2    26     5   55  117  0  0 99  0  0


# pstree 查看进程树 pstree -p 查看pid;pstree -u 查看用户id
[root@rhle010 ~]# pstree -p
systemd(1)─┬─NetworkManager(1846)─┬─{NetworkManager}(1849)
           │                      └─{NetworkManager}(1850)
           ├─VGAuthService(974)
………………………………

# pmap:查看进程对应的内存映射,可以看到进程依赖的子模块占用的内存数量
[root@rhle010 ~]# pmap 975
975:   /usr/bin/vmtoolsd
0000562679601000     56K r-x-- vmtoolsd
000056267980e000      4K r---- vmtoolsd
000056267980f000      4K rw--- vmtoolsd
000056267b62f000    536K rw---   [ anon ]
00007fe71772c000   9040K r--s- passwd
00007fe718000000    132K rw---   [ anon ]
………………………………


#以下是需要安装sysstat才能查看的参数
# mpstat:百分比显示CPU利用率的各项指标
[root@CentOS8 ~]# mpstat
Linux 4.18.0-305.3.1.el8.x86_64 (CentOS8)       03/11/2022      _x86_64_        (2 CPU)

10:44:40 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:44:40 AM  all    0.24    0.01    0.25    0.03    0.00    0.00    0.00    0.00    0.00   99.46


# iostat:能够看到更丰富的IO性能状态,可以自定义刷新间隔判断哪块硬盘的IO比较繁忙;-x参数可以看到磁盘基于扇区的IO,队列长度,处理时间等
[root@CentOS8 ~]# iostat
Linux 4.18.0-305.3.1.el8.x86_64 (CentOS8)       03/11/2022      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.24    0.01    0.26    0.03    0.00   99.46

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               2.52         0.08        18.11     507563  109247789
scd0              0.00         0.00         0.00       6329          0

#需要安装iotop 以top方式监控磁盘的I/O,实时监控,而且可以只显示正在执行读写的进程,提供很多非交互式参数;
[root@CentOS8 ~]# iotop
Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                             
      1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 17
      2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
      3 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_gp]
      4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_par_gp]
      6 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H-events_highpri]
………………………………

#需要安装iftop 显示网络带宽的使用情况,查看访问当前主机的流量的实时信息,实时连接等;
[root@CentOS8 ~]# iftop
                       12.5Kb                 25.0Kb                  37.5Kb                 50.0Kb            62.5Kb
└──────────────────────┴──────────────────────┴───────────────────────┴──────────────────────┴───────────────────────
CentOS8                                      => 1.28.58.171                                   4.00Kb  3.94Kb  4.14Kb
                                             <=                                                672b    582b    661b
CentOS8                                      => 169.254.0.203                                    0b   2.52Kb  2.31Kb
                                             <=                                                  0b   1.13Kb  1.07Kb
CentOS8                                      => 183.60.83.19                                     0b    232b    285b
                                             <=                                                  0b    421b    541b
CentOS8                                      => 169.254.0.35                                  1.54Kb   316b    226b
                                             <=                                               1.03Kb   210b    150b
CentOS8                                      => 169.254.128.15                                   0b     67b     64b
                                             <=                                                  0b     67b     64b
CentOS8                                      => 169.254.128.17                                 112b     67b     64b
                                             <=                                                112b     67b     64b
CentOS8                                      => 169.254.0.138                                    0b     32b     23b
                                             <=                                                  0b     32b     23b
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
TX:             cum:   12.4KB   peak:   15.4Kb                                       rates:   5.65Kb  7.16Kb  7.09Kb
RX:                    4.43KB           6.02Kb                                                1.79Kb  2.48Kb  2.53Kb
TOTAL:                 16.8KB           21.4Kb                                                7.45Kb  9.63Kb  


#需要安装nload nload:只能以接口为单位查看实时吞吐量,看不到连接信息,只有速率信息;
[root@CentOS8 ~]# nload
Device eth0 [10.0.24.9] (1/2):
=====================================================================================================================
Incoming:
                                                                                Curr: 2.48 kBit/s
                                                                                Avg: 4.10 kBit/s
                                                                                Min: 1.87 kBit/s
                                                                                Max: 10.77 kBit/s
                                                                                Ttl: 2.81 GByte
Outgoing:

                                                                                Curr: 12.13 kBit/s
                                                                                Avg: 14.22 kBit/s
                                                                                Min: 7.23 kBit/s
                                                                                Max: 32.60 kBit/s
                                                                                Ttl: 3.60 GByte

 

4.2 top命令标识 

# top 实时查看进程状态
     top - 22:52:57      up 71 days,  7:17,  1 user,          load average:     0.00,            0.00,          0.00
# 当前时间: 22:52:57 开机时间 71 days,  7:17,  1 当前登录用户数,  平均负载: 五分钟负载:0.00, 10分钟负载:0.00, 15分钟负载:0.00

   Tasks: 110 total,   1 running,  104 sleeping,  5 stopped,    0 zombie
# 总任务数: 110 total,  1 当前运行的, 104 休眠数,     5 停止状态的,   0 僵尸进程

# 距上次刷新后CPU状态百分比,默认为多核平均值
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
# 按1 显示多核情况
%Cpu0  :  0.3 us,       0.3 sy,      0.0 ni,     99.3 id,   0.0 wa,   0.0 hi,     0.0 si,     0.0 st
%Cpu1  :  0.3 用户占用,  0.3 内核占用,  0.0 优先级, 99.3 空闲,  0.0 等待,  0.0 硬中断,  0.0 软中断,  0.0 实时
CPU核数 
 us 用户空间占用CPU百分比 
 sy 内核空间CPU占用百分比  
 ni 用户改变优先级进程CPU占用百分比 
 id 空闲CPU百分比 
 wa 等待IO的百分比 
 hi 硬中断占用CPU百分比 
 si 软中断占用CPU百分比 
 st 实时状态,该数字增加时,代表资源不够用,VPS分配物理CPU资源的百分比

#内存和交换分区使用情况

MiB Mem :   3736.7 total,    545.8 free,    648.8 used,   2542.1 buff/cache
MiB 内存 :  3736.7 全部资源,  545.8 空闲资源, 648.8 已使用,   2542.1 数据缓存占用大小
MiB Swap:        0.0 total,      0.0 free,      0.0 used.   2803.8 avail Memz/缓冲区交换总量



    PID USER      PR    NI   VIRT    RES    SHR  S  %CPU  %MEM     TIME+ COMMAND                       
1513789 root      20    0  513204  16724   4240  S   0.7   0.4 279:31.94 barad_agent                                  
2584017 root      20    0   24704  10312   7288  S   0.3   0.3  40:18.21 tat_agent                                    
3511080 root      20    0       0      0      0  I   0.3   0.0   0:00.35 kworker/0:1-events                           
      1 root      20    0  187164  13284   8760  S   0.0   0.3   5:36.89 systemd   
………………………………
按f键能看到更多信息 q退出
PID  进程ID 
USER 进程所有者 
PR   进程优先级 
NI   进程使用的虚拟内存总量 
VIRT 未被交换出的物理内存大小 
RES  已用物理内存 
SHR  共享内存大小kb 
S    进程状态 D 不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU CPU占比 
%MEM 物理内存占比 
TIME+进程占用CPU时长 1/100秒
COMMAND进程名称

按键 b 切换高亮效果
   x 列高亮效果

 

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

5.1 for循环

[root@rhle010 ~]# vim ping_for.sh 
#!/bin/bash
  
read -p "请输入网段如192.168.0:" ip
read -p "请输入最大IP:" last
for ((i=0;i<=$last;i++));do
        echo -n "ping $ip.$i"
        ping $ip.$i -c 1 -w 1 &> /dev/null
        if [ $? == 0 ];then
                echo " success!"
        else
                echo " fail"
        fi
done
[root@rhle010 ~]# bash ping_for.sh 
请输入网段如192.168.0:10.0.1
请输入最大IP:12
ping 10.0.1.0 fail
ping 10.0.1.1 fail
ping 10.0.1.2 fail
ping 10.0.1.3 fail
ping 10.0.1.4 fail
ping 10.0.1.5 fail
ping 10.0.1.6 fail
ping 10.0.1.7 fail
ping 10.0.1.8 fail
ping 10.0.1.9 fail
ping 10.0.1.10 success!
ping 10.0.1.11 success!
ping 10.0.1.12 fail

 

5.2 while循环

[root@rhle010 ~]# vim ping_while.sh 
#!/bin/bash
  
read -p "请输入网段如192.168.0:" ip
read -p "请输入最大IP:" last
i=0
while (($i<=$last));do
        let i++
        echo -n "ping $ip.$i"
        ping $ip.$i -c 1 -w 1 &> /dev/null
        if [ $? == 0 ];then
                echo " success!"
        else
                echo " fail"
        fi

done
[root@rhle010 ~]# bash ping_while.sh 
请输入网段如192.168.0:10.0.1
请输入最大IP:12
ping 10.0.1.1 fail
ping 10.0.1.2 fail
ping 10.0.1.3 fail
ping 10.0.1.4 fail
ping 10.0.1.5 fail
ping 10.0.1.6 fail
ping 10.0.1.7 fail
ping 10.0.1.8 fail
ping 10.0.1.9 fail
ping 10.0.1.10 success!
ping 10.0.1.11 success!
ping 10.0.1.12 fail
ping 10.0.1.13 fail

 

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

6.1 写程序执行

[root@CentOS8 ~]# vim etcBackUp.sh 
#!/bin/bash
# 如果没有则创建文件夹
[ -d /backup ] || mkdir /backup
/usr/bin/tar -zcPf /backup/etcback-`date -d -1day +%F-%H`.tar.xz /etc/*

# 赋权
[root@CentOS8 ~]# chmod u+x etcBackUp.sh 

# 写定时执行文件
[root@CentOS8 ~]# crontab -e
30 1 * * 1-5 bash /root/etcBackUp.sh

# 查看执行日志
[root@CentOS8 ~]# tail -f /var/log/cron
Mar 15 01:30:01 VM-24-9-centos CROND[4023063]: (root) CMD (bash /root/etcBackUp.sh)

# 修改时间
[root@CentOS8 backup]# date -s 1:29:30
[root@CentOS8 backup]# systemctl restart crond

# 查看执行情况
[root@CentOS8 ~]# ll /backup/
total 5528
-rw-r--r-- 1 root root 5657219 Mar 15 01:30 etcback-2022-03-14-01.tar.xz

执行成功!

6.2 直接写入自动执行程序

# 手工创建个文件夹
[root@CentOS8 ~]# mkdir /backup

# 写自动执行程序
[root@CentOS8 ~]# crontab -e
30 1 * * 1-5 /usr/bin/tar -zcPf /backup/etcback-`date -d -1day +\%F-\%H`.tar.xz /etc/*

# 修改时间
[root@CentOS8 ~]# date -s 1:29:30
Tue Mar 15 01:29:30 CST 2022
[root@CentOS8 ~]# systemctl restart crond

# 查看执行日志
[root@CentOS8 ~]# tail -f /var/log/cron 
Mar 15 01:30:01 VM-24-9-centos CROND[4025090]: (root) CMD (/usr/bin/tar -zcPf /backup/etcback-`date -d -1day +%F-%H`.tar.xz /etc/*)

# 查看执行结果
[root@CentOS8 ~]# ll /backup/
total 5528
-rw-r--r-- 1 root root 5657219 Mar 15 01:30 etcback-2022-03-14-01.tar.xz

 

posted @ 2022-03-14 17:26  法月将臣  阅读(85)  评论(0)    收藏  举报