随笔6
1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
#!/usr/bin/expect
#expect实现登录
set ip 192.168.10.101
set user root
set passwd redhat
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n" }
}
expect "]#" { send "lsblk\n" }
expect "]#" { send "echo 'word'\n" }
expect "]#" { send "exit\n" }
expect eof
#!/bin/bash
#shell实现
ip=192.168.10.101
user=root
passwd=redhat
echo $user
expect <<EOF
set timeout 5
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n";exp_continue }
"]#" { send "echo 'hello word'\nexit\n" }
}
expect eof
EOF
2、生成10个随机数保存于数组中,并找出其最大值和最小值
#!/bin/bash
declare -a array
for i in {0..9}
do
array[$i]=$RANDOM
done
echo "list array: ${array[@]}"
max=${array[0]}
min=${array[0]}
for i in {1..9}
do
[ ${array[$i]} -gt $max ] && max=${array[$i]}
[ ${array[$i]} -lt $min ] && min=${array[$i]}
done
echo "MAX number is $max"
echo "MIN number is $min"
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
#!/bin/bash
#这里采用升序
declare -a arr
arr=( 2 4 8 9 6 5 7 1 ) #可以使用生成随机数
len=${#arr[*]}
echo "$len : ${arr[*]}"
for ((z=1; z<$len; z++))
do
echo "----------------$z---------------"
for ((i=0; i<$len-1; i++))
do
if [ ${arr[$i]} -gt ${arr[$i+1]} ];then
x=${arr[$i]}
y=${arr[$i+1]}
arr[$i+1]=$x
arr[$i]=$y #这里是将每个元素做对比,大于就互相换位
fi
done
done
echo "$len : ${arr[*]}"
4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)![]()
Tasks — 任务(进程),系统现在共有123个进程,其中处于运行中的有1个,122个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
![]()
这里显示不同模式下所占cpu时间百分比,这些不同的cpu时间表示:
us, user: 运行(未调整优先级的) 用户进程的CPU时间
sy,system: 运行内核进程的CPU时间
ni,niced:运行已调整优先级的用户进程的CPU时间
wa,IO wait: 用于等待IO完成的CPU时间
hi:处理硬件中断的CPU时间
si: 处理软件中断的CPU时间
st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。
![]()
接下来两行显示内存使用率,有点像'free'命令。第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。
物理内存显示如下:全部可用内存、已使用内存、空闲内存、缓冲内存。相似地:交换部分显示的是:全部、已使用、空闲和缓冲交换空间。
PID:进程ID,进程的唯一标识符
USER:进程所有者的实际用户名。
PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
S:这个是进程的状态。它有以下不同的值:
• D - 不可中断的睡眠态。
• R – 运行态
• S – 睡眠态
• T – 被跟踪或已停止
• Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
#!/bin/bash
for i in {1..254}
do
ping -c 1 192.168.10.$i &>/dev/null
if [ "$?" = "0" ]
then
echo "192.168.10.$i is success!"
else
echo "192.168.10.$i is fail!"
fi
done
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etc.bak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
cat /root/backup.sh
#!/bin/bash
tar -zcf /root/etc.bak.$(date -d -1day +%F-%H).tar.xz /etc &>/dev/null
crontab -l
30 13 * * 1-5 bash /root/backup.sh
浙公网安备 33010602011771号