看到 9 个 shell 脚本范例,运维可以根据实际情况进行修改,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
done

2、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=*******
set smtp-auth=login

3、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
done

4、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
done

5、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
done

8、服务器系统配置初始化脚本

#/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 if

9、监控 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
done

Linux系统运维9个实用的shell脚本相关推荐

  1. 很实用的Linux 系统运维常用命令及常识(超实用)

    很实用的Linux 系统运维常用命令及常识(超实用) 作为Linux运维,需要了解Linux操作系统的基本使用和管理知识,下面脚本之家小编给大家介绍下Linux运维需要掌握的命令,想成为Linux运维 ...

  2. Linux系统运维工程师学习(基础 一)

    Linux系统运维工程师学习(基础 一) 1.1计算机软硬件与操作系统介绍 计算机系统的组成 硬件系统 主机(中央处理器,内部处理器) 外部设备(I/O设备接口,外部存储器,输入输出设备) 软件系统 ...

  3. Linux系统运维书单

    导语:全球进入了互联网+时代,越来越多的传统企业都在考虑通过网络提供产品和服务,包括互联网+教育.互联网+金融.互联网+出租车.互联网+保险等.而互联网(包括移动互联网在内)几乎都是由Linux技术支 ...

  4. Linux系统运维工程师PDF文档精选

    收藏先,O(∩_∩)O~ Linux系统运维工程师PDF文档精选 1.高级Bash脚本编程指南  http://www.unixhot.com/pdf/bash.pdf 2.Linux 策略路由和流量 ...

  5. linux系统运维面试题

    标签:linux系统运维面试题 1.     简述常用高可用技术 解答: Keepalived:Keepalived是一个保证集群高可用的服务软件,用来防止单点故障,使用VRRP协议实现.在maste ...

  6. 分享这两年从事Linux系统运维行业的感受

    2019独角兽企业重金招聘Python工程师标准>>> 2015年6月,一次偶然的机会让我这个非科班出生的人从事起了运维(operation)的行业.这两年间,从大的讲,运维社区.技 ...

  7. 墨天轮社区专属福利:与作者互动问答,民工哥全新力作《Linux系统运维指南:从入门到企业实战》送上!...

    墨墨导读:最近人民邮电出版社出版了新书<Linux系统运维指南:从入门到企业实战>,本书是同名经典畅销书的升级版,基于MySQL 5.7版本进行了内容改写,同时穿插介绍了MySQL 8.0 ...

  8. Linux系统运维人员常用速查表

    Linux系统运维人员常用速查表 walkingcloud 2020-08-09 19:55:41 Linux系统运维人员常用速查表 1.awk速查表 2.bash速查表 3.firewall-cmd ...

  9. 作为一个linux系统运维师必须掌握的定期任务执行命令cront

    定期执行任务的相关命令 作为一个linux系统运维师,在我们工作的时候需要定期去执行一些脚本或是命令,比如早上几点我们要开启什么服务,我们不可能守在计算机旁等到那个时候去手动执行那些需要脚本或是命令, ...

最新文章

  1. Selenium2+python自动化25-js处理日历控件(修改readonly属性)
  2. 十二、增加Department
  3. CTFshow 信息收集 web12
  4. 网络状态代码数字的含义
  5. PHP实现内部函数explode
  6. python3 numpy中矩阵np.dot(a,b)乘法运算
  7. 给即将35岁的产品经理提个醒
  8. 松下a6伺服驱动连接光栅尺_闭环伺服系统的数控贴条为什么要安装光栅尺?
  9. 由于区块链的影响,我决定转行!
  10. 05:整数序列的元素最大跨度值
  11. android 程序 架构,Android应用架构
  12. 计算机解八元一次方程,如何用matlab求解8元一次,含参数的方程组(共八个一次方程)...
  13. 解决mininet运行报错“ImportError: No module named mininet.log”
  14. 深响|对话THE9演唱会主创:技术打开想象力,未来的娱乐还能这么玩
  15. 3.2.CPU中的实模式
  16. 直到输到-1停止 c语言,python新人求助raw_input()问题,不断提示输入字元或数字直到输入空值停止提示。...
  17. shell双引号、单引号、反撇号的使用
  18. Dubious Document
  19. 网上调研:主流网络技术和设备的性能与市场
  20. jq获取父元素下的子元素

热门文章

  1. Python Socket通讯
  2. AIGC大一统模型来了!CV界泰斗黄煦涛创立团队提出「全能Diffusion」
  3. php 计算当前网速,PHP实现限制网速下载
  4. java计算机毕业设计ssm高校工资管理系统
  5. 二级城市邮政编码属性文件
  6. 关于.H和.C的文章
  7. 【墨者学院】WebShell文件上传漏洞分析溯源(第3题)
  8. 如果使用Qt来开发商业软件,是否需要付费?
  9. 李兴华Java培训系列课程
  10. [RockWell FTPC]随笔_PD更改字体大小