开篇小叙:

脚本写的好,下班下得早!咱们的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作。

例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而确定问题在于什么。完成这个任务,如果一味希望采用编译型语言来编写这样的代码,实践中的时间和精力是不够的,这个时候就需要发挥脚本的神奇作用!

好不夸张的说,能否写出高效实用的脚本代码,直接影响着一个程序员的性福生活[下班时间]。下面整理 13 个实用的脚本,需要的时候改改直接用,建议收藏!

1、list_sys_status.sh

显示系统使用的以下信息:
主机名、IP地址、子网掩码、网关、DNS服务器IP地址信息

#!/bin/bash
IP=`ifconfig eth0 | head -2 | tail -1 | awk '{print $2}' | awk -F":" '{print $2}'`
ZW=` ifconfig eth0 | head -2 | tail -1 | awk '{print $3}' | awk -F":" '{print $2}'`
GW=`route -n | tail -1 | awk '{print $2}'`
HN=`hostname`
DNS=`head -1 /etc/resolv.conf | awk '{print $2}'`
echo '此机IP地址是' $IP
echo '此机子网掩码是' $ZW
echo '此机网关是' $GW
echo '此机主机名是' $HN
echo '此机DNS是' $DNS

2、mysqlbak.sh备份数据库目录脚本

#!/bin/bash
DAY=`date +%Y%m%d`
SIZE=`du -sh /var/lib/mysql`
echo "Date: $DAY" >> /tmp/dbinfo.txt
echo "Data Size: $SIZE" >> /tmp/dbinfo.txt
cd /opt/dbbak &> /dev/null || mkdir /opt/dbbak
tar zcf /opt/dbbak/mysqlbak-${DAY}.tar.gz /var/lib/mysql /tmp/dbinfo.txt &> /dev/null
rm -f /tmp/dbinfo.txtcrontab-e
55 23 */3 * * /opt/dbbak/dbbak.sh

3、每周日半夜23点半,对数据库服务器上的webdb库做完整备份

每备份文件保存到系统的/mysqlbak目录里
用系统日期做备份文件名 webdb-YYYY-mm-dd.sql
每次完整备份后都生成新的binlog日志
把当前所有的binlog日志备份到/mysqlbinlog目录下

#mkdir /mysqlbak
#mkdir /mysqlbinlog
#service mysqld start
cd /shell
#vi webdb.sh
#!/bin/bash
day=`date +%F`
mysqldump -hlocalhost -uroot -p123 webdb > /mysqlbak/webdb-${day}.sql
mysql -hlocalhost -uroot -p -e "flush logs"
tar zcf /mysqlbinlog.tar.gz /var/lib/mysql/mysqld-bin.0*
#chmod +x webdb.sh
#crontab -e
30 23 * * 7 /shell/webdb.sh

4、very.ser.sh(检查任意一个服务的运行状态)

只检查服务vsftpd httpd sshd crond、mysql中任意一个服务的状态
如果不是这5个中的服务,就提示用户能够检查的服务名并退出脚本
如果服务是运行着的就输出 "服务名 is running"
如果服务没有运行就启动服务

方法1:使用read写脚本
#!/bin/bash
read -p "请输入你的服务名:" service
if [ $service != 'crond' -a $service != 'httpd' -a $service != 'sshd' -a $service != 'mysqld' -a $service != 'vsftpd' ];then
echo "只能够检查'vsftpd,httpd,crond,mysqld,sshd"
exit 5
fi
service $service status &> /dev/nullif [ $? -eq 0 ];thhen
echo "服务在线"
else
service $service start
fi或方法2:使用位置变量来写脚本
if [ -z $1 ];then
echo "You mast specify a servername!"
echo "Usage: `basename$0` servername"
exit 2
fi
if [ $1 == "crond" ] || [ $1 == "mysql" ] || [ $1 == "sshd" ] || [ $1 == "httpd" ] || [ $1 == "vsftpd" ];then
service $1 status &> /dev/null
if [ $? -eq 0 ];then
echo "$1 is running"
else
service $1 start
fi
else
echo "Usage:`basename $0` server name"
echo "But only check for vsftpd httpd sshd crond mysqld" && exit2
fi

