在工作中,我们经常需要使用一些自动化工具来提高工作效率。其中,Shell脚本是一种非常实用的工具,可以帮助我们快速完成各种任务。今天,我来分享一些常用的Shell脚本,希望对大家有所帮助。
1.检测两台服务器指定目录下的文件一致性
这个脚本可以用于比较两个服务器上的指定目录是否一致。通过比较文件的文件的MD5值,可以快速发现两个服务器之间的差异。
#!/bin/bash
######################################
检测两台服务器指定目录下的文件一致性
#####################################
#通过对比两台服务器上文件的md5值,达到检测一致性的目的
dir=/data/web
b_ip=192.168.88.10
#将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中
find $dir -type f|xargs md5sum > /tmp/md5_a.txt
ssh $b_ip"find $dir -type f|xargs md5sum > /tmp/md5_b.txt"
scp $b_ip:/tmp/md5_b.txt /tmp
#将文件名作为遍历对象进行一一比对
for f in `awk '{print 2} /tmp/md5_a.txt'`do
#以a机器为标准,当b机器不存在遍历对象中的文件时直接输出不存在的结果
if grep -qw "$f" /tmp/md5_b.txt
then
md5_a=`grep -w "$f" /tmp/md5_a.txt|awk '{print 1}'`
md5_b=`grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'`
#当文件存在时,如果md5值不一致则输出文件改变的结果
if [ $md5_a != $md5_b ]then
echo"$f changed."
fi
else
echo"$f deleted."
fi
done
2.检测网卡流量,并按规定格式记录在日志中
该脚本是通过执行sar命令,把服务器的网卡信息收集起来,可以通过该脚本把网卡的流量做成图表可视化的界面:
#!/bin/bash
#######################################################
#检测网卡流量,并按规定格式记录在日志中#规定一分钟记录一次
#日志格式如下所示:
#2019-08-12 20:40
#ens33 input: 1234bps
#ens33 output: 1235bps
######################################################3
while :
do
#设置语言为英文,保障输出结果是英文,否则会出现bug
LANG=en
logfile=/tmp/`date +%d`.log
#将下面执行的命令结果输出重定向到logfile日志中
exec >> $logfile
date +"%F %H:%M"
#sar命令统计的流量单位为kb/s,日志格式为bps,因此要*1000*8
sar -n DEV 1 59|grep Average|grep ens33|awk '{print $2,"t","input:","t",$5*1000*8,"bps","n",$2,"t","output:","t",$6*1000*8,"bps"}'
echo"####################"
#因为执行sar命令需要59秒,因此不需要sleep
done
3.监测 Nginx 访问日志 502 情况,并做相应动作
假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。
#场景:
#1.访问日志文件的路径:/data/log/access.log
#2.脚本死循环,每10秒检测一次,10秒的日志条数为300条,出现502的比例不低于10%(30条)则需要重启php-fpm服务
#3.重启命令为:/etc/init.d/php-fpm restart
#!/bin/bash
###########################################################
#监测Nginx访问日志502情况,并做相应动作
###########################################################
log=/data/log/access.log
N=30 #设定阈值
while :do
#查看访问日志的最新300条,并统计502的次数
err=`tail -n 300 $log |grep -c '502" '`
if [ $err -ge $N ]
then
/etc/init.d/php-fpm restart 2> /dev/null
#设定60s延迟防止脚本bug导致无限重启php-fpm服务
sleep 60
fi
sleep 10
done
4.扫描主机端口状态
在日常的工作中,通常需要扫描主机开放了哪些端口,进而作出合理的安全规划,通过以下的脚本,可以大大提高效率
#!/bin/bash
# 检查参数数量
if [ "$#" -ne 2 ]; then
echo"用法:$0 "
exit 1
fi
IP="$1"
PORT="$2"
# 使用nc (netcat) 命令扫描端口
nc -z -v -w5 "$IP""$PORT" > /dev/null 2>&1
# 根据nc命令的返回值判断端口状态
if [ $? -eq 0 ]; then
echo"端口 $PORT 是开放的"
else
echo"端口 $PORT 是关闭的"
fi
将此脚本保存为scan_port.sh,并确保它具有可执行权限(使用chmod +x scan_port.sh)。然后,您可以通过提供目标IP地址和端口号来运行此脚本,例如:
./scan_port.sh 192.168.1.1 80
5.Expect 实现 SSH 免交互执行命令
Expect是一个自动交互式应用程序的工具,如telnet,ftp,passwd等。
需先安装expect软件包
方法1:EOF标准输出作为expect标准输入
#!/bin/bash
USER=root
PASS=123.com
IP=192.168.1.120
expect >~/ssh-login-limit.log
fi
done
anyway,以上是关于日常工作中常用的脚本分享。