0
点赞
收藏
分享

微信扫一扫

【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

 



举报

相关推荐

0 条评论