第六周作业

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

脚本形式:

#!/bin/bash
#****************************************************************************************#
#Author:                        
#QQ:                            
#Date:                          2021-10-14
#FileName:                      ssh.sh
#URL:                           
#Description:                   non-interactive SSH script
#Copyright (C):                 2021 All rights reserved
#*******************************定义颜色*************************************************#
RED="\e[1;31m"
GREEN="\e[1;32m"
SKYBLUE="\e[1;36m"
YELLOW="\e[1;43m"
BLUE="\e[1;44m"
END="\e[0m"
RandomColor="\e[1;34m"
#****************************************************************************************#
declare -A hosts
Move="echo -en \E[8G"

#如果位置参数是一个包含username:password:ip格式的文件,则将文件内容存储为数组
function arr_user {
#好像j的值是会变成最后一次循环后的值,没具体确认
   j=1
   for i in `grep -oE "^\w+" $1`;do
        hosts[user$j]=$i
        #echo $j is ${hosts[user$j]}
        ((j = ++j))
   done
   j=1
   for l in `sed -nr 's/\w+\:(\w+)\:(.*)/\1/p' $1`;do
        hosts[passwd$j]=$l
        #echo $j is ${hosts[passwd$j]}
        ((j = ++j))
   done
   j=1
   for k in `sed -nr 's/\w+\:(\w+)\:(.*)/\2/p' $1`;do
        hosts[ip$j]=$k
       #echo $j is ${hosts[ip$j]}
        ((j = ++j))
   done
}

#ssh非交互式登录函数
function expect_ssh {
expect <<haha
        set timeout 20
        spawn ssh $1@$3
        expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$2\n";exp_continue }
        -re "#|Ubuntu" { send "exit\n" } -re "refused|No\\\sroute" { send "Connection failed!\n" }
        }
        expect eof
haha
}

#arr_user $1
#echo ${hosts[*]}
#for ((e=1;e<=3;e++));do
#   echo ${hosts[user$e]}
#   echo ${hosts[passwd$e]}
3   echo ${hosts[ip$e]}
#done

[ $# -eq 0 ] && { echo -n "Usage: " && $Move; echo "`basename $0` /PATH/TO/FILENAME";$Move; echo "`basename $0` USERNAME PASSWD IP";exit; }
if [ -f $1 ];then 
    arr_user $1
    number=`cat $1 | wc -l`
    for (( n=1;n<=$number;n++ ));do
        expect_ssh ${hosts[user$n]} ${hosts[passwd$n]} ${hosts[ip$n]}
    done
    exit
else
    expect_ssh $1 $2 $3
    exit
fi

expect形式

#!/usr/bin/expect
set user [lindex $argv 0]
set passwd [lindex $argv 1]
set ip [lindex $argv 2]
spawn ssh $user@$ip
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$passwd\n";exp_continue }
        -re "#|Ubuntu" { send "exit\n" } -re "refused|No\\\sroute" { send "Connection failed!\n" }
       }
expect eof

2、生成10个随机数保存于数组中,并找出其最大值和最小值

#!/bin/bash
declare -A number
function Random_number {
    for ((i=0;i<=9;i++));do
        number[digit[$i]]=$RANDOM
    done
    echo "Random Number Range: ${number[*]}"
}

Random_number
max=0
min=0

for j in `seq 0 9`;do
    [ ${number[digit[$j]]} -gt $max  ] && max=${number[digit[$j]]}
    #cmd1和cmd2任意一个执行成功都执行cmd3
    [ $min -eq 0 ] || [ ${number[digit[$j]]} -lt $min ] && min=${number[digit[$j]]}
done

echo "Max number is: $max"
echo "Min number is: $min"

3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

#!/bin/bash
#****************************************************************************************#
#Author:                        Yb11
#QQ:                            394960885
#Date:                          2021-10-15
#FileName:                      bubble_sort.sh
#URL:                           https://github.com/yabao11
#Description:                   Bubble_sort
#Copyright (C):                 2021 All rights reserved
#*******************************定义颜色*************************************************#
RED="\e[1;31m"
GREEN="\e[1;32m"
SKYBLUE="\e[1;36m"
YELLOW="\e[1;43m"
BLUE="\e[1;44m"
END="\e[0m"
RandomColor="\e[1;34m"
#****************************************************************************************#
function Random_number {
  if [[ $1 =~ [[:digit:]]+ ]];then
    for ((i=0;i<$1;i++));do
        number[$i]=$RANDOM
    done
    echo "Random Number range: ${number[@]}"
    echo
  elif [[ $1 =~ \-h ]];then
    echo "[help info]"
  else
    echo "Wrong Number!"
    echo "[help info]"
  fi
}

function bubble_sort {
    for ((j=0;j<$1;j++));do
            for ((k=0;k<$1;k++));do
                l=$[$k + 1]
                if [[ $2 =~ \-i ]];then
                    if [ $l -eq $1 ];then
                        break
                    elif [ ${number[$k]} -gt ${number[$l]} ];then
                        { temp=${number[$l]};number[$l]=${number[$k]};number[$k]=$temp; }
                    else
                        continue
                    fi
                elif [[ $2 =~ \-d ]];then
                    if [ $l -eq $1 ];then
                        break
                    elif [ ${number[$k]} -lt ${number[$l]} ];then
                        { temp=${number[$l]};number[$l]=${number[$k]};number[$k]=$temp; }
                    else 
                        continue
                    fi
                else
                    echo "Wrong option!"
                    echo
                fi   
            done
    done
}


