Linux:9个实用shell运维脚本,值得收藏!
生活随笔
收集整理的這篇文章主要介紹了
Linux:9个实用shell运维脚本,值得收藏!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、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;?doif?[?$(iptables?-vnL?|grep?-c?"$IP")?-eq?0?];?theniptables?-I?INPUT?-s?$IP?-j?DROPecho?"$(date?+'%F_%T')?$IP"?>>?/tmp/drop_ip.logfi done2、Linux系統發送告警腳本
#?yum?install?mailx #?vi?/etc/mail.rc set?from=baojingtongzhi@163.com?smtp=smtp.163.com set?smtp-auth-user=baojingtongzhi@163.com?smtp-auth-password=123456 set?smtp-auth=login3、MySQL數據庫備份單循環
#!/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;?doBACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sqlif?!?mysqldump?-h$HOST?-u$USER?-p$PASS?-B?$DB?>?$BACKUP_NAME?2>/dev/null;?thenecho?"$BACKUP_NAME?備份失敗!"fi done4、MySQL數據庫備份多循環
#!/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;?doBACKUP_DB_DIR=$BACKUP_DIR/${DB}_${DATE}[?!?-d?$BACKUP_DB_DIR?]?&&?mkdir?-p?$BACKUP_DB_DIR?&>/dev/nullTABLE_LIST=$(mysql?-h$HOST?-u$USER?-p$PASS?-s?-e?"use?$DB;show?tables;"?2>/dev/null)for?TABLE?in?$TABLE_LIST;?doBACKUP_NAME=$BACKUP_DB_DIR/${TABLE}.sqlif?!?mysqldump?-h$HOST?-u$USER?-p$PASS?$DB?$TABLE?>?$BACKUP_NAME?2>/dev/null;?thenecho?"$BACKUP_NAME?備份失敗!"fidone done5、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_DIRmv?$LOG_DIR/$LOG_FILE?$LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME} donekill?-USR1?$(cat?/var/run/nginx.pid)6、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?"統計訪問最多的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?"統計時間段訪問最多的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?"統計訪問最多的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?"統計訪問頁面狀態碼數量" awk?'{a[$7"?"$9]++}END{for(v?in?a){if(a[v]>5)print?v,a[v]}}'7、查看網卡實時流量腳本
#!/bin/bash NIC=$1 echo?-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?1 done8、服務器系統配置初始化腳本
#/bin/bash #?設置時區并同步時間 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#?關閉防火墻 if?egrep?"7.[0-9]"?/etc/redhat-release?&>/dev/null;?thensystemctl?stop?firewalldsystemctl?disable?firewalld elif?egrep?"6.[0-9]"?/etc/redhat-release?&>/dev/null;?thenservice?iptables?stopchkconfig?iptables?off fi#?歷史命令顯示操作時間 if?!?grep?HISTTIMEFORMAT?/etc/bashrc;?thenecho?'export?HISTTIMEFORMAT="%F?%T?`whoami`?"'?>>?/etc/bashrc fi#?SSH超時時間 if?!?grep?"TMOUT=600"?/etc/profile?&>/dev/null;?thenecho?"export?TMOUT=600"?>>?/etc/profile fi#?禁止root遠程登錄 sed?-i?'s/#PermitRootLogin?yes/PermitRootLogin?no/'?/etc/ssh/sshd_config#?禁止定時任務向發送郵件 sed?-i?'s/^MAILTO=root/MAILTO=""/'?/etc/crontab#?設置最大打開文件數 if?!?grep?"*?soft?nofile?65535"?/etc/security/limits.conf?&>/dev/null;?thencat?>>?/etc/security/limits.conf?<<?EOF*?soft?nofile?65535*?hard?nofile?65535 EOF fi#?系統內核優化 cat?>>?/etc/sysctl.conf?<<?EOF 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#?安裝系統性能分析工具及其他 yum?install?gcc?make?autoconf?vim?sysstat?net-tools?iostat?if9、監控100臺服務器磁盤利用率腳本
#!/bin/bash HOST_INFO=host.info for?IP?in?$(awk?'/^[^#]/{print?$1}'?$HOST_INFO);?doUSER=$(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.tmpssh?-p?$PORT?$USER@$IP?'df?-h'?>?$TMP_FILEUSE_RATE_LIST=$(awk?'BEGIN{OFS="="}/^\/dev/{print?$NF,int($5)}'?$TMP_FILE)for?USE_RATE?in?$USE_RATE_LIST;?doPART_NAME=${USE_RATE%=*}USE_RATE=${USE_RATE#*=}if?[?$USE_RATE?-ge?80?];?thenecho?"Warning:?$PART_NAME?Partition?usage?$USE_RATE%!"fidone doneEND
來源:我的小碗湯
版權歸原作者所有,如有侵權,請聯系刪除。
IT技術分享社區
個人博客網站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識
總結
以上是生活随笔為你收集整理的Linux:9个实用shell运维脚本,值得收藏!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 将结构体放在flash,如何将
- 下一篇: Arch Linux下 让MPlayer