Linux服务器超级实用的脚本

1.使用INOTIFY+RSYNC自动实时同步数据

代码执行: bash inotify_rsyncs.sh

:cat inotify_rsyncs.sh 脚本内容如下:

#!bing/bash
# Author: reyn
#检测/data路径下的文件变化,排除Temp目录
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /data/ --exclude=Temp"
# 同步数据
RSYNC_CMD1="rsync -avz /data/ --exclude-from=/etc/rc.d/init.d/exclude.txt harry@10.14.2.102:/data/ --delete"
RSYNC_CMD2="rsync -avz /data/ --exclude-from=/etc/rc.d/init.d/exclude.txt harry@10.14.2.103:/data/ --delete"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
doif [ $(pgrep rsync | wc -l) -le 0 ] ; then$RSYNC_CMD1&&$RSYNC_CMD2 >> rsync.logfi
done

2. MYSQL自动备份以及删除备份脚本

代码执行:bash db_backup.sh
:cat db_backup.sh脚本内容如下:

#!/bin/bash
# Author: reyn
# Description: Database backup script
dbback(){
# 定义变量
db_user="ma_prd"
db_passwd="<password>"
db_path="/data/bakmysql"
db_file="backuprecord"
db_date=`date +%Y%m%d_%H:%M:%S`
# 判断路径是否存在
[ -d $db_path ] || exit 2
# 使用mysqldump备份数据,并用gzip进行压缩
mysqldump -u$db_user  -p$db_passwd --single-transaction ma  | gzip > $db_path/${db_date}_ma.sql.gz
REVAL=$?
if [ $REVAL -eq 0 ]thenecho "$db_date ma db is backups successful" >>$db_path/$db_fileelseecho "$db_date ma db is backups failed" >>$db_path/$db_file
fi
}#删除超过7天的备份数据
delbak(){
local db_path="/data/bakmysql"
find $db_path -type f -name "*ma*.gz" -mtime +7 -exec rm -rf {} \;
}
dbback
delbak

3. 使用curl检测网站可用性脚本

代码执行:web_check_with_curl.sh
web_check_with_curl脚本内容如下:

