M-63.第六周作业

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

前置:

yum install -y expect 

apt install -y expect 

 expect形式:

vim  expect01.sh

#!/usr/bin/expect

set ip 10.0.0.7

set user root

set password ********

set timeout 10

spawn ssh $user@$ip

expect {

        "yes/no" { send "yes\n";exp_continue }

        "password" { send "$password\n" }

}

interact

# chmod +x expect01.sh   # expect 需要使用 ./expect01.sh 的启动方式,不能使用bash  expect01.sh,会报错!!

# ./expect01.sh

shell形式:

#!/bin/bash

ip=10.0.0.150

user=root

password=********

expect <<EOF

set timeout 20

spawn ssh $user@$ip

expect {

        "yes/no" { send "yes\n";exp_continue }

        "password" { send "$password\n" }

}

expect eof

EOF

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[$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、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

#!/bin/bash

#Sum=10

arr=( 11 3 91 47 36 58 98 2 88 76 9 )

#for ((i=1;i<=$Sum;i++));do

#      read -p "请输入1个数到数组,共[$Sum]个数,这是第[$i]个" arr[$i]

#done

len=${#arr[*]}

echo "原始数组是:" ${arr[*]}

for ((j=0;j<$len;j++));do

for ((i=0;i<$len-1;i++));do

        if [ ${arr[$i]} -gt ${arr[$i+1]} ];then

                x=${arr[$i]}

                arr[$i]=${arr[$i+1]}

                arr[$i+1]=$x

                # echo ${arr[$i]} "<====>" ${arr[$i+1]}

        fi

done

#echo "第"$j"次整理后变成" ${arr[*]}

done

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!"

for

#!/bin/bash

NETID=10.0.0.

for HOSTID in {1..254};do

{

        if /bin/ping -c1 -W1 $NETID$HOSTID >/dev/null ;then

                echo "$NETID$HOSTID is success"

        else

                echo "$NETID$HOSTID is fail"

        fi

} &

# &  ###并发执行

done


while

#!/bin/bash

NETID=192.168.0

declare -i HOSTID=1

while [ $HOSTID -lt 255 ];do

  ping -c1 -W1 $NETID.$HOSTID &> /dev/null

  if [ $? -eq 0 ];then

    echo "$NETID.$HOSTID success!"

  else

    echo "$NETID.$HOSTID fail!"

  fi

  let HOSTID++

done

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

#!/bin/bash

DIR=etcbak-`date-d'-1 day'+%Y-%m-%d-%H`

tar -Jcvf /backup/${DIR}.tar.xz /etc/ &> /dev/null

crontab -l

crontab -e
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin/:/usr/bin/:/root/bin

30 1 * * 1-5 bash backupetc.sh

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容