第六周作业
1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
expect实现
#!/usr/bin/expect set ip [lindex $argv 0] set user [lindex $argv 1] set password [lindex $argv 2] spawn ssh $user@$ip expect { "yes/no" { send "yes\n";exp_continue } "password" { send "$password\n";exp_continue } "*]#" { send "hostname -I\n" } } interact
shell实现
#!/bin/bash ip=$1 user=$2 password=$3 [ -z $user ] && set user root [ -z $password ] && set password 123456 expect <<EOF set timeout 20 spawn ssh $user@$ip expect { "yes/no" { send "yes\n";exp_continue } "password" { send "$password\n" } } expect "*]#" { send "hostname -I\n" } expect eof EOF
2、生成10个随机数保存于数组中,并找出其最大值和最小值
#!/bin/bash declare -i min max size=10 declare -a nums for ((i=0;i<$size;i++));do nums[$i]=$[$RANDOM%1000] [ $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 "数组元素:${nums[*]}" echo "最大值:$max" echo "最小值:$min"
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
#!/bin/bash declare -i size=10 declare -a nums for ((i=0;i<$size;i++));do nums[$i]=$[$RANDOM%1000] done echo "数组元素冒泡排序之前:${nums[*]}" for ((i=0;i<$size-1;i++));do for ((j=0;j<$size-1-$i;j++));do let x=$j+1 if (( ${nums[$j]} > ${nums[$x]} ));then temp=${nums[$x]} nums[$x]=${nums[$j]} nums[$j]=$temp fi done done echo "数组元素冒泡排序之后:${nums[*]}"
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内置命令: 排序: P:以占据的CPU百分比,%CPU M:占据内存百分比,%MEM T:累积占据CPU时长,TIME+ 首部信息显示: uptime信息:按l(显示top一栏信息,如当前时间,连接用户数等) tasks及cpu信息:按t cpu分别显示:1 (数字) memory信息:m命令 退出命令:q 修改刷新时间间隔:s 终止指定进程:k 保存文件:W 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 IP=192.168.0 for (( i=0;i<=255;i++ ));do { if /bin/ping -c1 -W1 $IP.$i &> /dev/null;then echo $IP.$i" is success" else echo $IP.$i" is fail" fi }& #并发执行 done wait while实现 #!/bin/bash IP=192.168.0 declare -i i=0 while (( i <= 255 ));do { ping -c1 -W1 $IP.$i &> /dev/null if [ $? -eq 0 ];then echo $IP.$i" is success" else echo $IP.$i" is fail" fi }& #并发执行 let i++ done wait
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
编写备份脚本 back.sh #!/bin/bash DIR=etcbak-`date -d '-1 day' +%Y-%m-%d-%H` tar -Jcvf /backup/${DIR}.tar.xz /etc/ &> /dev/null 测试脚本 bash -x back.sh 创建定时任务,每周工作日1:30分执行 crontab -e 30 1 * * 1-5 bash back.sh

浙公网安备 33010602011771号