超实用的15个shell脚本,值得收藏
1、检查MySQL主从同步状态
!binbash
HOSTlocalhost
USERroot
PASSWDABC123
IOSQLSTATUS(mysqlhHOSTuUSERpPASSWDeshowslavestatusG2devnullawkSlave。Running:{print12})
foriinIOSQLSTATUS;do
THREADSTATUSNAME{i:}
THREADSTATUS{i:}
if〔THREADSTATUS!Yes〕;then
echoError:MySQLMasterSlaveTHREADSTATUSNAMEstatusisTHREADSTATUS!mailsMasterSlaveStausxxx163。com
fi
done2、DDOS攻击nginx防范
!binbash
DATE(datedbY:H:M)
LOGFILEetcnginxlogsaccess。log
ABNORMALIP(tailn5000LOGFILEgrepDATEawk{a〔1〕}END{for(iina)if(a〔i〕10)printi})
forIPinABNORMALIP;do
if〔(iptablesvnLgrepcIP)eq0〕;then
iptablesIINPUTsIPjDROP
echo(dateFT)IPtmpdropip。log
fi
done3、统计异常IP并加入黑名单脚本
!binbash
netstatnagrepESTABawk{print5}awkF:{print1}egrepv192。168127。0uniqcawk{if(2!null11){print2}}rootdropip。txt
foriin(catrootdropip。txt)
do
sbiniptablesAINPUTsijDROP
echoirootdropip。log
done4、批量创建用户
!binbash
USERFILEuser。txt
forUSERinuser{1。。10};do
if!idUSERdevnull;then
PASS(echoRANDOMmd5sumcutc18)通过random函数生成随机数然后生成md5值使用cut取前几位数字达到随机密码的目的
useraddUSER
echoPASSpasswdstdinUSERdevnull
echoUSERPASSUSERFILE
echoUSERUsercreatesuccessful。
else
echoUSERUseralreadyexists!
fi
done5、自动发布php项目
!binbash
DATE(dateFT)
WWWROOTusrlocalnginxhtml1
BACKUPDIRdatabackup
WORKDIRtmp
PROJECTNAMEphpdemo
拉取代码
cdWORKDIR
if〔!dPROJECTNAME〕;then
gitclonehttps:github。comxxxxxphpdemo
cdPROJECTNAME
else
cdPROJECTNAME
gitpull
fi
部署
if〔!dWWWROOT〕;then
mkdirpWWWROOT
rsyncavzexclude。gitWORKDIRPROJECTNAMEWWWROOT
else
rsyncavzexclude。gitWORKDIRPROJECTNAMEWWWROOT
fi6、日常巡检CPU、内存、磁盘脚本
!binbash
catHERD
日常巡检
1。CPU
2。内存
3。硬盘
0。退出
HERD
while:
do
readpPleaseenterwhatyouwanttosee:num输入想要查看的信息块
casenumin
1)
CPUIDgrepphysicalidproccpuinfosortuniqwclproccpuinfoCPU的相关配置信息
CPUCORESgrepcoresproccpuinfosortuniqawk{print4}
CPUMODEgrepmodelnameproccpuinfosortuniqawkF:{print2}
echoe33〔34mCPU数量:CPUID33〔0m
echoe33〔34mCPU核心:CPUCORES33〔0m
echoe33〔34mCPU型号:CPUMODE33〔0m
;;
2)
MEMTOTALfreemgrepMemawk{print2}free查看内存的命令
MEMFREEfreemgrepMemawk{print7}
echoe33〔34m内存总容量:{MEMTOTAL}MB33〔0m
echoe33〔34m剩余内存容量:{MEMFREE}MB33〔0m
;;
3)
DISKSIZE0初始化磁盘大小为0
SWAPSIZEfreegrepSwapawk{print2}交换分区大小
PARTITIONSIZE(dfTsed1degrepvtmpfsawk{print3})以元组形式显示硬盘大小
for((i0;iecho{PARTITIONSIZE〔〕};i))计算磁盘大小
do
DISKSIZEexprDISKSIZE{PARTITIONSIZE〔i〕}
done
((DISKSIZE(DISKSIZESWAPSIZE)10241024))单位换算
DISKFREE0初始化空闲磁盘大小为0
SWAPFREEfreegrepSwapawk{print4}空闲交换分区大小
PARTITIONFREE(dfTsed1degrepvtmpfsawk{print5})以元组形式显示空闲硬盘大小
for((i0;iecho{PARTITIONSIZE〔〕};i))计算空闲磁盘大小
do
DISKFREEexprDISKFREE{PARTITIONFREE〔i〕}
done
((DISKFREE(DISKFREESWAPFREE)10241024))单位换算
echoe33〔34m磁盘总容量:{DISKSIZE}GB33〔0m
echoe33〔34m磁盘剩余容量:{DISKFREE}GB33〔0m
;;
0)
echoe33〔34m感谢使用本系统!33〔0m
exit
;;
)
echoe33〔34mWronginput,pleaseinputagain!33〔0m输入错误,请重新输入
esac
done7、检查域名证书是否过期并发邮件
binbash
sourceetcprofile
rootdomaindate。txt
filescriptshost。txt
grepvfilewhilereadn;do
NAMEechonawk{print1}
domainechonawk{print2}
port443
NOWTIMEdatesd(dateawkF{print2,3,6})
ENDTIMEechoopensslsclientservernamedomainconnectdomain:port2devnullopensslx509nooutdatesgrepAfterawkF{print2}awkF{print1,2,4}
ENDTIME1datesdENDTIME
RST((((ENDTIME1NOWTIME))(86400)))
echoNAMEdomainRSTrootdomaindate。txt
done8、检查主机是否存活ping
!binbash
i1
while〔ile254〕
从1到254依次检测
do
pingc2i0。3w1192。168。0。idevnull
通过ping命令查询当前网段所有IP下连接状态,能ping通即表示主机开机状态,否则为关机状态
if〔?eq0〕;then
对ping的结果进行判断
echo192。168。0。iisup
输出开机状态的主机IP
else
echo192。168。0。iisdown
输出关机状态的主机IP
fi
leti
done9、自动同步数据脚本
!binbash
filedirdatawebserver
functionfrontbackup(){
cd{filedir}
rsyncavzprogresspasswordfileetcrsync。pass{filedir}rsyncbackup192。168。1。51::frontweb192。168。1。12
exit
}
frontbackup10、服务器系统配置初始化
binbash
安装系统性能分析工具及其他
yuminstallgccmakeautoconfvimsysstatnettoolsiostatiftopiotpwgetlrzszlsofunzipopensshclientsnettoolvimntpdatey
设置时区并同步时间
lnsusrsharezoneinfoAsiaShanghaietclocaltime
if!crontablgrepntpdatedevnull;then
(echo1ntpdatetime。windows。comdevnull21;crontabl)crontab
fi
禁用selinux
sediSELINUX{spermissivedisabled}etcselinuxconfig
关闭防火墙
ifegrep7。〔09〕etcredhatreleasedevnull;then
systemctlstopfirewalld
systemctldisablefirewalld
elifegrep6。〔09〕etcredhatreleasedevnull;then
serviceiptablesstop
chkconfigiptablesoff
fi
历史命令显示操作时间
if!grepHISTTIMEFORMATetcbashrc;then
echoexportHISTTIMEFORMATYmdH:M:Swhoamietcbashrc
fi
SSH超时时间
if!grepTMOUT600etcprofiledevnull;then
echoexportTMOUT600etcprofile
fi
禁止root远程登录切记给系统添加普通用户,给su到root的权限
sedisPermitRootLoginyesPermitRootLoginnoetcsshsshdconfig
禁止定时任务向发送邮件
sedisMAILTOrootMAILTOetccrontab
设置最大打开文件数
if!grepsoftnofile65535etcsecuritylimits。confdevnull;then
catetcsecuritylimits。confEOF
softnofile65535
hardnofile65535
EOF
fi
系统内核优化
catetcsysctl。confEOF
net。ipv4。tcpsyncookies1
net。ipv4。tcpmaxtwbuckets20480
net。ipv4。tcpmaxsynbacklog20480
net。core。netdevmaxbacklog262144
net。ipv4。tcpfintimeout20
EOF
减少SWAP使用
echo0procsysvmswappiness11、一键查看服务器利用率
!binbash
functioncpu(){
util(vmstatawk{if(NR3)print1314})
iowait(vmstatawk{if(NR3)print16})
echoCPU使用率:{util},等待磁盘IO相应使用率:{iowait}:{iowait}
}
functionmemory(){
totalfreemawk{if(NR2)printf。1f,21024}
usedfreemawk{if(NR2)printf。1f,(2NF)1024}
availablefreemawk{if(NR2)printf。1f,NF1024}
echo内存总大小:{total}G,使用:{used}G,剩余:{available}G
}
disk(){
fs(dfhawkdev{print1})
forpinfs;do
mounted(dfhawk1p{printNF})
size(dfhawk1p{print2})
used(dfhawk1p{print3})
usedpercent(dfhawk1p{print5})
echo硬盘挂载点:mounted,总大小:size,使用:used,使用率:usedpercent
done
}
functiontcpstatus(){
summary(ssantpawk{status〔1〕}END{for(iinstatus)printfi:status〔i〕})
echoTCP连接状态summary
}
cpu
memory
disk
tcpstatus12、找出占用CPU内存过高的进程
!binbash
echoCUP占用前10排序
pseouser,pid,pcpu,pmem,argssortpcpuheadn10
echo内存占用前10排序
pseouser,pid,pcpu,pmem,argssortpmemheadn1013、批量检测网站是否异常并邮件通知
!binbash
URLLISTwww。baidu。comwww。ctnrs。comwww。dermatech。net。cnwww。dermatech。com。cnwww。dermatech。cnwww。dermatech。topwww。dermatech。org
forURLinURLLIST;do
FAILCOUNT0
for((i1;i3;i));do
HTTPCODE(curlodevnullconnecttimeout3sw{httpcode}URL)
if〔HTTPCODEeq200〕;then
echoURLOK
break
else
echoURLretryFAILCOUNT
letFAILCOUNT
fi
done
if〔FAILCOUNTeq3〕;then
echoWarning:URLAccessfailure!
echo网站URL坏掉,请及时处理mailsURL网站高危1794748404qq。com
fi
done14、一键部署LNMP网站平台脚本
!binbash
NGINXV1。15。6
PHPV5。6。36
TMPDIRtmp
INSTALLDIRusrlocal
PWDCPWD
echo
echoeMenu
echoe1。InstallNginx
echoe2。InstallPHP
echoe3。InstallMySQL
echoe4。DeployLNMP
echoe9。Quit
functioncommandstatuscheck(){
if〔?ne0〕;then
echo1
exit
fi
}
functioninstallnginx(){
cdTMPDIR
yuminstallygccgcccmakeopenssldevelpcredevelwget
wgethttp:nginx。orgdownloadnginx{NGINXV}。tar。gz
tarzxfnginx{NGINXV}。tar。gz
cdnginx{NGINXV}
。configureprefixINSTALLDIRnginx
withhttpsslmodule
withhttpstubstatusmodule
withstream
commandstatuscheckNginx平台环境检查失败!
makej4
commandstatuscheckNginx编译失败!
makeinstall
commandstatuscheckNginx安装失败!
mkdirpINSTALLDIRnginxconfvhost
aliascpcp;cprfPWDCnginx。confINSTALLDIRnginxconf
rmrfINSTALLDIRnginxhtml
echookINSTALLDIRnginxhtmlstatus。html
echolt;?phpechook?INSTALLDIRnginxhtmlstatus。php
INSTALLDIRnginxsbinnginx
commandstatuscheckNginx启动失败!
}
functioninstallphp(){
cdTMPDIR
yuminstallygccgcccmakegddevellibxml2devel
libcurldevellibjpegdevellibpngdevelopenssldevel
libmcryptdevellibxsltdevellibtidydevel
wgethttp:docs。php。netdistributionsphp{PHPV}。tar。gz
tarzxfphp{PHPV}。tar。gz
cdphp{PHPV}
。configureprefixINSTALLDIRphp
withconfigfilepathINSTALLDIRphpetc
enablefpmenableopcache
withmysqlwithmysqliwithpdomysql
withopensslwithzlibwithcurlwithgd
withjpegdirwithpngdirwithfreetypedir
enablembstringenablehash
commandstatuscheckPHP平台环境检查失败!
makej4
commandstatuscheckPHP编译失败!
makeinstall
commandstatuscheckPHP安装失败!
cpphp。iniproductionINSTALLDIRphpetcphp。ini
cpsapifpmphpfpm。confINSTALLDIRphpetcphpfpm。conf
cpsapifpminit。d。phpfpmetcinit。dphpfpm
chmodxetcinit。dphpfpm
etcinit。dphpfpmstart
commandstatuscheckPHP启动失败!
}
readp请输入编号:number
casenumberin
1)
installnginx;;
2)
installphp;;
3)
installmysql;;
4)
installnginx
installphp
;;
9)
exit;;
esac15、自动发布Java项目(Tomcat)
!binbash
DATE(dateFT)
TOMCATNAME1
TOMCATDIRusrlocalTOMCATNAME
ROOTTOMCATDIRwebappsROOT
BACKUPDIRdatabackup
WORKDIRtmp
PROJECTNAMEtomcatjavademo
拉取代码
cdWORKDIR
if〔!dPROJECTNAME〕;then
gitclonehttps:github。comxxxxtomcatjavademo
cdPROJECTNAME
else
cdPROJECTNAME
gitpull
fi
构建
mvncleanpackageDmaven。test。skiptrue
if〔?ne0〕;then
echomavenbuildfailure!
exit1
fi
部署
TOMCATPID(psefgrepTOMCATNAMEegrepvgrepawkNR1{print2})
〔nTOMCATPID〕kill9TOMCATPID
〔dROOT〕mvROOTBACKUPDIR{TOMCATNAME}ROOTDATE
unzipWORKDIRPROJECTNAMEtarget。wardROOT
TOMCATDIRbinstartup。sh
如果您喜欢本文,就请动动您的发财手为本文点赞评论转发,让我们一起学习更多运维相关知识,最后请记得关注我。