魏蓝

以梦为马

导航

第六周作业

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 1210 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

 

posted on 2022-04-17 12:26  魏蓝  阅读(27)  评论(0编辑  收藏  举报