1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
(1)expect脚本
[root@centos8 ~]#vim expect.sh
[root@centos8 ~]#cat expect.sh
#!/usr/bin/expect
spawn ssh 192.168.203.131
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "123456\n" }
}
interact
(2)shell脚本
[root@centos8 ~]#vim shell1.sh
[root@centos8 ~]#cat shell1.sh
#!/bin/bash
ip=192.168.203.131
user=root
password=123456
expect <<EOF
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect eof
EOF
[root@centos8 ~]#chmod +x shell1.sh
[root@centos8 ~]#./shell1.sh
spawn ssh root@192.168.203.131
root@192.168.203.131's password:
Last login: Mon Dec 27 21:49:53 2021 from 192.168.203.131
2、生成10个随机数保存于数组中,并找出其最大值和最小值
[root@centos8 ~]#vim max_min.sh
[root@centos8 ~]#cat max_min.sh
#!/bin/bash
declare -i max min
declare -a nums
for ((i=0;i<10;i++));do
nums[$i]=$RANDOM
[ $i -eq 0 ] && max=${nums[0]} && min=${nums[0]} && 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
[root@centos8 ~]#chmod +x max_min.sh
[root@centos8 ~]#./max_min.sh
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
[root@centos8 ~]#vim arry.sh
[root@centos8 ~]#cat arry.sh
#!/bin/bash
read -p"请输入数值个数:" COUNT
declare -a nums
for ((i=0;i<$COUNT;i++));do
num[$i]=$RANDOM
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 "the max integer is $num,the min integer is ${num[$((n-1))]}"
[root@centos8 ~]#chmod +x arry.sh
[root@centos8 ~]#./arry.sh
4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)
uptime:查看系统平均负载
mpstat:百分比显示CPU利用率的各项指标
top和htop:查看进程的实时状态
free:查看内存空间的使用状态
pmap:查看进程对应的内存映射,可以看到进程依赖的子模块占用的内存数量,可以以此判断OOM
vmstat:查看虚拟内存的信息,可以以用户定义的间隔不断刷新状态,能够看到内存与SWAP、磁盘之间的IO情况;
iostat:能够看到更丰富的IO性能状态,可以自定义刷新间隔判断哪块硬盘的IO比较繁忙;-x参数可以看到磁盘基于扇区的IO,队列长度,处理时间等
iotop:以top方式监控磁盘的I/O,实时监控,而且可以只显示正在执行读写的进程,提供很多非交互式参数;
iftop:显示网络带宽的使用情况,查看访问当前主机的流量的实时信息,实时连接等;
nload:只能以接口为单位查看实时吞吐量,看不到连接信息,只有速率信息;
top命令的指标以及含义:
top -23:15:13 up 2 days, 23:13, 3users, load average: 0.00,0.01,0.00
当前时间 -- 开机时间 -- 当前登录用户数 -- 平均负载 -- 5分钟、10分钟、15分钟
Tasks: 246 total, 1 running, 245 sleeping, 0 stopped, 0 zombie
总任务数 -- 当前正在运行的任务数 -- 处于休眠的任务数 -- 停止状态的任务数 -- 僵尸态的进程数
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 98.2 id, 0.7 wa, 0.2 hi, 0.3 si, 0.0 st
上一次刷新后间隔内CPU状态的百分比情况;是多核CPU的平均值,可以按1切换显示为独立的CPU统计;
us:用户空间内没有nice调整过优先级的进程运行的时间
sy:内核空间进程运行的时间
ni:调整过nice的用户空间进程运行时间
id:空闲时间
wa:等待IO的时间
hi,硬中断时间
si,软中断(模式切换)
st,虚拟机偷走的时间(虚拟机内进程执行的时间)
MiB Mem :1950.3 total, 88.5 free, 1191.2 used, 670.6 buff/cache
MiB Swap: 2048.0 total, 1887.0 free, 161.0 used. 594.4 avail Mem
内存和交换分区的使用情况:
total:总大小
free:空闲大小,加上buff/cache后是真正可以使用的总空闲空间
used:已使用的大小
buff/cache:数据缓存占用的大小
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程ID%MEM:内存使用百分比
VIRT:使用的虚拟内存大小,包括已经被映射但还未被使用的页表
RES:使用的物理内存大小
CODE:可用于执行代码的物理内存数量
DATA:进程保留的私有内存空间,可能还未被映射到物理内存,但已经被算到虚拟内存空间中
SHR:共享内存空间,可以被其他进程共享
PR:top命令显示的优先级0-39之间,越小
NI:nice优先级%CPU:CPU利用率
TIME+:进程启动之后占用的CPU时间,是时间片的累计
COMMAND:进程关联程序的名称,或启动进程的命令
5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
一、for循环:
注:& 符号可以并发执行,wait 等待0s退出进程
[root@centos8 ~]#vim for.sh
[root@centos8 ~]#cat for.sh
#!/bin/bash
for ip in {1..254};do
{
ping 192.168.0.$ip -c 1 -w 1 &> /dev/null
if [ $? == 0 ];then
echo " ping 192.168.0.$ip...... success!"
else
echo "ping 192.168.0.$ip...... fail!"
fi
} &
done
wait
[root@centos8 ~]#chmod +x for.sh
[root@centos8 ~]#./for.sh
二、while循环:
[root@centos8 ~]#vim while.sh
[root@centos8 ~]#cat while.sh
#!/bin/bash
while [ ip -le 254 ];do
{
ping 192.168.0.$ip -c 1 -w 1 &> /dev/null
if [ $? == 0 ];then
echo "192.168.0.$ip... success!"
else
echo "192.168.0.$ip... fail!"
fi
} &
done
wait
[root@centos8 ~]#chmod +x while.sh
[root@centos8 ~]#./while.sh
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
[root@centos8 ~]#vim etcbak.sh
[root@centos8 ~]#cat etcbak.sh
#!/bin/bash
#如果/backup路径不存在,则创建backup文件夹
[ -d /backup ] || mkdir /backup
30 1 * * 1-5 /usr/bin/tar -zcf etcbak-date -d "-1 day" +%Y-%m-%d-%H.tar.xz /etc &> /dev/null
[root@centos8 ~]#chmod +x etcbak.sh
root@centos8 ~]#./etcbak.sh
[root@centos7 expects]# ll /backup/
total 0