#!/bin/bash
dir=/data/web
b_ip=192.168.88.10
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
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}')
if [ "$md5_a" != "$md5_b" ]; then
echo "$f changed."
fi
else
echo "$f deleted."
fi
done
2. 定时清空文件内容,定时记录文件大小
#!/bin/bash
logfile=/tmp/$(date +%H-%F).log
n=$(date +%H)
if["$n"-eq 00 ]||["$n"-eq12];then
foriin$(find /data/log/ -type f);do
true>"$i"
done
else
foriin$(find /data/log/ -type f);do
du-sh"$i">>"$logfile"
done
fi
3. 检测网卡流量,并按规定格式记录在日志中
#!/bin/bash
while:;do
LANG=en
logfile=/tmp/$(date +%d).log
exec>>"$logfile"
date +"%F %H:%M"
sar -n DEV 159|grep Average |grep ens33 |awk'{print $2,"\t","input:","\t",$5*1000*8,"bps","\n",$2,"\t","output:","\t",$6*1000*8,"bps"}'
echo"####################"
done
4. 杀死所有脚本
#!/bin/bash
ps aux | grep 指定进程名 | grep -v grep | awk '{print $2}' | xargs kill -9
5. 从 FTP 服务器下载文件
#!/bin/bash
if[$#-ne1];then
echo"Usage: $0 filename"
fi
dir=$(dirname "$1")
file=$(basename "$1")
ftp-n-v<<EOF
open 192.168.1.10
user admin password
binary
cd "$dir"
get "$file"
EOF
6. 监测 Nginx 访问日志 502 情况,并做相应动作
#!/bin/bash
log=/data/log/access.log
N=30
while:;do
err=$(tail -n 300 "$log" | grep -c '502" ')
if["$err"-ge"$N"];then
/etc/init.d/php-fpm restart 2> /dev/null
sleep60
fi
sleep10
done
7. 扫描主机端口状态
#!/bin/bash
HOST=$1
PORT="22 25 80 8080"
forPORTin$PORT;do
ifecho&>/dev/null > /dev/tcp/"$HOST"/"$PORT";then
echo"$PORT open"
else
echo"$PORT close"
fi
done
8. Expect 实现 SSH 免交互执行命令
#!/bin/bash
USER=root
PASS=123.com
IP=192.168.1.120
expect -c "
spawn ssh $USER@$IP
expect {
\"(yes/no)\" {send \"yes\r\"; exp_continue}
\"password:\" {send \"$PASS\r\"; exp_continue}
\"$USER@*\" {send \"df -h\r exit\r\"; exp_continue}
}"
9. 创建 10 个用户,并分别设置密码
#!/bin/bash
foruin$(seq -w 0 09);do
useradd user_$u
p=$(mkpasswd -s 0 -l 10)
echo"$p"|passwd--stdin user_$u
echo"user_$u $p">> /tmp/userpassword
done
10. 批量修改服务器用户密码
#!/bin/bash
OLD_INFO=old_pass.txt
NEW_INFO=new_pass.txt
forIPin$(awk '/^[^#]/{print $1}' $OLD_INFO);do
USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)
PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)
PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)
NEW_PASS=$(mkpasswd -l 8)
echo"$IP $USER $NEW_PASS $PORT">>$NEW_INFO
expect-c"
spawn ssh -p$PORT $USER@$IP
set timeout 2
expect {
\"(yes/no)\" {send \"yes\r\";exp_continue}
\"password:\" {send \"$PASS\r\";exp_continue}
\"$USER@*\" {send \"echo '$NEW_PASS' |passwd --stdin $USER\r exit\r\";exp_continue}
}"
done
11. iptables 自动屏蔽访问网站频繁的 IP
#!/bin/bash
DATE=$(date +%d/%b/%Y:%H:%M)
ABNORMAL_IP=$(tail -n5000 access.log | grep "$DATE" | awk '{a[$1]++}END{for(i in a)if(a[i]>100)print i}')
forIPin$ABNORMAL_IP;do
if[$(iptables -vnL | grep -c "$IP")-eq0];then
iptables -I INPUT -s"$IP"-j DROP
fi
done
12. 根据 web 访问日志,封禁请求量异常的 IP
#!/bin/bash
logfile=/data/log/access.log
d1=$(date -d "-1 minute" +%H%M)
d2=$(date +%M)
ipt=/sbin/iptables
ips=/tmp/ips.txt
block(){
grep"$d1:""$logfile"|awk'{print $1}'|sort-n|uniq-c|sort-n>"$ips"
foriin$(awk '$1>100 {print $2}' "$ips");do
$ipt-I INPUT -p tcp --dport80-s"$i"-j REJECT
echo"$(date +%F-%T) $i">> /tmp/badip.log
done
}
unblock(){
forain$($ipt -nvL INPUT --line-numbers | grep '0.0.0.0/0' | awk '$2<10 {print $1}' | sort -nr);do
$ipt-D INPUT "$a"
done
$ipt-Z
}
if["$d2"-eq"00"]||["$d2"-eq"30"];then
unblock
block
else
block
fi
13. 自动优化 Linux 内核参数
#!/bin/bash
cat >> /usr/lib/sysctl.d/00-system.conf << EOF
fs.file-max=65535
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmin = 4096
kernel.sem = 5010 641280 5010 128
net.core.wmem_default=262144
net.core.wmem_max=262144
net.core.rmem_default=4194304
net.core.rmem_max=4194304
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
EOF
14. 切割 Nginx 日志文件
#!/bin/bash
logs_path="/usr/local/nginx/logs/"
mv"${logs_path}access.log""${logs_path}access_$(date +"%Y%m%d" -d yesterday).log"
kill-USR1$(cat /usr/local/nginx/logs/nginx.pid)
once=0
if["$once"-eq0];then
echo"0 1 * * * $(readlink -f "$0")">> /var/spool/cron/$USER
sed-i"/^once=/s/0/1/""$0"
fi
15. 检测 MySQL 服务是否存活
#!/bin/bash
host=检测的 MySQL 主机 ip
user=MySQL 用户名
passwd=密码
mysqladmin -h"$host" -u"$user" -p"$passwd"ping&> /dev/null
if[$?-eq0];then
echo"MySQL is UP"
else
echo"MySQL is down"
fi
16. 检测 MySQL 数据库连接数量
#!/bin/bash
log_file=/var/log/mysql_count.log
user=用户名
passwd=密码
while :; do
sleep 2
count=$(mysqladmin -u"$user" -p"$passwd" status | awk '{print $4}')
echo "$(date +%Y-%m-%d) 并发连接数为:$count" >> "$log_file"
done
17. 查看所有虚拟机磁盘使用量及 CPU 使用量信息
#!/bin/bash
rpm--quiet-q libguestfs-tools-c
[$?-ne0]&& yum -yinstall libguestfs-tools-c --nogpgcheck
virt-df |column-t
read-n1"按任意键继续 " key
rpm--quiet-q virt-top
[$?-ne0]&& yum -yinstall virt-top
virt-top
18. 破解虚拟机密码,无密码登录虚拟机系统
#!/bin/bash
read-p"请输入虚拟机名称: " name
ifvirsh domstate "$name"|grep-q running;then
echo"破解,需先关闭虚拟机"
virshshutdown"$name"
fi
mountpoint="/media/virtimage"
[!-d"$mountpoint"]&&mkdir"$mountpoint"
echo"请稍后。。。"
ifmount|grep-q"$mountpoint";then
umount"$mountpoint"
fi
guestmount -d"$name"-i"$mountpoint"
sed-i"/^root/s/x//""$mountpoint/etc/passwd"「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




