成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Shell腳本實(shí)戰(zhàn)分享:讓你的工作效率翻倍

開發(fā)
Shell腳本是一種非常實(shí)用的工具,可以幫助我們快速完成各種任務(wù)。今天,我來(lái)分享一些常用的Shell腳本,希望對(duì)大家有所幫助。

在工作中,我們經(jīng)常需要使用一些自動(dòng)化工具來(lái)提高工作效率。其中,Shell腳本是一種非常實(shí)用的工具,可以幫助我們快速完成各種任務(wù)。今天,我來(lái)分享一些常用的Shell腳本,希望對(duì)大家有所幫助。

1.檢測(cè)兩臺(tái)服務(wù)器指定目錄下的文件一致性

這個(gè)腳本可以用于比較兩個(gè)服務(wù)器上的指定目錄是否一致。通過(guò)比較文件的文件的MD5值,可以快速發(fā)現(xiàn)兩個(gè)服務(wù)器之間的差異。

#!/bin/bash  
######################################  
檢測(cè)兩臺(tái)服務(wù)器指定目錄下的文件一致性  
#####################################  
#通過(guò)對(duì)比兩臺(tái)服務(wù)器上文件的md5值,達(dá)到檢測(cè)一致性的目的  
dir=/data/web  
b_ip=192.168.88.10  
#將指定目錄下的文件全部遍歷出來(lái)并作為md5sum命令的參數(shù),進(jìn)而得到所有文件的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  
#將文件名作為遍歷對(duì)象進(jìn)行一一比對(duì)  
for f in `awk '{print 2} /tmp/md5_a.txt'`do
#以a機(jī)器為標(biāo)準(zhǔn),當(dāng)b機(jī)器不存在遍歷對(duì)象中的文件時(shí)直接輸出不存在的結(jié)果  
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}'`  
#當(dāng)文件存在時(shí),如果md5值不一致則輸出文件改變的結(jié)果  
if [ $md5_a != $md5_b ]then
echo"$f changed."
fi
else
echo"$f deleted."
fi
done

2.檢測(cè)網(wǎng)卡流量,并按規(guī)定格式記錄在日志中

該腳本是通過(guò)執(zhí)行sar命令,把服務(wù)器的網(wǎng)卡信息收集起來(lái),可以通過(guò)該腳本把網(wǎng)卡的流量做成圖表可視化的界面:

#!/bin/bash  
#######################################################  
#檢測(cè)網(wǎng)卡流量,并按規(guī)定格式記錄在日志中#規(guī)定一分鐘記錄一次  
#日志格式如下所示:  
#2019-08-12 20:40  
#ens33 input: 1234bps  
#ens33 output: 1235bps  
######################################################3  
while :  
do
#設(shè)置語(yǔ)言為英文,保障輸出結(jié)果是英文,否則會(huì)出現(xiàn)bug  
LANG=en  
logfile=/tmp/`date +%d`.log
#將下面執(zhí)行的命令結(jié)果輸出重定向到logfile日志中  
exec >> $logfile
date +"%F %H:%M"
#sar命令統(tǒng)計(jì)的流量單位為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"####################"
#因?yàn)閳?zhí)行sar命令需要59秒,因此不需要sleep  
done

3.監(jiān)測(cè) Nginx 訪問(wèn)日志 502 情況,并做相應(yīng)動(dòng)作

假設(shè)服務(wù)器環(huán)境為 lnmp,近期訪問(wèn)經(jīng)常出現(xiàn) 502 現(xiàn)象,且 502 錯(cuò)誤在重啟 php-fpm 服務(wù)后消失,因此需要編寫監(jiān)控腳本,一旦出現(xiàn) 502,則自動(dòng)重啟 php-fpm 服務(wù)。

#場(chǎng)景:
#1.訪問(wèn)日志文件的路徑:/data/log/access.log  
#2.腳本死循環(huán),每10秒檢測(cè)一次,10秒的日志條數(shù)為300條,出現(xiàn)502的比例不低于10%(30條)則需要重啟php-fpm服務(wù)  
#3.重啟命令為:/etc/init.d/php-fpm restart  
#!/bin/bash  
###########################################################  
#監(jiān)測(cè)Nginx訪問(wèn)日志502情況,并做相應(yīng)動(dòng)作  
###########################################################  
log=/data/log/access.log  
N=30 #設(shè)定閾值  
while :do
 #查看訪問(wèn)日志的最新300條,并統(tǒng)計(jì)502的次數(shù)  
    err=`tail -n 300 $log |grep -c '502" '`   