#!/usr/bin/env bash # Author: reyn
# Version:1.1
# Description: Web check with curl#定义颜色
red='\e[0;31m'
RED='\e[1;31m'
green='\e[0;32m'
GREEN='\e[1;32m'
blue='\e[0;34m'
BLUE='\e[1;34m'
cyan='\e[0;36m'
CYAN='\e[1;36m'
NC='\e[0m'
date=`date +%Y-%m-%d' '%H:%M:%S` 
# 定义User Agent
ua="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36"
pass_count=0
fail_count=0
# 需要检测的url
urls=("http://www.xxx.com"
)function request(){status=$(curl -sk -o /dev/null --retry 1 --connect-timeout 1 -w '%{http_code}' --user-agent "$ua" $1)if [ $status -eq '200' -o $status -eq '301' \-o $status -eq '302' ]; thenecho -e "[${GREEN} Passed ${NC}] => $1"((pass_count ++))elseecho -e "[${RED} Failed ${NC}] => $1"((fail_count ++))fi
}function main(){echo "Start checking ..."for((i=0;i<${#urls[*]};i++)) do request ${urls[i]};done# 输出检测通过和失败的记录echo -e "======================== Summary ======================== "echo -e "Total: ${cyan} $((pass_count + fail_count))${NC}  Passed: ${green}${pass_count}${NC}  Failed: ${red}${fail_count}${NC} Time: $date"}main $*

4. 检测并封禁异常IP地址的脚本

代码执行:bash ban_ip.sh
ban_ip.sh脚本内容如下:

#!/bin/bash# 获取当前日期和时间的格式化字符串
DATE=$(date +%d/%b/%Y:%H:%M)# 日志文件路径和封禁记录文件路径
LOG_FILE="/usr/local/nginx/logs/access.log"
BANNED_IP_LOG="/usr/local/nginx/logs/banned_ip.log"# 获取异常IP地址,使用tail命令读取日志文件的最后10000行,并使用grep命令筛选出包含当前日期和时间的日志记录
ABNORMAL_IP=$(tail -n 10000 "$LOG_FILE" | grep "$DATE" | awk '{a[$1]++}END{for(i in a) if(a[i]>10) print i}')# 封禁异常IP地址
declare -a IP_LIST
for IP in $ABNORMAL_IP; doif ! iptables -vnL | grep -q "$IP"; theniptables -I INPUT -s "$IP" -j DROPecho "$(date +'%F_%T') $IP" >> "$BANNED_IP_LOG"IP_LIST+=("$IP")fi
done# 打印被封禁的IP地址
if [ ${#IP_LIST[@]} -gt 0 ]; thenecho "以下IP地址已被封禁:"printf "%s\n" "${IP_LIST[@]}"
elseecho "没有需要封禁的IP地址。"
fi

5. 查看网卡实时流量脚本

代码执行:bash interface_moniter.sh eth0
interface_moniter.sh脚本内容如下:

#!/bin/bash
# 如果没有传递参数,默认使用 lo 作为网络接口
NIC=${1:-lo}
echo -e " In ------ Out"
while true; do# 使用awk命令从/proc/net/dev文件中提取指定网络接口的接收字节数和发送字节数,并保存到变量OLD_IN和OLD_OUT中OLD_IN=$(awk  '$0~"'$NIC'"{print $2}' /proc/net/dev)OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)# 等待1秒钟sleep 1# 再次使用awk命令提取最新的接收字节数和发送字节数,并保存到变量NEW_IN和NEW_OUT中。NEW_IN=$(awk  '$0~"'$NIC'"{print $2}' /proc/net/dev)NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)# 计算接收速率和发送速率,单位为KB/s,并保存到变量IN和OUT中IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "KB/s")OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/s")# 使用echo命令输出接收速率和发送速率echo "$IN $OUT"sleep 1
done

6. 访问日志分析脚本

代码执行:bash log_analyze.sh access.log
log_analyze.sh脚本内容如下:

#!/bin/bash
# 日志格式: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"
LOG_FILE=$1echo "统计访问最多的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]}}' $LOG_FILE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络程序设计

互相连接&#xff0c;发送信息 tcp和udp协议 tcp会有准备&#xff0c;udp不会准备。 8080端口&#xff1a;tomcat端口&#xff0c;java和web相连接 80端口&#xff1a;http 21端口&#xff1a;ftp 套接字 socket&#xff1a;提供给程序可以对外进行连接的接口 ip地址 特…

用Java的Process执行命令行,ffmpeg抽帧到一千多帧图片卡住,不报错。

项目场景&#xff1a; 最近需要写一个抽帧、推流的工具类&#xff0c;抽帧写好测试的时候也没问题&#xff0c;等到真正用的时候就发现各种问题。 问题描述 用Java执行ffmpeg抽帧命令&#xff0c;测试的时候没有问题&#xff0c;后来发现抽帧图片多了就会卡住。 刚开始觉得可…

基于c++版本链队列改-Python版本链队列基础理解

##基于链表的队列实现 可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”&#xff0c;规定队尾仅可添加节点&#xff0c;队首仅可删除节点。 ##图解 ##基于链表的队列实现代码 class ListNode:"""定义链表"""def __init__(self)…

构建工具链

系列文章目录 文章目录 系列文章目录一、GNU工具链组成二、构建工具链的过程三、准备工作1、环境变量2、Binutils 四、编译freestanding的交叉编译器1、GCC 下载 本文基于《深度探索Linux操作系统&#xff1a;系统构建和原理解析》 一、GNU工具链组成 编译过程分为4个阶段&…

Python接口自动化测试:断言封装详解!

前言 在进行API接口测试时&#xff0c;断言起着至关重要的作用。断言是用于验证预期结果与实际结果是否一致的过程。在Python中&#xff0c;我们可以利用一些库来实现断言功能。 1. 安装必要的库 在Python中&#xff0c;我们主要会使用两个库&#xff1a;requests和jsonpath…

cocos creator [Window] Cannot read property ‘dump‘ of null

写脚本的时候&#xff0c;出现了如下的问题&#xff0c; [Window] Cannot read property dump of null 原因&#xff1a;在下图中&#xff0c;方式一是正常的&#xff0c;而方式二则会爆出此错误&#xff0c;所以需要初始化&#xff0c;给它赋值

docker 安装oracle 19C和Oracle数据库创建100万条数据

docker 安装oracle 19C #拉取oracle19c镜像 docker pull heartu41/oracle19c #创建挂载目录 mkdir -p /data/oracle/oracle19c/data #修改挂载目录权限 chmod 777 /data/oracle/oracle19c/data #启动容器 docker run -d -p 21521:1521 -e ORACLE_SIDORCLCDB -e ORACLE_PDBO…

python+paddleocr 进行图像识别、找到文字在屏幕中的位置

目录 前言 1、安装paddleocr 2、安装PIL 3、安装numpy 4、 安装pyautogui 5、进行文本识别 6、识别结果 7、获取文字在图片/屏幕中的位置 8、pyautoguipaddleocr鼠标操作 9、完整代码 前言 最近在做自动化测试&#xff0c;因为是处理过的界面&#xff0c;所以使用pyw…

在KeyarchOS上体验WildFly

一、浪潮信息KeyarchOS简单介绍 KeyarchOS具备稳定可靠、高效软硬协同、全天候运维、安全可信等特性,增强了对云计算、人工智能等场景的支持,性能稳定性领先,生态完善,符合金融、政务、能源、交通、通信、教育、医疗等关键行业的应用要求。具备非常广泛的应用。 官方地址&…

C#关于文件剖析

一、概述 文件&#xff0c;具有永久存储及特定顺序的字节组成的一个有序、具有名称的集合&#xff1b; 流&#xff0c;提供一种向后备存储写入字节和从后备存储读取字节的方式&#xff1b; 读写文件和目录时可使用简单的API&#xff0c;也可使用先进的API提供更多的功能&am…

前端必备技能!一文读懂如何调试node_module内源码

背景&#xff1a; 在项目开发中发现有一个bug问题可能原因出现在node_module内的包问题&#xff0c;但是发现直接调试该包源码是无法正常console的&#xff0c;这对于开发定位问题来说十分不友好。本文仅介绍如何定位npm包的问题和调试方法&#xff0c;但是要注意修改后再npm …

4G工业路由器智慧楼宇门禁无人值守、实时监控

门禁是我们日常生活中常见的基础设施&#xff0c;就像是现代社会智慧城市中的“门神”&#xff0c;在楼宇管理领域中普遍采用的安防卫士。4G工业路由器的物联网应用则为楼宇门禁管理带来了更加便捷和高效的解决方案。 在传统的楼宇门禁系统中&#xff0c;人员需要手动刷卡、输…

记录 | vscode设置自动换行

右上菜单栏 -> 查看 -> 打开自动换行 或者还有种方式&#xff0c;如下&#xff0c; 左下角小齿轮&#xff0c;点击设置 然后输入 Editor: Word Wrap &#xff0c;把开关打开为 on

超声波清洗机可以洗哪些东西、功能超全超声波清洗机推荐

超声波清洗机可以清洗的物品是比较多的&#xff0c;首先最经常看见的就是眼镜是交给超声波清洗机清洗的&#xff0c;说到这点&#xff0c;佩戴眼镜的朋友是一定要重视起眼镜清洗的&#xff01;眼镜长时间不清洗的话镜片以及眼镜支架缝隙中会堆积非常多细菌以及灰尘。所以一定要…

【Vue】element组件不显示问题

使用element组件但不显示 不显示的原因&#xff1a;&#xff08;未引入element-ui&#xff09; 首先在控制台输入 npm i element-ui 进行安装 安装完之后&#xff0c;再去main.js配置element-ui组件库 import ElementUI from element-ui import element-ui/lib/theme-chal…

【开源】基于Vue和SpringBoot的高校实验室管理系统

项目编号&#xff1a; S 015 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S015&#xff0c;文末获取源码。} 项目编号&#xff1a;S015&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

时光相册下载 时光相册停运

可以私信或加底部联系方式&#xff0c;小偿支持 很遗憾听到这个消息。时光相册是一个让用户分享和保存珍贵回忆的平台&#xff0c;但由于各种原因&#xff0c;它可能已经停止运营了。建议你尽快备份你的相册和保存重要照片和视频。同时&#xff0c;可以考虑使用其他相册服务来…

QT 中 多线程(备查)

基础 一个线程处理窗口事件&#xff0c;其他线程进行逻辑运算 在QT中使用多线程&#xff0c;需要额外注意的&#xff1a; 1&#xff09;默认的线程在Qt中称之为窗口线程&#xff0c;也叫主线程&#xff0c;负责窗口事件处理或者窗口控件数据的更新 2&#xff09;子线程负责后台…

Python插件 - 动态 简单账表 通过SQL存储过程输出列实现动态展示

第一步 新建一个简单账表加上表头标签 第二步 新建一个过滤框 第三步 修改过滤窗口标识 第四步 注册插件 python代码实现 import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddRe…

禁止ubuntu自动更新显卡驱动

​使用 apt-mark hold命令 apt-mark hold命令可以帮助我们锁定软件包的版本&#xff0c;防止 Ubuntu 自动更新该软件。 具体操作步骤如下&#xff1a; 1. 打开终端&#xff0c;使用以下命令来查看当前安装的显卡驱动软件包&#xff1a; dpkg -l | grep -i nvidia 2. 执行以…