5、pc_noline.sh

输出192.168.1.0/24网段内在线主机的ip地址
统计不在线主机的台数,
并把不在线主机的ip地址和不在线时的时间保存到/tmp/ip.txt文件里

#!/bin/bash
ip=192.168.1.
j=0
for i in `seq 10 12`
do
ping -c 3 $ip$i &> /dev/null
if [ $? -eq 0 ];then
echo 在线的主机有:$ip$i
else
let j++
echo $ip$i >> /tmp/ip.txt
date >> /tmp/ip.txt
fi
done
echo 不在线的主机台数有 $j

6、一个简单的网站论坛测试脚本

用交互式的输入方法实现自动登录论坛数据库,修改用户密码

[root@test1 scripts]# vim input.sh#!/bin/bashEnd=ucenter_members
MYsql=/home/lnmp/mysql/bin/mysqlread -p "Enter a website directory : " webdir
WebPath=/home/WebSer/$webdir/config
echo $WebPathread -p "Enter dbuser name : " dbuser
echo $dbuserread -sp "Enter dbuser password : " dbpassread -p "Enter db name : " dbname
echo $dbnameread -p "Enter db tablepre : " dbtablepre
echo $dbtablepreGlobalphp=`grep "tablepre*" $WebPath/config_global.php |cut -d "'" -f8`
Ucenterphp=`grep "UC_DBTABLEPRE*" $WebPath/config_ucenter.php |cut -d '.' -f2 | awk -F "'" '{print $1}'`if [ $dbtablepre == $Globalphp ] && [ $dbtablepre == $Ucenterphp ];thenStart=$dbtableprePre=`echo $Start$End`read -p "Enter you name : " usersetecho $usersetResult=`$MYsql -u$dbuser -p$dbpass $dbname -e "select username from $Pre where username='$userset'\G"|cut -d ' ' -f2|tail -1`echo $Resultif [ $userset == $Result ];thenread -p "Enter your password : " userpasspassnew=`echo -n $userpass|openssl md5|cut -d ' ' -f2`$MYsql -u$dbuser -p$dbpass $dbname -e "update $Pre set password='$passnew' where username='$userset';"$MYsql -u$dbuser -p$dbpass $dbname -e "flush privileges;"elseecho "$userset is not right user!"exit 1fi
elseexit 2
fi

7、slave_status.sh(检查mysql主从从结构中从数据库服务器的状态)

1)本机的数据库服务是否正在运行
2)能否与主数据库服务器正常通信
3)能否使用授权用户连接数据库服务器
4)本机的slave_IO进程是否处于YES状态
本机的slave_SQL进程是否处于YES状态

[root@test1 scripts]# vim test.sh#!/bin/bash
netstat -tulnp | grep :3306 > /dev/null
if [ $? -eq 0 ];then
echo "服务正在运行"
else
service mysqld start
fi
ping -c 3 192.168.1.100 &> /dev/null
if [ $? -eq 0 ];then
echo "网络连接正常"
else
echo "网络连接失败"
fi
mysql -h192.168.1.100 -uroot -p123456 &> /dev/null
if [ $? -eq 0 ];then
echo "数据库连接成功"
else
echo "数据库连接失败"
fi
IO= mysql -uroot -p123 -e "show slave status\G" | grep Slave_IO_Running | awk '{print $2}' > /dev/null
SQL= mysql -uroot -p123 -e "show slave status\G" | grep Slave_SQL_Running | awk '{print $2}' /dev/null
if [ IO==Yes ] && [ SQL==Yes ];then
echo “IO and SQL 连接成功”
else
echo "IO线程和SQL线程连接失败"
fi

8、拒绝超过n次登陆的ip进行ssh连接

结合/var/log/secure文件,将ssh登陆失败次数大于N的IP封顶N=3
SEC_FILE=/var/log/secure
for ip in `grep "Failed password" $SEC_FILE|grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort -n|uniq -c|awk '{if($1>$N) print $2}'`
do
iptables -A INPUT -s $ip -p tcp --dport 22 -j DROP
done