if [ $err -ge $N ]   
then
/etc/init.d/php-fpm restart 2> /dev/null   
#設(shè)定60s延遲防止腳本bug導(dǎo)致無(wú)限重啟php-fpm服務(wù)  
     sleep 60  
 fi
 sleep 10  
 done

4.掃描主機(jī)端口狀態(tài)

在日常的工作中,通常需要掃描主機(jī)開放了哪些端口,進(jìn)而作出合理的安全規(guī)劃,通過(guò)以下的腳本,可以大大提高效率

#!/bin/bash

# 檢查參數(shù)數(shù)量
if [ "$#" -ne 2 ]; then
    echo"用法:$0 <IP地址> <端口號(hào)>"
    exit 1
fi

IP="$1"
PORT="$2"

# 使用nc (netcat) 命令掃描端口
nc -z -v -w5 "$IP""$PORT" > /dev/null 2>&1

# 根據(jù)nc命令的返回值判斷端口狀態(tài)
if [ $? -eq 0 ]; then
    echo"端口 $PORT 是開放的"
else
    echo"端口 $PORT 是關(guān)閉的"
fi

將此腳本保存為scan_port.sh,并確保它具有可執(zhí)行權(quán)限(使用chmod +x scan_port.sh)。然后,您可以通過(guò)提供目標(biāo)IP地址和端口號(hào)來(lái)運(yùn)行此腳本,例如:

./scan_port.sh 192.168.1.1 80

5.Expect 實(shí)現(xiàn) SSH 免交互執(zhí)行命令

Expect是一個(gè)自動(dòng)交互式應(yīng)用程序的工具,如telnet,ftp,passwd等。

需先安裝expect軟件包

方法1:EOF標(biāo)準(zhǔn)輸出作為expect標(biāo)準(zhǔn)輸入

#!/bin/bash  
USER=root  
PASS=123.com  
IP=192.168.1.120  
expect << EOFset timeout 30spawn ssh $USER@$IP   expect {    "(yes/no)" {send "yes\r"; exp_continue}    "password:" {send "$PASS\r"}  
}  
expect "$USER@*"  {send "$1\r"}  
expect "$USER@*"  {send "exit\r"}  
expect eof  
EOF

方法2:

#!/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}  
    }"

將expect腳本獨(dú)立出來(lái)

登錄腳本:
# cat login.exp  
#!/usr/bin/expect  
set ip [lindex $argv 0]  
set user [lindex $argv 1]  
set passwd [lindex $argv 2]  
set cmd [lindex $argv 3]  
if { $argc != 4 } {  
puts "Usage: expect login.exp ip user passwd"
exit 1  
}  
set timeout 30  
spawn ssh $user@$ip
expect {      
    "(yes/no)" {send "yes\r"; exp_continue}  
    "password:" {send "$passwd\r"}  
}  
expect "$user@*"  {send "$cmd\r"}  
expect "$user@*"  {send "exit\r"}  
expect eof

執(zhí)行命令腳本:寫個(gè)循環(huán)可以批量操作多臺(tái)服務(wù)器:

#!/bin/bash  
HOST_INFO=user_info.txt  
for ip in $(awk '{print $1}'$HOST_INFO)  
do
    user=$(awk -v I="$ip"'I==$1{print $2}'$HOST_INFO)  
    pass=$(awk -v I="$ip"'I==$1{print $3}'$HOST_INFO)  
    expect login.exp $ip$user$pass$1
done

user_info.txt的內(nèi)容格式如下:192.168.1.120 root 123456

6.iptables 自動(dòng)屏蔽訪問(wèn)網(wǎng)站頻繁的IP

場(chǎng)景:惡意訪問(wèn),安全防范

(1) 屏蔽每分鐘訪問(wèn)超過(guò)200的IP

方法1:根據(jù)訪問(wèn)日志(Nginx為例)

#!/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}')  
#先tail防止文件過(guò)大,讀取慢,數(shù)字可調(diào)整每分鐘最大的訪問(wèn)量。awk不能直接過(guò)濾日志,因?yàn)榘厥庾址?for IP in$ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
        iptables -I INPUT -s $IP -j DROP   
    fi
