2026/4/18 14:35:11
网站建设
项目流程
孟村县做网站,云服务器做网站,阿里网站制作需要多少钱,wordpress 作者标签1、检测两台服务器指定目录下的文件一致性 dir/data/web
# 定义远程服务器的IP#xff08;B机#xff09;
b_ip192.168.72.128
# 1. 在本地服务器执行#xff1a;遍历dir目录下的所有文件#xff0c;生成每个文件的MD5值#xff0c;保存到本地临时文件
md5_a.txt find…1、检测两台服务器指定目录下的文件一致性dir/data/web# 定义远程服务器的IPB机b_ip192.168.72.128# 1. 在本地服务器执行遍历dir目录下的所有文件生成每个文件的MD5值保存到本地临时文件md5_a.txt find $dir -type f | xargs md5sum /tmp/md5_a.txt# 2. 通过SSH远程在B机执行遍历B机相同目录下的所有文件生成MD5值保存到B机的临时文件md5_b.txtssh $b_ip find $dir -type f | xargs md5sum /tmp/md5_b.txt# 3. 读取本地md5_a.txt中的所有MD5值循环逐一对比awk {print $2}提取md5_a.txt中的MD5值字段awk {print $2} /tmp/md5_a.txt | while read f do# 3.1 检查当前MD5值是否存在于B机的md5_b.txt中if grep -q $f /tmp/md5_b.txt; then# 3.2 若存在分别提取本地和B机中该MD5值对应的文件名md5_a$(grep $f /tmp/md5_a.txt | awk {print $1})# 本地文件的路径md5_b$(grep $f /tmp/md5_b.txt | awk {print $1})# B机文件的路径 # 3.3 对比本地与B机的文件名是否一致判断文件内容是否相同if [ $md5_a ! $md5_b ]; thenecho 文件内容不一致$f # 提示MD5相同但文件名路径不匹配验证结果2、定时清空文件内容定时记录文件大小# 定义日志文件路径格式为“/tmp/小时-日期.log”例如/tmp/14-2025-12-28.log logfile/tmp/date %H-%F.log# 获取当前小时例如“00”“12”“14”ndate %H# 判断当前是否为0点00或12点12if [ $n -eq 00 ] || [ $n -eq 12 ]then# 若为0点/12点清空/data/log/目录下的所有文件for i in find /data/log/ -type f # 遍历/data/log/下的所有普通文件true $i # 用true命令清空文件# 若不是0点/12点统计/data/log/目录下所有文件的大小追加到日志文件for i in find /data/log/ -type f # 遍历/data/log/下的所有普通文件du -sh $i $logfile # 统计文件大小-s仅显示总和-h人类可读格式并追加到logfile验证结果3、检测网卡流量并按规定格式记录在日志中#设置语言为英文保障输出结果是英文否则会出现bugLANGenlogfile/tmp/date %d.log#将下面执行的命令结果输出重定向到logfile日志中exec $logfiledate %F %H:%M#sar命令统计的流量单位为kb/s日志格式为bps因此要*1000*8sar -n DEV 1 3|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验证结果4、计算文档每行出现的数字个数并计算整个文档的数字总数#使用awk只输出文档行数截取第一段nwc -l a.txt|awk {print $1}sum0#文档中每一行可能存在空格因此不能直接用文档内容进行遍历for i in seq 1 $ndo#输出的行用变量表示时需要用双引号linesed -n $ip a.txt#wc -L选项统计最长行的长度n_necho $line|sed s/[^0-9]//g|wc -Lecho $n_nsum$[$sum$n_n]doneecho sum:$sum验证结果注如果没有a.txt 需要自己手动配5、监测 Nginx 访问日志 502 情况并做相应动作假设服务器环境为 lnmp近期访问经常出现 502 现象且 502 错误在重启 php-fpm 服务后消失因此需要编写监控脚本一旦出现 502则自动重启 php-fpm 服务。log/data/log/access.logN30 # 定义阈值# 查看日志的最新300条并统计502的次数修复变量赋值语法err$(tail -n 300 $log | grep -c 502 )# 数值比较if [ $err -ge $N ]; then# 模拟重启echo 【验证成功】检测到502错误数$err触发php-fpm重启模拟# /etc/init.d/php-fpm restart 2 /dev/null# 设定60s延迟防止脚本bug导致无限重启php-fpm服务sleep 60验证结果6、扫描主机端口状态# 接收外部传入的主机IP执行脚本时需传入例如./脚本名 192.168.1.1HOST$1# 定义需要扫描的端口列表多个端口用空格分隔PORT22 25 80 8080# 循环遍历每个端口逐一检测状态 for PORT in $PORT; do# 核心检测逻辑通过/dev/tcpBash内置的TCP通信接口尝试连接目标端口# /dev/null将连接的输出和错误都重定向到空静默检测if echo /dev/null /dev/tcp/$HOST/$PORT; then echo $PORT open # 连接成功输出“端口开放”else echo $PORT close # 连接失败输出“端口关闭”验证结果7创建10个用户并分别设置密码密码要求10位且包含大小写字母以及数字最后需要把每个用户的密码存在指定文件中。# 生成10个用户00-09for u in $(seq -w 0 09); dousernameuser_$u# 1. 创建用户如果不存在if ! id $username /dev/null; thenuseradd $usernameecho 已创建用户$usernameelseecho 用户 $username 已存在跳过创建fi# 2. 生成10位密码-l 10长度10-s 0无特殊字符-d 2至少2个数字-C 2至少2个大写-c 2至少2个小写password$(openssl rand -base64 12 | tr -dc A-Za-z0-9 | head -c 10)# 3. 安全设置用户密码用chpasswd避免交互echo $username:$password | chpasswdecho 已设置用户 $username 的密码# 4. 保存用户和密码到文件echo $username $password /tmp/userpassworddoneecho 操作完成用户密码已保存到/tmp/userpassword验证结果8、批量修改服务器用户密码Linux主机SSH连接信息旧密码# 定义旧密码文件路径存储远程服务器的IP、用户名、旧密码、端口 OLD_INFOold_pass.txt# 定义新密码文件路径保存修改后的新密码信息NEW_INFOnew_pass.txt# 循环读取旧密码文件中的IPfor IP in $(awk /^[^#]/{print $1} $OLD_INFO); do# 从旧密码文件中提取当前IP对应的用户名USER$(awk -v I$IP I$1{print $2} $OLD_INFO)# 从旧密码文件中提取当前IP对应的旧密码PASS$(awk -v I$IP I$1{print $3} $OLD_INFO)# 从旧密码文件中提取当前IP对应的SSH端口PORT$(awk -v I$IP I$1{print $4} $OLD_INFO)# 生成8位随机密码仅包含大小写字母和数字# openssl rand生成随机字符串tr -dc过滤非字母数字字符head -c 8截取8位 NEW_PASS$(openssl rand -base64 10 | tr -dc A-Za-z0-9 | head -c 8)# 将新密码信息IP、用户名、新密码、端口追加到新密码文件echo $IP $USER $NEW_PASS $PORT $NEW_INFO# 使用expect实现SSH自动交互修改远程用户密码expect -c set timeout 2 # 设置连接超时时间为2秒spawn ssh -p $PORT $USER$IP # 启动SSH连接指定端口和用户expect { # 若出现yes/no首次连接自动发送yes并继续 \(yes/no)\ {send \yes\r\;exp_continue} # 若出现password:自动发送旧密码并继续 \password:\ {send \$PASS\r\;exp_continue} # 若成功登录出现$USER提示符自动执行修改密码命令后退出 \$USER\ {send \echo $NEW_PASS | passwd --stdin $USER\r exit\r\;exp_continue} } 验证结果9、查看CPU资源占用率的脚本文件#!/bin/bash# 定义一个函数来显示CPU占用率show_cpu() {# 使用top命令获取CPU占用率信息并只显示第一行包含CPU占用率的部分top -bn1 | grep Cpu(s)}# 调用函数显示CPU占用率show_cpu#另一个#!/bin/bash# 定义一个函数来显示指定时间间隔的平均CPU占用率show_cpu_avg() {interval$1mpstat -P ALL $interval 1 | tail -n 3}# 调用函数显示过去5秒的平均CPU占用率show_cpu_avg 5~验证结果10、生成磁盘使用情况的# 定义日志文件的路径和名称LOG_FILE/tmp/2.log# 使用df命令获取磁盘使用情况并格式化输出DISK_USAGE$(df -h)# 将磁盘使用情况追加到日志文件中echo $(date %Y-%m-%d %H:%M:%S) - Disk Usage: $LOG_FILEecho $DISK_USAGE $LOG_FILEecho -------------------------------------------------------- $LOG_FILEecho $(date %Y-%m-%d %H:%M:%S) - Disk Usage:echo $DISK_USAGE# 完成提示echo 你的磁盘使用情况被记录到 $LOG_FILE验证结果