9、CentOS7防止恶意破解root账户的脚本

#!/bin/bash
#Denyhosts SHELL SCRIPT
#2017-01-24
#
#When a IP is accessed 50 times through sshd, it is written to the hosts.deny file,
#which prohibits the IP from connecting to the host via sshd
#
#Add to timing taskcat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2"="$1;}' > /root/black.txtDEFINE=50
for i in $(cat /root/black.txt)
doIP=$( $i | awk -F'=' '{print $1}')NUM=$( $i | awk -F'=' '{print $2}')if [$NUM -gt $DEFINE]; thengrep $IP /etc/hosts.deny > /dev/nullif [$? -gt 0];thenecho "sshd:$IP" >> /etc/hosts.denyfifi
done

10、查看网卡实时流量

# vi check_network.sh"#!/bin/bashNIC=$1echo -e "" In ------ Out""while true; doOLD_IN=$(awk '$0~""'$NIC'""{print $2}' /proc/net/dev)OLD_OUT=$(awk '$0~""'$NIC'""{print $10}' /proc/net/dev)sleep 1NEW_IN=$(awk '$0~""'$NIC'""{print $2}' /proc/net/dev)NEW_OUT=$(awk '$0~""'$NIC'""{print $10}' /proc/net/dev)IN=$(printf ""%.1f%s"" ""$((($NEW_IN-$OLD_IN)/1024))"" ""KB/s"")OUT=$(printf ""%.1f%s"" ""$((($NEW_OUT-$OLD_OUT)/1024))"" ""KB/s"")echo ""$IN $OUT""sleep 1done"执行:sh check.sh ens33

11、批量查询网站是否可以访问

# vi check_web.sh"#!/bin/bashURL_LIST=""www.baidu.com www.sina.cn""for URL in $URL_LIST; doFAIL_COUNT=0for ((i=1;i<=3;i++)); doHTTP_CODE=$(curl -I -m 10 -o /dev/null -s -w %{http_code} $URL)if [ $HTTP_CODE -eq 200 ]; thenecho ""$URL OK""breakelseecho ""$URL retry $FAIL_COUNT""let FAIL_COUNT++fidoneif [ $FAIL_COUNT -eq 3 ]; thenecho ""Warning: $URL Access failure!""fidone"

12、检查 MySQL 主从同步状态

# vi check_mysql.sh"#!/bin/bashUSER=bakPASSWD=123456IO_SQL_STATUS=$(mysql -u$USER -p$PASSWD -e 'show slave statusG' |awk -F:'/Slave_.*_Running/{gsub("": "","":"");print $0}') #gsub 去除冒号后面的空格for i in $IO_SQL_STATUS; doTHREAD_STATUS_NAME=${i%:*}THREAD_STATUS=${i#*:}if [ ""$THREAD_STATUS"" != ""Yes"" ]; thenecho ""Error: MySQL Master-Slave $THREAD_STATUS_NAME status is$THREAD_STATUS!""fidone"

13、DDOS攻击nginx防范

"#!/bin/bashDATE=$(date +%d/%b/%Y:%H:%M)LOG_FILE=/etc/nginx/logs/access.logABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]>10)print i}')for IP in $ABNORMALIP; doif [ $(iptables -vnL |grep -c ""$IP"") -eq 0 ]; theniptables -I INPUT -s $IP -j DROPecho ""$(date +'%F%T') $IP"" >> /tmp/drop_ip.logfidone"

本人还编写很多日常实用脚本 由于篇幅太大 就不一一写出来了 需要的朋友可以友情三连后扫描下方二维码 暗号:csdn 即可领取!