done

方法2:通過(guò)TCP建立的連接

#!/bin/bash  
ABNORMAL_IP=$(netstat -an |awk '$4~/:80$/ && $6~/ESTABLISHED/{gsub(/:[0-9]+/,"",$5);{a[$5]++}}END{for(i in a)if(a[i]>100)print i}')  
#gsub是將第五列(客戶端IP)的冒號(hào)和端口去掉  
for IP in$ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
        iptables -I INPUT -s $IP -j DROP      
        fi
done

(2) 屏蔽每分鐘SSH嘗試登錄超過(guò)10次的IP

方法1:通過(guò)lastb獲取登錄狀態(tài):

#!/bin/bash  
DATE=$(date +"%a %b %e %H:%M") #星期月天時(shí)分  %e單數(shù)字時(shí)顯示7,而%d顯示07  
ABNORMAL_IP=$(lastb |grep "$DATE" |awk '{a[$3]++}END{for(i in a)if(a[i]>10)print i}')for IP in$ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
        iptables -I INPUT -s $IP -j DROP    
    fi
done

方法2:通過(guò)日志獲取登錄狀態(tài)

#!/bin/bash  
DATE=$(date +"%b %d %H")  
ABNORMAL_IP="$(tail -n10000 /var/log/auth.log |grep "$DATE" |awk '/Failed/{a[$(NF-3)]++}END{for(i in a)if(a[i]>5)print i}')"
for IP in$ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
        iptables -A INPUT -s $IP -j DROP          
        echo"$(date +"%F %T") - iptables -A INPUT -s $IP -j DROP" >>~/ssh-login-limit.log      
    fi
done

anyway,以上是關(guān)于日常工作中常用的腳本分享。

責(zé)任編輯:趙寧寧 來(lái)源: 攻城獅成長(zhǎng)日記
相關(guān)推薦

2024-04-10 14:08:00

人工智能開發(fā)工具

2021-07-16 23:32:28

工具職場(chǎng)軟件

2021-06-25 10:20:07

Linux技巧命令

2021-09-11 22:51:38

Windows 10Windows微軟

2022-08-24 14:42:51

Linux技巧

2021-04-19 17:12:53

網(wǎng)站工具

2021-07-19 09:18:55

IDEA插件工具

2024-04-09 14:06:06

Git實(shí)用命令版本

2023-05-16 06:50:50

prompt郵件語(yǔ)法

2020-08-17 17:21:30

備份數(shù)據(jù)數(shù)據(jù)庫(kù)

2020-12-16 08:33:57

JS函數(shù)效率

2014-04-04 10:27:50

碼農(nóng)工作效率

2015-11-16 11:53:06

程序員效率加班

2023-04-27 13:16:45

2023-08-01 10:31:03

工具平臺(tái)插件化

2023-02-22 19:15:35

AI工具機(jī)器人

2023-04-18 23:39:07

VS Code代碼編輯器插件

2023-11-29 07:04:19

Git工作效率

2025-04-18 04:22:00

2024-12-02 18:16:56

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 99国产精品99久久久久久 | 粉色午夜视频 | 久久r精品 | 91精品久久久久 | 亚洲一区在线播放 | 91高清在线观看 | 一级看片免费视频囗交动图 | 自拍偷拍亚洲视频 | 91精品欧美久久久久久久 | 最新中文字幕在线 | 亚洲成av人片在线观看 | 精品国产一区二区三区av片 | 看片91 | 国产精品亚洲一区二区三区在线 | 中文字幕高清 | 蜜桃精品噜噜噜成人av | 9191成人精品久久 | 亚洲国产精品美女 | 欧美一级做性受免费大片免费 | 黄色一级毛片免费看 | 国产精品成人一区二区 | 黄色免费在线观看 | 国产日韩久久 | 亚洲一区二区av | 欧美精品网站 | 这里精品 | 日本中文在线视频 | 中文字幕在线观看www | 日韩成人免费视频 | 欧洲国产精品视频 | 亚洲精选一区二区 | 亚洲久草视频 | 成人免费淫片aa视频免费 | 中文字幕一区二区在线观看 | 精品综合久久久 | 午夜电影网站 | 国产精品国产三级国产aⅴ入口 | 日韩av在线一区 | 天天躁天天操 | 国产成人福利在线观看 | 精品国产一区二区在线 |