精简代码,责任链模式牛逼!!(上)

一线工作中常用 Shell 脚本: Jar包部署为linux系统服务; 恶意访问,安全防范; SSH 免交互执行命令; 当要使用多个不同的private key登录不同的主机时,我们可以在ssh命令里面用-i参数指定每次使用的private key文件。需求: 通过脚本自动化部署(自动远程登录、远程复制本地资源到服务器,远程执行部署相关命令。之间,remotessh可以随便修改成其他形式的字符串。可以利用~/.ssh/config文件,在让ssh自动为我们决定应该使用哪个key。在文本中搜索指定的内容——grep命令的常用选项。远程执行的命令内容较多,使用脚本方式实现。方法2:通过TCP建立的连接。 阅读详情

1、检测两台服务器指定目录下的文件一致性

#!/bin/bash  ######################################  检测两台服务器指定目录下的文件一致性  #####################################  #通过对比两台服务器上文件的md5值,达到检测一致性的目的  dir=/data/web  b_ip=192.168.88.10  #将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中  find $dir -type f|xargs md5sum > /tmp/md5_a.txt  ssh $b_ip "find $dir -type f|xargs md5sum > /tmp/md5_b.txt"  scp $b_ip:/tmp/md5_b.txt /tmp  #将文件名作为遍历对象进行一一比对  for f in `awk '{print 2} /tmp/md5_a.txt'`do  #以a机器为标准,当b机器不存在遍历对象中的文件时直接输出不存在的结果  if grep -qw "$f" /tmp/md5_b.txt  then  md5_a=`grep -w "$f" /tmp/md5_a.txt|awk '{print 1}'`  md5_b=`grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'`  #当文件存在时,如果md5值不一致则输出文件改变的结果  if [ $md5_a != $md5_b ]then  echo "$f changed."  fi  else  echo "$f deleted."  fi  done  

2、定时清空文件内容,定时记录文件大小

#!/bin/bash  #################################################################  每小时执行一次脚本(任务计划),当时间为0点或12点时,将目标目录下的所有文件内#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件  ################################################################  logfile=/tmp/`date +%H-%F`.log  n=`date +%H`  if [ $n -eq 00 ] || [ $n -eq 12 ]  then  #通过for循环,以find命令作为遍历条件,将目标目录下的所有文件进行遍历并做相应操作  for i in `find /data/log/ -type f`  do  true > $i  done  else  for i in `find /data/log/ -type f`  do  du -sh $i >> $logfile  done  fi  

3、检测网卡流量,并按规定格式记录在日志中

#!/bin/bash  #######################################################  #检测网卡流量,并按规定格式记录在日志中#规定一分钟记录一次  #日志格式如下所示:  #2019-08-12 20:40  #ens33 input: 1234bps  #ens33 output: 1235bps  ######################################################3  while :  do  #设置语言为英文,保障输出结果是英文,否则会出现bug  LANG=en  logfile=/tmp/`date +%d`.log  #将下面执行的命令结果输出重定向到logfile日志中  exec >> $logfile  date +"%F %H:%M"  #sar命令统计的流量单位为kb/s,日志格式为bps,因此要*1000*8  sar -n DEV 1 59|grep Average|grep ens33|awk '{print $2,"\t","input:","\t",$5*1000*8,"bps","\n",$2,"\t","output:","\t",$6*1000*8,"bps"}'  echo "####################"  #因为执行sar命令需要59秒,因此不需要sleep  done

4、计算文档每行出现的数字个数,并计算整个文档的数字总数

#!/bin/bash  #########################################################  #计算文档每行出现的数字个数,并计算整个文档的数字总数  ########################################################  #使用awk只输出文档行数(截取第一段)  n=`wc -l a.txt|awk '{print $1}'`  sum=0  #文档中每一行可能存在空格,因此不能直接用文档内容进行遍历  for i in `seq 1 $n`do  #输出的行用变量表示时,需要用双引号  line=`sed -n "$i"p a.txt`#wc -L选项,统计最长行的长度  n_n=`echo $line|sed s'/[^0-9]//'g|wc -L`  echo $n_nsum=$[$sum+$n_n]  done  echo "sum:$sum"

杀死所有脚本

#!/bin/bash  ################################################################  #有一些脚本加入到了cron之中,存在脚本尚未运行完毕又有新任务需要执行的情况,  #导致系统负载升高,因此可通过编写脚本,筛选出影响负载的进程一次性全部杀死。  ################################################################  ps aux|grep 指定进程名|grep -v grep|awk '{print $2}'|xargs kill -9

5、从 FTP 服务器下载文件

#!/bin/bash  if [ $# -ne 1 ]; then      echo "Usage: $0 filename"  fi  dir=$(dirname $1)  file=$(basename $1)  ftp -n -v << EOF   # -n 自动登录  open 192.168.1.10  # ftp服务器  user admin password  binary   # 设置ftp传输模式为二进制,避免MD5值不同或.tar.gz压缩包格式错误  cd $dir  get "$file"  EOF

6、连续输入5个100以内的数字,统计和、最小和最大​​​​​​​

#!/bin/bash  COUNT=1  SUM=0  MIN=0  MAX=100  while [ $COUNT -le 5 ]; do      read -p "请输入1-10个整数:" INT          if [[ ! $INT =~ ^[0-9]+$ ]]; then          echo "输入必须是整数!"          exit 1      elif [[ $INT -gt 100 ]]; then          echo "输入必须是100以内!"          exit 1      fi      SUM=$(($SUM+$INT))      [ $MIN -lt $INT ] && MIN=$INT      [ $MAX -gt $INT ] && MAX=$INT      let COUNT++      done  echo "SUM: $SUM"  echo "MIN: $MIN"  echo "MAX: $MAX

用户猜数字​​​​​​​

#!/bin/bash  # 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,  # 猜小了或猜大了,直至用户猜对脚本结束。  # RANDOM 为系统自带的系统变量,值为 0‐32767的随机数  # 使用取余算法将随机数变为 1‐100 的随机数num=$[RANDOM%100+1]echo "$num"   # 使用 read 提示用户猜数字  # 使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),  # ‐lt(小于),‐le(小于等于)    while :    do           read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai          if [ $cai -eq $num ]          then                  echo "恭喜,猜对了"                     exit              elif [ $cai -gt $num ]             then                      echo "Oops,猜大了"               else                      echo "Oops,猜小了"           fi    done  

7、监测 Nginx 访问日志 502 情况,并做相应动作

假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。​​​​​​​

#场景:  #1.访问日志文件的路径:/data/log/access.log  #2.脚本死循环,每10秒检测一次,10秒的日志条数为300条,出现502的比例不低于10%(30条)则需要重启php-fpm服务  #3.重启命令为:/etc/init.d/php-fpm restart  #!/bin/bash  ###########################################################  #监测Nginx访问日志502情况,并做相应动作  ###########################################################  log=/data/log/access.log  N=30 #设定阈值  while :do   #查看访问日志的最新300条,并统计502的次数      err=`tail -n 300 $log |grep -c '502" '`   if [ $err -ge $N ]   then  /etc/init.d/php-fpm restart 2> /dev/null   #设定60s延迟防止脚本bug导致无限重启php-fpm服务       sleep 60   fi   sleep 10   done  

8、将结果分别赋值给变量

应用场景:希望将执行结果或者位置参数赋值给变量,以便后续使用。

方法1:​​​​​​​

for i in $(echo "4 5 6"); do     eval a$i=$idone  echo $a4 $a5 $a6  

方法2:将位置参数192.168.1.1{1,2}拆分为到每个变量​​​​​​​

num=0  for i in $(eval echo $*);do   #eval将{1,2}分解为1 2     let num+=1     eval node${num}="$i"  done  echo $node1 $node2 $node3  # bash a.sh 192.168.1.1{1,2}  192.168.1.11 192.168.1.12    方法3:arr=(4 5 6)  INDEX1=$(echo ${arr[0]})  INDEX2=$(echo ${arr[1]})  INDEX3=$(echo ${arr[2]}) 

9、批量修改文件名

示例:​​​​​​​

# touch article_{1..3}.html  # lsarticle_1.html  article_2.html  article_3.html

把article改为bbs

方法1:​​​​​​​

for file in $(ls *html); do      mv $file bbs_${file#*_}      # mv $file $(echo $file |sed -r 's/.*(_.*)/bbs\1/')      # mv $file $(echo $file |echo bbs_$(cut -d_ -f2) 

方法2:​​​​​​​

for file in $(find . -maxdepth 1 -name "*html"); do       mv $file bbs_${file#*_}done  

方法3:

# rename article bbs *.html

把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母

1)准备测试文件,文件名为2.txt​​​​​​​

第1行1234567不包含字母  第2行56789BBBBBB  第3行67890CCCCCCCC  第4行78asdfDDDDDDDDD  第5行123456EEEEEEEE  第6行1234567ASDF  第7行56789ASDF  第8行67890ASDF  第9行78asdfADSF  第10行123456AAAA  第11行67890ASDF  第12行78asdfADSF  第13行123456AAAA  

2)脚本如下:

#!/bin/bash  ###############################################################  把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母  ##############################################################  sed -n '1,5'p 2.txt |sed '/[a-zA-Z]/'d  sed -n '6,10'p 2.txt |sed s'/[a-zA-Z]//'g  sed -n '11,$'p 2.txt  #最终结果只是在屏幕上打印结果,如果想直接更改文件,可将输出结果写入临时文件中,再替换2.txt或者使用-i选项 

VMware共享磁盘配置实战:从零搭建多机共享存储环境 本文详细介绍了在VMware环境中从零开始配置共享磁盘的完整实战流程。通过创建共享磁盘、挂载至多台虚拟机并修改.vmx配置文件等关键步骤,帮助用户搭建可用于数据库集群(如Oracle RAC)测试的多机共享存储环境,并提供了核心参数设置与常见问题排查指南。 阅读详情

相关推荐

AI驱动的CNC闭环加工系统:边缘实时控制与IIoT反馈实践

闭环控制是工业自动化的核心概念,指通过实时反馈调节系统输出以逼近目标值;其技术原理在于构建短于被控对象时间常数的确定性反馈链路,从而保障动态响应精度与稳定性。在智能制造落地中,AI正从离线分析工具演进为嵌入式实时决策单元,其核心价值在于将工艺知识模型化、控制指令轻量化、执行路径边缘化。典型应用场景包括CNC加工过程中的振动自适应调参、刀具磨损在线补偿及多机协同优化。本实践聚焦FANUC 0i-MF平台,基于Modbus TCP硬实时通信与轻量LSTM+CNN融合模型,实现217毫秒级AI推理与PMC寄存器直

weixin_29704001的博客 323

运维常用脚本(持续更新~)

1.获取deployment下所有podready状态,并将结果发送到企业微信。2/批量ping脚本(python/shell)3.检测当前用户是否是超级管理员(root)2.1 python批量ping。2.2 shell批量ping。

Habo_的博客 1462

DM-VIO论文精读:从‘延迟边缘化’到‘位姿图BA’,手把手拆解单目VIO性能超越双目的秘密

本文深入解析DM-VIO技术如何通过延迟边缘化和位姿图BA创新,解决单目视觉惯性里程计(VIO)的尺度不可观性问题,并在精度上超越传统双目系统。文章详细介绍了延迟边缘化的双因子图结构设计、位姿图BA的多级初始化策略,以及系统级优化带来的性能提升,为VIO研究与实践提供了重要参考。

weixin_30616969的博客 428

运维常用的脚本

1、检测两台服务器指定目录下的文件一致性 #!/bin/bash ###################################### 检测两台服务器指定目录下的文件一致性 ##################################### #通过对比两台服务器上文件的md5值,达到检测一致性的目的 dir=/data/web b_ip=192.168.88.10 #将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中 find $d

Sunny的专栏 2354

统信UOS系统盘扩容保姆级教程:用GParten-分区编辑器5分钟搞定

本文提供统信UOS系统盘扩容的详细图形化教程。针对系统盘空间不足问题,重点介绍如何使用系统自带的GParten-分区编辑器,在5-10分钟内安全、直观地完成扩容操作,无需记忆复杂命令,适合所有用户快速解决存储空间告急的困扰。

e3f4g5的博客 645

Jetson AGX Orin到手必看:DP线选错黑屏、SSD不识别?这篇避坑指南帮你一次搞定

本文详细介绍了Jetson AGX Orin开发套件的硬件避坑指南,涵盖开箱检查、DP线选择、SSD兼容性等关键问题。通过实测数据和实用技巧,帮助开发者避免黑屏、存储不识别等常见问题,提升开发效率。特别推荐符合VESA认证的DP 1.4a线缆和兼容性优秀的SSD型号,确保设备稳定运行。

weixin_33696822的博客 435

七个常用shell运维脚本

常用shell脚本

qq_41890240的博客 3576

MATLAB库函数unwrap(相位解卷绕)的C语言实现

什么是相位解卷绕 Q = unwrap(P) Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of ±2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians. If P is a matrix, unw

业精于勤,荒于嬉 4249

10个脚本让你的运维超神 !零基础入门到精通,收藏这篇就够了

在运维工作中,日志处理是一项至关重要的任务,它涉及到监控系统状态、排查故障以及性能调优等多个方面。以下是15个常用的日志处理脚本,这些脚本可以帮助运维人员高效地管理和分析日志数据。:该脚本能够实时监控日志文件,一旦检测到特定的错误关键字,就会发送报警邮件。:模拟logrotate功能,每天将旧日志重命名并创建新日志。:从多个服务器的日志文件中收集错误日志,并聚合分析。:将日志文件中的时间戳从UNIX时间戳转换为可读的日期格式。:统计日志文件中访问者的IP地址及其出现次数,并排序输出。

喜欢Python编程的程序员柚柚呀 1207

诊断CAPL自动化(5) ——没有CANdela,无法编辑cdd数据库文件,也能轻松完成诊断测试

🍅我们知道cdd数据库文件,是CANoe测试环境的重要组件,它可以让我们更加轻松的完成诊断测试工作;但是创建和编辑cdd文件是需要CANdela 来完成的,一个 liscense 就要将近二十万,成本确实高🍅特别是在处理22/2E/31服务的时候,频繁的增加功能,可能需要频繁的用CANdela 修改CDD,我测试开发过程中,一般很少去修改cdd,有这个时间,纯手撸也开发完了,就一个CANdela,鬼知道此时此刻到了谁手里,我也懒得去找。🍅演示软硬件环境;目录📘前言。

蚂蚁小兵 5756

Python电梯II

输入数据有若干组(最多不超过1000组),每组数据的第一行为四个如题目中所示的整数N,u,d,s,由空格分隔开。第二行为不同楼层需要上下楼的请求, 最多不超过1000个。每个请求的格式为"from-to",其中"from"和"to"为所在楼层和要到达的楼层,保证from!=to。

沐风—云端行者 910

精简代码,责任链模式牛逼!!(下)

Expect是一个自动交互式应用程序的工具,如telnet,ftp,passwd等。加个死循环,如果IP可用就退出,不可用提示继续输入,并使用awk判断。方法1:EOF标准输出作为expect标准输入。执行命令脚本:写个循环可以批量操作多台服务器。SSH远程修改密码脚本:新密码随机生成。方法1:根据访问日志(Nginx为例)Linux主机SSH连接信息:旧密码。方法3:将expect脚本独立出来。方法2:通过TCP建立的连接。方法2:通过日志获取登录状态。场景:恶意访问,安全防范。

java_121388的博客 265

【GPFS专题5】---IBM Spectrum Scale (GPFS) 日常运维命令大全

掌握这些命令是有效管理 GPFS 集群的基础。实际生产环境中,建议结合自动化脚本和监控系统(如 IBM Storage Insights)实现高效运维。定期备份配置、监控性能指标,并进行灾备演练,是保障数据安全和系统稳定的关键。

jundao1997的专栏 841

Java的责任链模式

1. 絮絮叨叨 学校的奖学金评选流程 辅导员审核:确认个人信息是否完善、真实 系主任审核:根据学生填写的信息,结合自己了解的情况,决定是否推荐该学生参与奖学金评选 院长审核:根据学生填写的信息,综合对比候选人,决定该生是否能获得奖学金 校长审核:一般,院长审核后的获奖人数都是学校规定的获奖人数,校长只需要同意即可;除非奖学金评比时,爆出了该生的黑料,取消该生的获奖资格 ???? 作为学生,只需要在学校的奖学金评选系统上,诚信地填写自己的信息即可 至于,评选能走到哪一步,每一步由谁审批,都不是他关心的

lucyLee的博客 8974

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

责任链模式

简述:     前端时间再看一些类库的源码,发现责任链模式的强大之处,尤其是和建造者模式的结合后强大的动态可扩展性更是牛逼的一塌糊涂。接下来赶紧了解一下吧!     我们先来了解一下什么是责任链模式:     职责链模式(Chain of Responsibility):使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直...

随风而逝的博客 395

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

一篇文章搞懂Java设计模式之责任链模式

简述: 前端时间再看一些类库的源码,发现责任链模式的强大之处,尤其是和建造者模式的结合后强大的动态可扩展性更是牛逼的一塌糊涂。接下来赶紧了解一下吧! 我们先来了解一下什么是责任链模式: 职责链模式(Chain of Responsibility):使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该

lzy_tinyjoy 5万+

谁能干掉了if else,我就吹他牛逼

本文公众号来源:Hollis作者:Hollis本文已收录至我的GitHub我也不用设计模式很多人觉得自己写的是业务代码,按照逻辑写下去,再把公用的方法抽出来复用就可以了,设计模式根本就没...

WantFlyDaCheng的博客 222

不是我吹牛逼,这绝对是去掉 if...else 最佳的文章

码哥在这里总结了 7 中方式用来解决 if...else 的问题,我相信里面总有一两种方案是你比较满意的,七种方案各有优劣,各自有各自的使用场景,我们需要在实践中不断领悟,在重构中不断进化,总结出适合自己最佳的重构方案。重构之路,任重而道远,各位其行且珍惜。

smart_an的专栏 891

设计模式 --- 责任链模式

1.定义 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,只到有对象处理它为止。   2.使用场景 多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定。 在请求处理者不明确的情况下向多个对象中的一个提交一个请求。 需要动态指定一组对象处理请求。   3.简单实现 以一个费用报销为例。组长只能审批...

huxing0215的专栏 173

非常牛逼的面试指南(强烈推荐)

《Android 开发工程师面试指南》 《Android 开发工程师面试指南 LearningNotes 》,作者是知乎Android开发工程师陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备面试的同学,也可以帮助正在学习和工作的同学梳理自己的知识点。有心的同学也可以帮他们不断完善。官方微博:优雅的程序员D 第一部

FioManGeYaMeng的博客 1366

java-设计模式-修改导入模块的思路总结

最近修改导入模块,对导入模块进行了深度的思考,对其逻辑思路进行了整理和抽象,搞出了一个pipeline用执行一系列的handler的最终解决方案。 最近的思考发现,代码抽象还是比较难的,牛逼的代码果然都是经过很多的思考和折中,甚至多次的修改调整才能变得优雅从容。在这个过程当中,我思考过如何适配之前的一部分 代码,但是发现,适配之前的一部分代码,不利于新代码的扩展性,所以放弃了之前的很多代码,这...

weixin_30407099的博客 432

[Skr-Shop]购物车之架构设计

????????关注后回复“进群”,拉你进程序员交流群????????skr shop是一群底层码农,由于被工作中的项目折磨的精神失常,加之由于程序员的自傲:别人设计的系统都是一坨shit,我的设计才是宇宙最...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 457

java链接文章收集汇总

自己收集的一些好的java链接

weixin_44681259的博客 420

Android 阿里面试OkHttp源码解析 最牛框架 看完成大神

Android 腾讯面试Glide源码解析 3分钟手写最牛框架 看完成牛逼哄哄 https://blog.youkuaiyun.com/WHB20081815/article/details/88619371 Android 百度面试Evenbus3.0源码解析 3分钟手写最牛框架 看完成大神 https://blog.youkuaiyun.com/WHB20081815/article/details/88618...

深南大盗的博客 1357

不贴代码,Spring MVC的处理流程是怎样的?

Java面试核心知识点一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!Java面试核心知识点《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-9smT9onC-1713446648604)]Java面试核心知识点一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间![外链图片转存中…(img-XUMFj2Yc-1713446648604)]

2401_84010865的博客 622
上一篇: ServerStatus牛逼!!
下一篇: 精简代码,责任链模式牛逼!!(下)
架构文摘JGWZ
博客等级 码龄5年 8808粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值