expect脚本示例,简单在这记录下下面会用到的一些命令
set timeout #设置超时时间,默认超时时间10s.
spawn shell command # spawn后面接的是我们要执行的shell命令
expect "hi" #匹配输出内容“hi”
{send “hello ”} # 匹配到内容''hi"后输出“hello”,“ ”是代表是返回字符。
interact #执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为[expect eof]
1 ,编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
[14:39:22 root@lucklyzpp8 data]#cat login_expect2.exp #!/usr/bin/expect set ip [lindex $argv 0] set port [lindex $argv 1] set passwd "root123" spawn ssh $ip -p$port expect { "yes/no" {send "yes ";exp_continue} "password:" {send "$passwd "} } interact [14:37:42 root@lucklyzpp8 data]#./login_expect2.exp 192.168.33.128 22 spawn ssh 192.168.33.128 -p22 root@192.168.33.128's password: Last login: Mon Oct 18 22:36:26 2021 from 192.168.33.131 [22:38:50 root@lucklyzpp7 ~]# [22:58:50 root@lucklyzpp7 ~]#exit [14:59:29 root@lucklyzpp8 data]#cat login_expect.exp #!/usr/bin/expect spawn ssh root@192.168.33.128 expect { "*(yes/no*" { send "yes ";exp_continue } "*password:*" { send "root123 ";exp_continue } } interact [14:58:15 root@lucklyzpp8 data]#./login_expect.exp [22:58:37 root@lucklyzpp7 ~]#ls anaconda-ks.cfg data redis-6.2.5.tar.gz [22:58:38 root@lucklyzpp7 ~]#hostname lucklyzpp7
[15:16:06 root@lucklyzpp8 data]#cat relogin.sh #!/bin/bash Address=192.168.33.128 User=root Passwd=root123 expect <<EOF spawn ssh $User@$Address expect { "*(yes/no*" { send "yes ";exp_continue } "*password:*" { send "root123 ";exp_continue } } interact; EOF [15:16:11 root@lucklyzpp8 data]#bash relogin.sh spawn ssh root@192.168.33.128 root@192.168.33.128's password: Last login: Mon Oct 18 23:15:31 2021 from 192.168.33.131 [23:16:14 root@lucklyzpp7 ~]#
2、生成10个随机数保存于数组中,并找出其最大值和最小值
[15:19:51 root@lucklyzpp8 data]#bash -n zu.sh [15:19:58 root@lucklyzpp8 data]#bash zu.sh “All numbers are 9226 11048 23498 13201 31271 17642 31355 16391 13548 30543” Max is 31355 Min is 9226 [15:20:04 root@lucklyzpp8 data]#cat zu.sh #!/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、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
[15:27:39 root@lucklyzpp8 data]#cat mun.sh #!/bin/bash read -p "请输入数值个数:" COUNT declare -a nums for ((i=0;i<$COUNT;i++));do num[$i]=$RANDOM done echo "The initial array:" echo ${num[@]} declare -i n=$COUNT for (( i=0; i<n-1; i++ ));do for (( j=0; j<n-1-i; j++ ));do let x=$j+1 if (( ${num[$j]} < ${num[$x]} ));then #从大到小排列 tmp=${num[$x]} num[$x]=${num[$j]} num[$j]=$tmp fi done done echo "After sort:" echo ${num[*]} echo "the max integer is $num,the min integer is ${num[$((n-1))]}" [15:29:04 root@lucklyzpp8 data]#bash mun.sh 请输入数值个数:9 The initial array: 29719 12356 24301 15770 853 20815 9794 20667 13857 After sort: 29719 24301 20815 20667 15770 13857 12356 9794 853 the max integer is 29719,the min integer is 853
4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义
[15:31:48 root@lucklyzpp8 data]#w 15:35:23 up 1:10, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.33.2 14:25 0.00s 0.58s 0.00s w [15:35:23 root@lucklyzpp8 data]#cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 142 model name : Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz stepping : 9 microcode : 0x62 ............. [15:35:49 root@lucklyzpp8 data]#uptime 15:35:54 up 1:11, 1 user, load average: 0.00, 0.00, 0.00 —————————————————————————————— 什么原因导致cpu不正常了,系统的瓶颈在哪里,通过vmstat查看 r:有多少个进程处于run状态;1个cpu处理10个进程 b: 阻塞的进程;被网络,硬盘显示处理等待状态,卡死了,block;有多少个进程在等待 swapd:当数字不停变换,表示内存不够;如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器 si:有多少kb数据从swap进入到内存中 so:有多少从内存出来的到swap bi:从磁盘读,判断磁盘读 bo:从磁盘写,判断磁盘写 us:用户占用cpu,比如mysql,http,表示用户态的资源,长时间大于50,表示资源不够,一共是100 sy:系统态 id:空闲的 wa:等待cpu的百分百,有多少进程在等待,这列很大表示cpu不够用 —————————————————— [15:35:54 root@lucklyzpp8 data]#vmstat 进程 内存 交换分区 磁盘IO 系统 cpu procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 234164 3260 225864 0 0 47 10 74 163 1 1 98 0 0 [15:36:13 root@lucklyzpp8 data]#top | head -n9 top - 15:36:54 up 1:12, 1 user, load average: 0.22, 0.06, 0.02 Tasks: 136 total, 1 running, 135 sleeping, 0 stopped, 0 zombie %Cpu(s): 5.6 us, 5.6 sy, 0.0 ni, 77.8 id, 11.1 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 699.5 total, 227.9 free, 247.8 used, 223.8 buff/cache MiB Swap: 5120.0 total, 5120.0 free, 0.0 used. 334.9 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1594 root 20 0 274288 4424 3800 R 6.7 0.6 0:00.01 top 1 root 20 0 176752 10784 8348 S 0.0 1.5 0:02.64 systemd
top - 15:45:43 up 1:21, 1 user, load average: 0.07, 0.05, 0.01 15:45:43:系统当前时间 1 users:当前1用户在线 Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie 135 total:当前有135个任务 1 running:1个任务正在运行 134 sleeping:134个进程处于睡眠状态 0 stopped:停止的进程数 0 zombie:僵死的进程数 %Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st us:用户态进程占用CPU时间百分比 sy:内核占用CPU时间百分比 ni:renice值为负的任务的用户态进程的CPU时间百分比。nice是优先级的意思
id:空闲CPU时间百分比
wa:等待I/O的CPU时间百分比
hi:CPU硬中断时间百分比
si:CPU软中断时间百分比
sar命令介绍。
监控系统状态 [15:45:44 root@lucklyzpp8 data]#yum install -y sysstat 15:57:18 root@lucklyzpp8 data]#sar -n DEV 1 Linux 4.18.0-193.el8.x86_64 (lucklyzpp8) 2021年10月18日 _x86_64_ (1 CPU) 15时58分28秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 15时58分29秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 查看系统负载 [15:58:39 root@lucklyzpp8 data]#sar -q 1 5 Linux 4.18.0-193.el8.x86_64 (lucklyzpp8) 2021年10月18日 _x86_64_ (1 CPU) 15时59分51秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 15时59分52秒 0 361 0.00 0.04 0.01 0 15时59分53秒 0 361 0.00 0.04 0.01 0 15时59分54秒 0 361 0.00 0.04 0.01 0 15时59分55秒 0 361 0.00 0.04 0.01 0 15时59分56秒 0 361 0.00 0.04 0.01 0 平均时间: 0 361 0.00 0.04 0.01 0 监控cpu [15:59:56 root@lucklyzpp8 data]#sar -u 1 3 Linux 4.18.0-193.el8.x86_64 (lucklyzpp8) 2021年10月18日 _x86_64_ (1 CPU) 16时00分34秒 CPU %user %nice %system %iowait %steal %idle 16时00分35秒 all 0.00 0.00 0.00 0.00 0.00 100.00 16时00分36秒 all 0.00 0.00 1.98 0.00 0.00 98.02 16时00分37秒 all 0.00 0.00 0.00 0.00 0.00 100.00 平均时间: all 0.00 0.00 0.67 0.00 0.00 99.33 IO传输速率的监控 [16:00:37 root@lucklyzpp8 data]#sar -b 3 3 Linux 4.18.0-193.el8.x86_64 (lucklyzpp8) 2021年10月18日 _x86_64_ (1 CPU) 16时01分34秒 tps rtps wtps bread/s bwrtn/s 16时01分37秒 0.00 0.00 0.00 0.00 0.00 16时01分40秒 0.00 0.00 0.00 0.00 0.00 16时01分43秒 0.00 0.00 0.00 0.00 0.00 tps:每秒钟物理设备的 I/O 传输总量。 rtps:每秒钟从物理设备读入的数据总量。 wtps:每秒钟向物理设备写入的数据总量。 bread/s:每秒钟从物理设备读入的数据量,单位为 块/s。 bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s。
5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
[16:26:20 root@lucklyzpp8 data]#bash ping.sh 192.168.33.2 lived,Successed 192.168.33.1 lived,Successed 192.168.33.131 lived,Successed 192.168.33.127 lived,Successed 192.168.33.128 lived,Successed 192.168.33.222 lived,Successed [16:26:49 root@lucklyzpp8 data]#cat ping.sh #!/bin/bash # Id=192.168.33. for HostId in {1..254};do { if /bin/ping -c 1 -W 1 $Id$HostId > /dev/null;then echo "$Id$HostId lived,Successed" else echo "$Id$HostId not lived,Failed" fi } & done wait [16:26:53 root@lucklyzpp8 data]#bash ping1.sh 2 lived,Successed 1 lived,Successed 131 lived,Successed 128 lived,Successed 127 lived,Successed 222 lived,Successed [16:28:01 root@lucklyzpp8 data]#cat ping1.sh #!/bin/bash # Id=192.168.33. declare -i HostId=1 while [ $HostId -le 254 ];do { ping -c 1 -W 1 $Id$HostId > /dev/null if [ $? -eq 0 ];then echo "$NetId$HostId lived,Successed" else echo "$NetId$HostId no lived,Failed" fi } & let HostId++ done wait
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
[16:34:49 root@lucklyzpp8 data]#bash etcback.sh [16:35:02 root@lucklyzpp8 data]#ls /backup/ etcbak-2021-10-17-16.log etcbak-2021-10-17-16.tar.gz [16:35:26 root@lucklyzpp8 data]#cat etcback.sh #!/bin/bash BackDir="/backup" Filename_tar="etcbak-"`date -d "-1 days" +%Y-%m-%d-%H`".tar.gz" Filename_log="etcbak-"`date -d "-1 days" +%Y-%m-%d-%H`".log" [ ! -d $BackDir ]&& mkdir -p /backup tar czvf $BackDir/$Filename_tar /etc > $BackDir/$Filename_log 2>&1
[16:38:57 root@lucklyzpp8 data]#crontab -l
30 1 * * 1-5 /data/etcback.sh