前言:
Shell
脚本是一种利用 Shell
命令解释功能的编程语言,用于解析纯文本文件并执行一系列命令。它可以在 win
/Unix
/Linux
等操作系统上直接使用,并能调用系统内部的丰富功能。熟练掌握 Shell
脚本可以使计算机操作更加轻松,同时节省大量时间。
1.Dos
攻击防范(自动屏蔽攻击 IP
)
#!/bin
/bashDATE
=$(date
+%d
/%b
/%Y
:%H
:%M
)LOG_FILE
=/usr
/local
/nginx
/logs
/demo2
.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
$ABNORMAL_IP
; do
if
[ $(iptables
-vnL
|grep
-c
"$IP
") -eq
0 ]; then
iptables
-I
INPUT
-s
$IP
-j
DROP
echo
"$(date
+'%F_
%T
') $IP
" >> /tmp
/drop_ip
.log
fidone
2.Linux
系统发送告警脚本
# yum
install
mailx
# vi
/etc
/mail
.rcset
from
=baojingtongzhi
@163.com
smtp
=smtp
.163.comset
smtp
-auth
-user
=baojingtongzhi
@163.com
smtp
-auth
-password
=123456set smtp
-auth
=login
3.MySQL
数据库备份单循环
#!/bin
/bashDATE
=$(date
+%F_
%H
-%M
-%S
)HOST
=localhostUSER
=backupPASS
=123.comBACKUP_DIR
=/data
/db_backupDB_LIST
=$(mysql
-h$HOST
-u$USER
-p$PASS
-s
-e
"show
databases
;" 2>/dev
/null
|egrep
-v
"Database
|information_schema
|mysql
|performance_schema
|sys
")for
DB
in
$DB_LIST
; do
BACKUP_NAME
=$BACKUP_DIR
/${DB
}_
${DATE
}.sql
if
! mysqldump
-h$HOST
-u$USER
-p$PASS
-B
$DB
> $BACKUP_NAME
2>/dev
/null
; then
echo
"$BACKUP_NAME
备份失败!" fidone
4.MySQL
数据库备份多循环
5.Nginx
访问访问日志按天切割
6.Nginx
访问日志分析脚本
7.查看网卡实时流量脚本
#!/bin
/bashNIC
=$1echo -e
" In
------ Out
"while
true
; do
OLD_IN
=$(awk
'$0~"'$NIC
'"{print
$2}' /proc
/net
/dev
) OLD_OUT
=$(awk
'$0~"'$NIC
'"{print
$10}' /proc
/net
/dev
) sleep
1 NEW_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
8.服务器系统配置初始化脚本
windows
wap
piness
# 安装系统性能分析工具及其他 yum
install
gcc
make
autoconf
vim
sysstat
net
-tools
iostat
if
9.监控 100 台服务器磁盘利用率脚本
#!/bin
/bashHOST_INFO
=host
.infofor
IP
in
$(awk
'/^[^#]/{print
$1}' $HOST_INFO
); do
USER
=$(awk
-v
ip
=$IP
'ip
==$1{print
$2}' $HOST_INFO
) PORT
=$(awk
-v
ip
=$IP
'ip
==$1{print
$3}' $HOST_INFO
) TMP_FILE
=/tmp
/disk
.tmp
ssh
-p
$PORT
$USER
@$IP
'df
-h
' > $TMP_FILE
USE_RATE_LIST
=$(awk
'BEGIN
{OFS
="="}/^\/dev
/{print
$NF
,int
($5)}' $TMP_FILE
) for
USE_RATE
in
$USE_RATE_LIST
; do
PART_NAME
=${USE_RATE
%=*} USE_RATE
=${USE_RATE
#*=} if
[ $USE_RATE
-ge
80 ]; then
echo
"Warning
: $PART_NAME
Partition
usage
$USE_RATE
%!" fi
donedone
转载请注明:汇站网 » (网站安全)9 个 shell
脚本/服务器攻防必备