重构大版本更新
一口气全面统一博客样式,移除部分冗余导航页面,更专注内容展示。
变量、判断、循环、定时任务——用 30 行脚本把重复劳动自动化。
同样的命令敲三遍,就该写成脚本了。Shell 脚本是把 Linux 命令串成自动流水线的胶水。
#!/bin/bash# 第一行叫 shebang,声明用什么解释器执行
name="world" # 等号两边不能有空格!echo "hello, $name"echo "当前目录: $(pwd)" # $() 捕获命令输出chmod +x first.sh # 脚本要可执行./first.sh # 运行# if 判断:备份目录不存在就创建BACKUP=/backupif [ ! -d "$BACKUP" ]; then mkdir -p "$BACKUP" echo "已创建 $BACKUP"fi
# for 循环:批量 ping 三台机器for ip in 192.168.1.1 192.168.1.2 192.168.1.3; do ping -c1 -W1 $ip > /dev/null && echo "$ip 存活" || echo "$ip 不通"done把之前日志分析那篇的知识串起来,30 行做一个自动封禁脚本:
#!/bin/bash# 封禁 1 小时内 SSH 失败超过 10 次的 IPLIMIT=10LOG=/var/log/auth.log
grep "Failed password" $LOG | \ awk -v d="$(date -d '1 hour ago' '+%b %e %H')" '$0 ~ d {print $(NF-3)}' | \ sort | uniq -c | \ while read count ip; do if [ "$count" -ge "$LIMIT" ]; then iptables -C INPUT -s "$ip" -j DROP 2>/dev/null || \ iptables -A INPUT -s "$ip" -j DROP echo "$(date '+%F %T') 已封禁 $ip(失败 $count 次)" fi done配上定时任务,每小时自动执行:
chmod +x /root/ban.shcrontab -e# 加入一行:# 0 * * * * /root/ban.sh >> /var/log/ban.log 2>&1bash -n script.sh # 只查语法不执行bash -x script.sh # 逐行显示执行过程(排错神器)shellcheck script.sh # 静态检查工具(强烈推荐安装)变量 → 判断 → 循环 → 定时任务,四块积木就能搭出大多数自动化场景。真实生产环境建议直接用 fail2ban,但自己写一遍才能真懂原理。