第六周作业
1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
expect
[root@centos7 ~]# vim exssh.sh #!/usr/bin/expect set IP 10.0.0.13 set PD 123456 set USER root spawn ssh ${USER}@${IP} expect { "yes/no" { send "yes\n"; exp_continue } "password" { send "${PD}\n" } } interact
shell
#!/bin/bash IP=10.0.0. readc () { read -t 30 -p "请选择需要连的IP:" JIP read -t 30 -p "请选择连接的用户:" USER read -t 30 -p "请输入密码:" PASSWD } sshd () { sshpass -p ${PASSWD} ssh ${USER}@${IP}${JIP} } yumbao () { if type sshpass &> /dev/null; then echo "Sshpass has been installed" else yum install -y sshpass &> /dev/null fi } main () { yumbao readc sshd } main
2、生成10个随机数保存于数组中,并找出其最大值和最小值
#!/bin/bash declare -i min max declare -a nums for ((i=0;i<10;i++));do nums[$i]=$RANDOM [ $i -eq 0 ] && min=${nums[0]} && max=${nums[0]}&& continue [ ${nums[$i]} -gt $max ] && max=${nums[$i]} && continue [ ${nums[$i]} -lt $min ] && min=${nums[$i]} done echo "All numbers are ${nums[*]}" echo Max is $max echo Min is $min
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
(shell写算法天崩地裂,变量没类型,仅供参考提供思路,不能使用)
#!/bin/bash read -t 30 -p "chuzygeshu:" num declare -a arr for (( i=0 ; i<${num} ; i++ )) do read -p "shuruyuansu:" ${arr[$i]} done #start for (( i=0; i<${num}; i++ )) do for (( j=0; j<${num}-i; j++ )) do if [[ ${arr[$j]} -lt ${arr[$j+1]} ]]; then tmep=${arr[$j]} ${arr[$j]}=${arr[$j+1]} ${arr[$j+1]}=$temp fi done done echo "min" for (( i=$num; i>0; i-- )) do echo ${arr[$i]} done echo "max" echo "${arr[*]}"
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命令的各项指标:
Tasks:当前总进程数
running:正在运行的进程数
sleeping:休眠的进程数
stopped:停止的进程数
zombie:僵尸进程数
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间
PID:进程PID号
USER:启动进程的用户
PR:进程优先级
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:共享内存大小,单位kb
S:进程状态。D为不可中断的睡眠状态,R为运行,S为睡眠,T为跟踪/停止,Z为僵尸进程
%CPU:上次更新到现在的CPU时间占用比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间总计,单位1/100秒
COMMAND:进程名称(命令名/命令行)
5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
#!/bin/bash net=192.168.0 declare -i address=1 while [ $address -le 255 ];do { ping -c1 -w1 ${net}.${address} &>/dev/null if [ $? -eq 0 ];then echo $net.$address is success! else echo $net.$address is fail! fi
let address++
}&
done
wait
#!/bin/bash net=192.168.0 for i in {1..255}; do ping -c1 -w1 ${net}.i &>/dev/null && echo "success!" || echo "fail!"
done
wait
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
[root@centos7 ~]#vim ping.sh #!/bin/bash DIR=etcbak-`date -d '-1 day' +%Y-%m-%d-%H` tar -Jcvf /backup/${DIR}.tar.xz /etc/ &> /dev/null [root@centos7 ~]#bash ping.sh [root@centos7 ~]#ll /backup/ total 8128 -rw-r--r-- 1 root root 7597912 Apr 17 12 :10 etcbak-2022-4-16-12.tar.xz [root@centos7 ~]#crontab -e crontab: installing new crontab [root@centos7 ~]#crontab -l PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 30 1 * * 1-5 bash ping.sh