Shell脚本编程案例集(持续更新)
1.端口占用
检测端口占用情况,如果被占用则随机分配指定范围内端口。
脚本
#!/bin/bash
#
# 检测端口占用,如果占用则随机分配指定范围内端口# 端口范围
min=10800
max=12000port="$1"
if [[ -z "${port}" ]]; thenecho "Usage: $0 PORT"exit 1
fi# 检测端口占用
while lsof -i:"${port}" ; doport=$((RANDOM%$(( ${max} - ${min} )) + ${min} ))if ! lsof -i:"${port}" ; thenecho "$1 端口被占用,已重新分配端口: ${port} "exit 0fi
done# 未进入while循环执行
echo "${port} 端口未被占用"
查看端口占用有两种方式
- lsof -i:8080
- netstat -tunlp | grep 8080
2.统计恶意攻击IP尝试破解登录次数
起因是最近购买的腾讯云服务器,一直提示被恶意尝试破解登录,现通过统计这些恶意IP尝试登录的次数,并查询出IP归属地信息,将次数过多的直接拉入黑名单。
脚本
#!/bin/bash
#
# 统计尝试攻击IP次数并查询归属地
# 对超过一定次数的IP添加黑名单# cip.cc 这个网站可以帮助查询IP归属地信息
# 也可以使用whois IP(前提是安装了whois命令)
# /etc/hosts.deny可以添加禁止的黑名单IP
# /var/log/secure/记录的尝试登录失败IP信息
# 日志信息需要root权限,所以执行脚本需要sudowebsite="cip.cc/" # 可帮助查询IP归属地信息
threshold=30 # 登录失败超过该阈值被列为黑名单
tmp_file="tmp_"$$ # 临时文件存储日志过滤出的IP信息 $$为当前脚本的PID# 输出格式: 次数 IP 用户
cat /var/log/secure | awk '/Failed/{print $(NF-3),$(NF-5)}' | sort | uniq -c > ${tmp_file}while read ip_info; do# 读取临时文件,获取[IP|登录用户|次数] 信息ip=$(echo ${ip_info} | awk '{print $2}')fail_times=$(echo ${ip_info} | awk '{print $1}')login_user=$(echo ${ip_info} | awk '{print $3}')# 利用网站查询归属地信息,如果IP过多需要增加sleep时间,否则网页请求过于频繁。echo "${ip} 尝试登录 ${login_user}; 失败次数: ${fail_times}"curl ${website}${ip}sleep 1# 针对登录失败次数超过阈值的IP添加为登录黑名单if [[ ${fail_times} -ge ${threshold} ]]; thensudo grep ${ip} /etc/hosts.deny > /dev/nullif [[ $? -gt 0 ]]; thensudo echo "sshd:${ip}:deny" >> /etc/hosts.denyecho "${ip} 已被添加登录黑名单"elseecho "${ip} 已存在黑名单中"fifiecho "==========================================="
done < $tmp_file# 删除脚本生成的临时文件
sudo rm ${tmp_file}
笔记
获取文件某一列信息
awk '{print $1}'
默认是以空格分割的,$1
表示第一列。多列输出我们用,符号
awk '{print $1,$2}'
,而$(NF-3)
则是倒数列。输出默认是空格分割
$1
和$2
,如果需要制定输出分割符,可以使用awk -v OFS="=" '{print $1,$2}'
,这里-v OFS="="
我们就指定了以=分割。while read line
建议用重定向而不是管道命令符,原因可以参考:谷歌Shell脚本编程规范笔记安装
whois
命令可以查询IP归属地信息,但是不够明显,利用第三方网站(cip.cc
)获取的信息更加直观且友好。
Shell脚本编程案例集(持续更新)相关推荐
- shell脚本编程《linux下kvm虚拟机的创建、开启、显示、停止、重置》
Shell脚本编程--案例一 编程要求: 1.创建vm-ctl脚本,在/bin/下 2.实现功能:创建虚拟机.创建虚拟机快照.开启虚拟机.显示虚拟机.停止虚拟机.重置虚拟机. 脚本实现预期结果: sh ...
- shell脚本编程神器之awk语法案例详解
AWK入门指南 文章目录 shell脚本编程神器之awk语法案例详解 安装AWK AWK 起步示例 AWK程序的结构 执行 awk 程序 awk 的错误提示 简单输出 打印每一行 打印特定行 NF,字 ...
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-汇总 ( Chapter1-Chapter16 )
一.初识 Linux shell Linux 系统可划分为以下 4 部分. Linux 内核 GNU 工具 图形化桌面环境 应用软件 内核主要负责以下 4 种功能. 系统内存管理 内核通过硬盘上称为交 ...
- Shell脚本编程教程
1.Shell脚本语言的基本结构 1.1 Shell脚本的用途: 自动化常用命令 执行系统管理和故障排除 创建简单的应用程序 处理文本或文件 1.2 Shell脚本基本结构: Shell脚本编程: ...
- 《Linux命令行与shell脚本编程大全》(第三版)读书笔记
第一部分 Linux命令行 第三章.基本的bash shell命令 bash手册 man 命令 例子: man cat 空格翻页.回车下一行.左右键看右侧(左侧)内容.q退出 info info in ...
- linux 命令行与shell脚本编程大全
linux 命令行与shell脚本编程大全 第一章 Linux LiveCD就是从cd读取的系统,由于没法将数据写入到cd,所以一旦重启,之前操作过后的一切数据都会丢失. 第二章 第三章 1.man手 ...
- Shell脚本编程-总
Shell脚本编程 一. SHELL入门 1.1 变量 1.1.1 变量名规范 1.1.2 位置变量 1.1.3 环境变量 1.2 管道 1.3 退出状态码 1.3.1 退出状态码描述 1.3.2 改 ...
- Linux基础篇--shell脚本编程基础
Linux基础篇–shell脚本编程基础 本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为 ...
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter6-Linux 环境变量
六.Linux 环境变量 bash shell 使用环境变量来存储 shell 会话和工作环境的相关信息(这也是被称作环境变量的原因).环境变量允许在内存中存储数据, 以便 shell 中运行的程序或 ...
最新文章
- 让软件版本信息自动引用SVN修订版本号
- 为什么on用的时候会失效?
- linux 创建组,创建用户
- Golang 交叉编译
- Jenkins配置:添加用户和管理权限
- Ubuntu18.10与windows7文件夹共享
- HBase常用操作备忘
- asp.net core中的razor页面
- PyPI可以使用的几个国内源
- 淘宝首页原生js练习(基础练习的基础中的基础)
- vue 点击图标旋转
- mumu模拟器切换android,MuMu模拟器“键位设置”功能详解!如有问题请联系在线客服~...
- Leetcode 5855 数组第K大的整数
- 基因组测序中N50和N90到底指什么?
- 封装组件引发的问题——vue给对象添加响应式属性
- 最大连续登录天数统计对应的用户数分布的三种实现方式(HQL+Spark Rdd)
- BERT如何解决一词多义问题
- oracle nested loops outer,11g对Nested Loops的改进
- Oracle Database 10g for Windows安装
- Linux设备模型之platform设备