9 個實用 shell 腳本,建議收藏!
文章轉(zhuǎn)載:我的小碗湯
文章轉(zhuǎn)載:我的小碗湯
Dos 攻擊防范(自動屏蔽攻擊 IP)
#!/bin/bash
DATE=$(date?+%d/%b/%Y:%H:%M)
LOG_FILE=/usr/local/nginx/logs/demo2.access.log
ABNORMAL_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
????fi
done
Linux 系統(tǒng)發(fā)送告警腳本
#?yum?install?mailx
#?vi?/etc/mail.rc
[email protected]?smtp=smtp.163.com
[email protected]?smtp-auth-password=123456
set?smtp-auth=login
MySQL 數(shù)據(jù)庫備份單循環(huán)
#!/bin/bash
DATE=$(date?+%F_%H-%M-%S)
HOST=localhost
USER=backup
PASS=123.com
BACKUP_DIR=/data/db_backup
DB_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?備份失敗!"
????fi
done
MySQL 數(shù)據(jù)庫備份多循環(huán)
#!/bin/bash
DATE=$(date?+%F_%H-%M-%S)
HOST=localhost
USER=backup
PASS=123.com
BACKUP_DIR=/data/db_backup
DB_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_DB_DIR=$BACKUP_DIR/${DB}_${DATE}
????[?!?-d?$BACKUP_DB_DIR?]?&&?mkdir?-p?$BACKUP_DB_DIR?&>/dev/null
????TABLE_LIST=$(mysql?-h$HOST?-u$USER?-p$PASS?-s?-e?"use?$DB;show?tables;"?2>/dev/null)
????for?TABLE?in?$TABLE_LIST;?do
????????BACKUP_NAME=$BACKUP_DB_DIR/${TABLE}.sql
????????if?!?mysqldump?-h$HOST?-u$USER?-p$PASS?$DB?$TABLE?>?$BACKUP_NAME?2>/dev/null;?then
????????????echo?"$BACKUP_NAME?備份失敗!"
????????fi
????done
done
Nginx 訪問訪問日志按天切割
#!/bin/bash
LOG_DIR=/usr/local/nginx/logs
YESTERDAY_TIME=$(date?-d?"yesterday"?+%F)
LOG_MONTH_DIR=$LOG_DIR/$(date?+"%Y-%m")
LOG_FILE_LIST="default.access.log"
for?LOG_FILE?in?$LOG_FILE_LIST;?do
????[?!?-d?$LOG_MONTH_DIR?]?&&?mkdir?-p?$LOG_MONTH_DIR
????mv?$LOG_DIR/$LOG_FILE?$LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME}
done
kill?-USR1?$(cat?/var/run/nginx.pid)
Nginx 訪問日志分析腳本
#!/bin/bash
#?日志格式:?$remote_addr?-?$remote_user?[$time_local]?"$request"?$status?$body_bytes_sent?"$http_referer"?"$http_user_agent"?"$http_x_forwarded_for"
LOG_FILE=$1
echo?"統(tǒng)計訪問最多的10個IP"
awk?'{a[$1]++}END{print?"UV:",length(a);for(v?in?a)print?v,a[v]}'?$LOG_FILE?|sort?-k2?-nr?|head?-10
echo?"----------------------"
echo?"統(tǒng)計時間段訪問最多的IP"
awk?'$4>="[01/Dec/2018:13:20:25"?&&?$4<="[27/Nov/2018:16:20:49"{a[$1]++}END{for(v?in?a)print?v,a[v]}'?$LOG_FILE?|sort?-k2?-nr|head?-10
echo?"----------------------"
echo?"統(tǒng)計訪問最多的10個頁面"
awk?'{a[$7]++}END{print?"PV:",length(a);for(v?in?a){if(a[v]>10)print?v,a[v]}}'?$LOG_FILE?|sort?-k2?-nr
echo?"----------------------"
echo?"統(tǒng)計訪問頁面狀態(tài)碼數(shù)量"
awk?'{a[$7"?"$9]++}END{for(v?in?a){if(a[v]>5)print?v,a[v]}}'
查看網(wǎng)卡實時流量腳本
#!/bin/bash
NIC=$1
echo?-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?1
done
服務(wù)器系統(tǒng)配置初始化腳本
#/bin/bash
#?設(shè)置時區(qū)并同步時間
ln?-s?/usr/share/zoneinfo/Asia/Shanghai?/etc/localtime
if?!?crontab?-l?|grep?ntpdate?&>/dev/null?;?then
????(echo?"*?1?*?*?*?ntpdate?time.windows.com?>/dev/null?2>&1";crontab?-l)?|crontab
fi
#?禁用selinux
sed?-i?'/SELINUX/{s/permissive/disabled/}'?/etc/selinux/config
#?關(guān)閉防火墻
if?egrep?"7.[0-9]"?/etc/redhat-release?&>/dev/null;?then
????systemctl?stop?firewalld
????systemctl?disable?firewalld
elif?egrep?"6.[0-9]"?/etc/redhat-release?&>/dev/null;?then
????service?iptables?stop
????chkconfig?iptables?off
fi
#?歷史命令顯示操作時間
if?!?grep?HISTTIMEFORMAT?/etc/bashrc;?then
????echo?'export?HISTTIMEFORMAT="%F?%T?`whoami`?"'?>>?/etc/bashrc
fi
#?SSH超時時間
if?!?grep?"TMOUT=600"?/etc/profile?&>/dev/null;?then
????echo?"export?TMOUT=600"?>>?/etc/profile
fi
#?禁止root遠(yuǎn)程登錄
sed?-i?'s/#PermitRootLogin?yes/PermitRootLogin?no/'?/etc/ssh/sshd_config
#?禁止定時任務(wù)向發(fā)送郵件
sed?-i?'s/^MAILTO=root/MAILTO=""/'?/etc/crontab
#?設(shè)置最大打開文件數(shù)
if?!?grep?"*?soft?nofile?65535"?/etc/security/limits.conf?&>/dev/null;?then
????cat?>>?/etc/security/limits.conf?<????*?soft?nofile?65535
????*?hard?nofile?65535
EOF
fi
#?系統(tǒng)內(nèi)核優(yōu)化
cat?>>?/etc/sysctl.conf?<net.ipv4.tcp_syncookies?=?1
net.ipv4.tcp_max_tw_buckets?=?20480
net.ipv4.tcp_max_syn_backlog?=?20480
net.core.netdev_max_backlog?=?262144
net.ipv4.tcp_fin_timeout?=?20
EOF
#?減少SWAP使用
echo?"0"?>?/proc/sys/vm/swappiness
#?安裝系統(tǒng)性能分析工具及其他
yum?install?gcc?make?autoconf?vim?sysstat?net-tools?iostat?if
監(jiān)控 100 臺服務(wù)器磁盤利用率腳本
#!/bin/bash
HOST_INFO=host.info
for?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
????done
done

后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨 后臺回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。
推薦閱讀
MySQL常用函數(shù)
程序員離職當(dāng)天“刪庫跑路” 被判刑10個月!
騰訊應(yīng)屆生,怒懟管理層,被標(biāo)注“永不錄用”?
MySQL模糊查詢再也用不著 like+% 了!
知乎:國內(nèi)碼農(nóng)和國外碼農(nóng)有哪些區(qū)別?

推薦閱讀

評論
圖片
表情