【脚本小子狂喜】日常实用脚本推荐相关推荐

  1. 7 个日常实用的 Shell 拿来就用脚本实例!

    今天来给大家分享 7 个日常实用脚本: 1.list_sys_status.sh 显示系统使用的以下信息: 主机名.IP地址.子网掩码.网关.DNS服务器IP地址信息 #!/bin/bash IP=` ...

  2. 盲目自学网络安全只会成为脚本小子?

    前言:我们来看看怎么学才不会成为脚本小子 目录: 一,怎么入门? 1.Web 安全相关概念(2 周) 2.熟悉渗透相关工具(3 周) 3.渗透实战操作(5 周) 4.关注安全圈动态(1 周) 5.熟悉 ...

  3. 如何自学网络安全 才不会成为脚本小子?

    前言:我们来看看怎么学才不会成为脚本小子 目录: 一,怎么入门? 1.Web 安全相关概念(2 周) 了解网络安全相关法律法规 熟悉基本概念(SQL 注入.上传.XSS.CSRF.一句话木马等). 通 ...

  4. 8 个 Python 实用脚本,赶紧收藏备用!

    脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而确定问题在于什么.完成这 ...

  5. 告别脚本小子系列丨JAVA安全(6)——反序列化利用链(上)

    0x01 前言 我们通常把反序列化漏洞和反序列化利用链分开来看,有反序列化漏洞不一定有反序列化利用链(经常用shiro反序列化工具的人一定遇到过一种场景就是找到了key,但是找不到gadget,这也就 ...

  6. 如何从脚本小子变成黑客大神?【网络安全】

    学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多google,baidu,我们往往都遇 ...

  7. 109个shell实用脚本

    109个shell实用脚本 1.Dos 攻击防范(自动屏蔽攻击 IP) #!/bin/bash DATE=$(date +%d/%b/%Y:%H:%M) LOG_FILE=/usr/local/ngi ...

  8. 告别脚本小子系列丨JAVA安全(7)——反序列化利用链(中)

    0x01 前言 距离上一次更新JAVA安全的系列文章已经过去一段时间了,在上一篇文章中介绍了反序列化利用链基本知识,并阐述了Transform链的基本知识.Transform链并不是一条完整的利用链, ...

  9. 脚本小子最爱的20款黑客工具

    在过去的一年里,你都用了哪些黑客工具呢?统计了全球各大网站数据(浏览量.下载量.使用量等等),为大家总结出了最受欢迎的 20 款黑客工具.涉及范围主要集中在 信息收集.Android黑客工具.自动化工 ...

  10. 如何从脚本小子变成黑客大神?

    学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多google,baidu,我们往往都遇 ...

最新文章

  1. Fortinet网络接入及安全方案配置步骤
  2. Jsp-request与requestScope的区别
  3. [codeforces 508E]Maximum Matching
  4. 看奥运之五:关于“鸟巢”、“水立方”的数据和内涵
  5. innobackupex备份工具
  6. python文件读写方法手机_python读取文件—txt文件常用读写操作
  7. mysql远程一会不用卡住_连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,...
  8. 【2016年第2期】专题导读:大数据与社会治理
  9. Java中正则表达式替换字符串
  10. ubuntu下nginx安装
  11. H.265 SAO技术
  12. matlab程序 surf算法,SURF算法代码 matlab
  13. python负数的表示方法_负整数的Python表示
  14. 利用单片机给直流升压
  15. Social Radio:像收听广播一样收听Twitter状态更新
  16. 链式前向星dij堆优化
  17. hdr_beg(host) hdr_reg(host) hdr_dom(host)
  18. ssh登录windows
  19. 学习了C语言的第一个语言
  20. Xilinx原语的用法

热门文章

  1. HHUOJ 1389 出栈合法性
  2. Pure DNS 可能是迄今最不稳定的DNS
  3. 移动端以及 PC浏览器页面分享到朋友圈等的功能实现
  4. android分享微信获取资源失败怎么办,Android处理使用Intent分享图片,以及在微信7.0版本出现“获取资源失败,无法分享到朋友圈”,导致分享失败的问题...
  5. 基于JAVA南京传媒学院门户网计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  6. about-page
  7. 怎样注册完申请个人电子邮箱?2022邮箱号码大全速看
  8. Unity3D——打飞碟游戏(2)
  9. 朋友在B站魔力赏抽到的动漫周边,把我看馋了
  10. wordpress主题开发教程