Random_number $1
if [[ $1 =~ [[:digit:]]+ ]];then
    for ((j=0;j<$1;j++));do
        bubble_sort $1 $2
    done
else
    echo "Usage: "
    echo "       `basename $0` NUMBER [-i|-d] "
    echo "       `basename $0` -h"
    echo
    echo "[options]"
    echo "-i     increasing"
    echo "-d     decreasing"
    exit
fi

#echo  ${number[*]} | sort -n
for m in `seq 0 $1`;do
    echo  ${number[$m]}
done

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 - 17:21:28 up  8:49,  2 users,  load average: 0.00, 0.02, 0.07
Tasks: 148 total,   1 running, 145 sleeping,   2 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.2 hi,  0.2 si,  0.0 st
MiB Mem :   1790.4 total,   1274.4 free,    225.1 used,    290.9 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   1387.5 avail Mem 

    PID  %MEM    VIRT    RES   CODE    DATA    SHR nMaj nDRT  %CPU COMMAND                                                          
    879   2.2  229132  40800    288    1356  39140   10    0   0.0 sssd_nss                                                         
    809   1.5  416616  28400      8   37804  15136   53    0   0.0 tuned                                                            
    775   1.3 1628184  23316    104   54744  17040   75    0   0.0 polkitd                                                          
    777   1.0  391668  18464   3344   26896  16056   60    0   0.0 NetworkManager                                                   
    851   0.8  227520  15356    224    2132  12804    9    0   0.0 sssd_be                                                          
    646   0.8  128924  14548    304    5972   8348    9    0   0.0 systemd-udevd                                                    
    773   0.8  218960  14500     80    1640  12452   26    0   0.0 sssd                                                             
      1   0.8  185928  14060   1288   20808   9252   75    0   0.0 systemd                                                          
    897   0.7  217660  12404    664   22136   3508   10    0   0.0 rsyslogd                                                         
top - 17:21:28 up  8:49,  2 users,  load average: 0.00, 0.02, 0.07
   `当前时间` `开机时间`  `当前登录用户数` `平均负载,5分钟、10分钟、15分钟`
Tasks: 148 total,   1 running,       145 sleeping,      2 stopped,        0 zombie
      `总任务数` `当前正在运行的任务数` `处于休眠的任务数`  `停止状态的任务数`  `僵尸态的进程数`
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.2 hi,  0.2 si,  0.0 st

上一次刷新后间隔内CPU状态的百分比情况;是多核CPU的平均值,可以按1切换显示为独立的CPU统计;
us:用户空间内没有nice调整过优先级的进程运行的时间
sy:内核空间进程运行的时间
ni:调整过nice的用户空间进程运行时间
id:空闲时间
wa:等待IO的时间
hi,硬中断时间
si,软中断(模式切换)
st,虚拟机偷走的时间(虚拟机内进程执行的时间)

MiB Mem :   1790.4 total,   1274.4 free,    225.1 used,    290.9 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   1387.5 avail Mem 

内存和交换分区的使用情况:
total:总大小
free:空闲大小,加上buff/cache后是真正可以使用的总空闲空间
used:已使用的大小
buff/cache:数据缓存占用的大小
    PID  %MEM    VIRT    RES   CODE    DATA    SHR nMaj nDRT  %CPU 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实现

#!/bin/bash
for ip in `seq 254`;do
    echo -n "ping 192.168.0.$ip ...."
    ping 192.168.0.$ip -c 1 -w 1 &> /dev/null
    if [ $? == 0 ]; then
        echo "success!"
    else
        echo "fail!"
    fi
done

while实现

#!/bin/bash
ip=1       
while ((ip<=254));do
    echo -n "ping 192.168.0.$ip ...."
    ping 192.168.0.$ip -c 1 -w 1 &> /dev/null
    if [ $? == 0 ]; then
        echo "success!"
    else   
        echo "fail!"
    fi     
    let ip++
done

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

想不到这道题坑这么多

[root@centos8mini ~]# crontab -l
PATH=/root:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
30 1 * * * backup.sh
[root@centos8mini ~]# cat backup.sh 
#!/bin/bash
[[ `date +%w` =~ [1-5] ]] && tar -cJPf /backup/etcbak-`date -d -1day +%F-%H`.tar.xz /etc || exit
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355

推荐阅读更多精彩内容

  • 1、简述osi七层模型和TCP/IP五层模型 osi七层模型: 应用层 OSI 参考模型中最靠近用户的一层,是为计...
    肖恩的博客阅读 348评论 0 0
  • 1、Ubuntu系统网络配置总结(包括主机名、网卡名称、网卡配置)设置主机名查看主机名:hostname主机名文件...
    马晖阅读 301评论 0 0
  • 1、自建yum仓库,分别为网络源和本地源 基于光盘的yum源 systemctl start autofs sys...
    狮子搏兔_126c阅读 233评论 0 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,536评论 28 53
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 5,727评论 3 8