日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

超实用!18 个开箱即用的 Shell 脚本,拿好了~

發(fā)布時間:2024/8/23 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超实用!18 个开箱即用的 Shell 脚本,拿好了~ 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一個神經(jīng)元能夠催生多少故事?香港中文大學(xué)信息工程系助理教授周博磊近日撰文介紹了他自 2015 年開始至今對神經(jīng)元的研究經(jīng)歷。最近,他與 David Bau、朱俊彥等人合作的神經(jīng)元研究論文發(fā)表在了 PNAS 雜志上。

>>>>


1、檢測兩臺服務(wù)器指定目錄下的文件一致性

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

2、定時清空文件內(nèi)容,定時記錄文件大小

#!/bin/bash ################################################################# 每小時執(zhí)行一次腳本(任務(wù)計(jì)劃),當(dāng)時間為0點(diǎn)或12點(diǎn)時,將目標(biāo)目錄下的所有文件內(nèi)#容清空,但不刪除文件,其他時間則只統(tǒng)計(jì)各個文件的大小,一個文件一行,輸出到以時#間和日期命名的文件中,需要考慮目標(biāo)目錄下二級、三級等子目錄的文件 ################################################################ logfile=/tmp/`date?+%H-%F`.log n=`date?+%H` if?[?$n?-eq?00?]?||?[?$n?-eq?12?] then #通過for循環(huán),以find命令作為遍歷條件,將目標(biāo)目錄下的所有文件進(jìn)行遍歷并做相應(yīng)操作 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、檢測網(wǎng)卡流量,并按規(guī)定格式記錄在日志中

#!/bin/bash ####################################################### #檢測網(wǎng)卡流量,并按規(guī)定格式記錄在日志中#規(guī)定一分鐘記錄一次 #日志格式如下所示: #2019-08-12?20:40 #ens33?input:?1234bps #ens33?output:?1235bps ######################################################3 while?: do #設(shè)置語言為英文,保障輸出結(jié)果是英文,否則會出現(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

4、計(jì)算文檔每行出現(xiàn)的數(shù)字個數(shù),并計(jì)算整個文檔的數(shù)字總數(shù)

#!/bin/bash ######################################################### #計(jì)算文檔每行出現(xiàn)的數(shù)字個數(shù),并計(jì)算整個文檔的數(shù)字總數(shù) ######################################################## #使用awk只輸出文檔行數(shù)(截取第一段) n=`wc?-l?a.txt|awk?'{print?$1}'` sum=0 #文檔中每一行可能存在空格,因此不能直接用文檔內(nèi)容進(jìn)行遍歷 for?i?in?`seq?1?$n`do #輸出的行用變量表示時,需要用雙引號 line=`sed?-n?"$i"p?a.txt`#wc?-L選項(xiàng),統(tǒng)計(jì)最長行的長度 n_n=`echo?$line|sed?s'/[^0-9]//'g|wc?-L` echo?$n_nsum=$[$sum+$n_n] done echo?"sum:$sum"

殺死所有腳本

#!/bin/bash ################################################################ #有一些腳本加入到了cron之中,存在腳本尚未運(yùn)行完畢又有新任務(wù)需要執(zhí)行的情況, #導(dǎo)致系統(tǒng)負(fù)載升高,因此可通過編寫腳本,篩選出影響負(fù)載的進(jìn)程一次性全部殺死。 ################################################################ ps?aux|grep?指定進(jìn)程名|grep?-v?grep|awk?'{print?$2}'|xargs?kill?-9

5、從 FTP 服務(wù)器下載文件

#!/bin/bash if?[?$#?-ne?1?];?thenecho?"Usage:?$0?filename" fi dir=$(dirname?$1) file=$(basename?$1) ftp?-n?-v?<<?EOF???#?-n?自動登錄 open?192.168.1.10??#?ftp服務(wù)器 user?admin?password binary???#?設(shè)置ftp傳輸模式為二進(jìn)制,避免MD5值不同或.tar.gz壓縮包格式錯誤 cd?$dir get?"$file" EOF

6、連續(xù)輸入5個100以內(nèi)的數(shù)字,統(tǒng)計(jì)和、最小和最大

#!/bin/bash COUNT=1 SUM=0 MIN=0 MAX=100 while?[?$COUNT?-le?5?];?doread?-p?"請輸入1-10個整數(shù):"?INT????if?[[?!?$INT?=~?^[0-9]+$?]];?thenecho?"輸入必須是整數(shù)!"exit?1elif?[[?$INT?-gt?100?]];?thenecho?"輸入必須是100以內(nèi)!"exit?1fiSUM=$(($SUM+$INT))[?$MIN?-lt?$INT?]?&&?MIN=$INT[?$MAX?-gt?$INT?]?&&?MAX=$INTlet?COUNT++done echo?"SUM:?$SUM" echo?"MIN:?$MIN" echo?"MAX:?$MAX

用戶猜數(shù)字

#!/bin/bash??#?腳本生成一個?100?以內(nèi)的隨機(jī)數(shù),提示用戶猜數(shù)字,根據(jù)用戶的輸入,提示用戶猜對了, #?猜小了或猜大了,直至用戶猜對腳本結(jié)束。 #?RANDOM?為系統(tǒng)自帶的系統(tǒng)變量,值為?0‐32767的隨機(jī)數(shù) #?使用取余算法將隨機(jī)數(shù)變?yōu)?1‐100?的隨機(jī)數(shù)num=$[RANDOM%100+1]echo?"$num"? #?使用?read?提示用戶猜數(shù)字 #?使用?if?判斷用戶猜數(shù)字的大小關(guān)系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于), #?‐lt(小于),‐le(小于等于)while?:do?????read?-p?"計(jì)算機(jī)生成了一個?1‐100?的隨機(jī)數(shù),你猜:?"?cai????if?[?$cai?-eq?$num?]????then????????echo?"恭喜,猜對了"???????????exit????????elif?[?$cai?-gt?$num?]???????then????????????echo?"Oops,猜大了"?????????else????????????echo?"Oops,猜小了"?????fidone

7、監(jiān)測 Nginx 訪問日志 502 情況,并做相應(yīng)動作

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

#場景: #1.訪問日志文件的路徑:/data/log/access.log #2.腳本死循環(huán),每10秒檢測一次,10秒的日志條數(shù)為300條,出現(xiàn)502的比例不低于10%(30條)則需要重啟php-fpm服務(wù) #3.重啟命令為:/etc/init.d/php-fpm restart #!/bin/bash ########################################################### #監(jiān)測Nginx訪問日志502情況,并做相應(yīng)動作 ########################################################### log=/data/log/access.log N=30?#設(shè)定閾值 while?:do#查看訪問日志的最新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)致無限重啟php-fpm服務(wù)sleep?60fisleep?10done

8、將結(jié)果分別賦值給變量

應(yīng)用場景:希望將執(zhí)行結(jié)果或者位置參數(shù)賦值給變量,以便后續(xù)使用。

方法1:

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

方法2:將位置參數(shù)192.168.1.1{1,2}拆分為到每個變量

num=0 for?i?in?$(eval?echo?$*);do???#eval將{1,2}分解為1?2let?num+=1eval?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 目的:把a(bǔ)rticle改為bbs

方法1:

for?file?in?$(ls?*html);?domv?$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");?domv?$file?bbs_${file#*_}done

方法3:

#?rename?article?bbs?*.html 把一個文檔前五行中包含字母的行刪掉,同時刪除6到10行包含的所有字母1)準(zhǔn)備測試文件,文件名為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 #最終結(jié)果只是在屏幕上打印結(jié)果,如果想直接更改文件,可將輸出結(jié)果寫入臨時文件中,再替換2.txt或者使用-i選項(xiàng)

10、統(tǒng)計(jì)當(dāng)前目錄中以.html結(jié)尾的文件總大

方法1:

#?find?.?-name?"*.html"?-exec?du?-k?{}?\;?|awk?'{sum+=$1}END{print?sum}'方法2: ```bash for?size?in?$(ls?-l?*.html?|awk?'{print?$5}');?dosum=$(($sum+$size)) done echo?$sum

11、掃描主機(jī)端口狀態(tài)

#!/bin/bash HOST=$1 PORT="22?25?80?8080" for?PORT?in?$PORT;?doif?echo?&>/dev/null?>?/dev/tcp/$HOST/$PORT;?thenecho?"$PORT?open"elseecho?"$PORT?close"fi done 用?shell?打印示例語句中字母數(shù)小于6的單詞#示例語句: #Bash?also?interprets?a?number?of?multi-character?options. #!/bin/bash ############################################################## #shell打印示例語句中字母數(shù)小于6的單詞 ############################################################## for?s?in?Bash?also?interprets?a?number?of?multi-character?options. don=`echo?$s|wc?-c`?if?[?$n?-lt?6?]?thenecho?$sfi done

12、輸入數(shù)字運(yùn)行相應(yīng)命令

#!/bin/bash ############################################################## #輸入數(shù)字運(yùn)行相應(yīng)命令 ############################################################## echo?"*cmd?menu*?1-date?2-ls?3-who?4-pwd?0-exit?" while?: do #捕獲用戶鍵入值read?-p?"please?input?number?:"?nn1=`echo?$n|sed?s'/[0-9]//'g` #空輸入檢測?if?[?-z?"$n"?]thencontinuefi #非數(shù)字輸入檢測?if?[?-n?"$n1"?]thenexit?0fibreak done case?$n?in1)date;;2)ls;;3)who;;4)pwd;;0)break;;#輸入數(shù)字非1-4的提示*)echo?"please?input?number?is?[1-4]" esac

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

Expect是一個自動交互式應(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@$IPexpect?{\"(yes/no)\"?{send?\"yes\r\";?exp_continue}\"password:\"?{send?\"$PASS\r\";?exp_continue}\"$USER@*\"?{send?\"df?-h\r?exit\r\";?exp_continue}}"

方法3:將expect腳本獨(dú)立出來

登錄腳本: #?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í)行命令腳本:寫個循環(huán)可以批量操作多臺服務(wù)器

#!/bin/bash HOST_INFO=user_info.txt for?ip?in?$(awk?'{print?$1}'?$HOST_INFO) douser=$(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 Linux主機(jī)SSH連接信息: #?cat?user_info.txt 192.168.1.120?root?123456 創(chuàng)建10個用戶,并分別設(shè)置密碼,密碼要求10位且包含大小寫字母以及數(shù)字,最后需要把每個用戶的密碼存在指定文件中 ```bash #!/bin/bash ############################################################## #創(chuàng)建10個用戶,并分別設(shè)置密碼,密碼要求10位且包含大小寫字母以及數(shù)字 #最后需要把每個用戶的密碼存在指定文件中#前提條件:安裝mkpasswd命令 ############################################################## #生成10個用戶的序列(00-09) for?u?in?`seq?-w?0?09`do#創(chuàng)建用戶useradd?user_$u#生成密碼p=`mkpasswd?-s?0?-l?10`?#從標(biāo)準(zhǔn)輸入中讀取密碼進(jìn)行修改(不安全)echo?$p|passwd?--stdin?user_$u#常規(guī)修改密碼echo?-e?"$p\n$p"|passwd?user_$u#將創(chuàng)建的用戶及對應(yīng)的密碼記錄到日志文件中echo?"user_$u?$p"?>>?/tmp/userpassworddone

14、監(jiān)控 httpd 的進(jìn)程數(shù),根據(jù)監(jiān)控情況做相應(yīng)處理

#!/bin/bash ############################################################################################################################### #需求: #1.每隔10s監(jiān)控httpd的進(jìn)程數(shù),若進(jìn)程數(shù)大于等于500,則自動重啟Apache服務(wù),并檢測服務(wù)是否重啟成功 #2.若未成功則需要再次啟動,若重啟5次依舊沒有成功,則向管理員發(fā)送告警郵件,并退出檢測 #3.如果啟動成功,則等待1分鐘后再次檢測httpd進(jìn)程數(shù),若進(jìn)程數(shù)正常,則恢復(fù)正常檢測(10s一次),否則放棄重啟并向管理員發(fā)送告警郵件,并退出檢測 ############################################################################################################################### #計(jì)數(shù)器函數(shù) check_service() {j=0for?i?in?`seq?1?5`?do#重啟Apache的命令/usr/local/apache2/bin/apachectl?restart?2>?/var/log/httpderr.log????#判斷服務(wù)是否重啟成功if?[?$??-eq?0?]?thenbreakelsej=$[$j+1]?fi#判斷服務(wù)是否已嘗試重啟5次if?[?$j?-eq?5?]?thenmail.py?exitfidone?}while?:don=`pgrep?-l?httpd|wc?-l`?#判斷httpd服務(wù)進(jìn)程數(shù)是否超過500if?[?$n?-gt?500?]?then/usr/local/apache2/bin/apachectl?restart?if?[?$??-ne?0?]?thencheck_service?elsesleep?60n2=`pgrep?-l?httpd|wc?-l`?#判斷重啟后是否依舊超過500if?[?$n2?-gt?500?]?then?mail.py?exitfififi#每隔10s檢測一次sleep?10done

15、批量修改服務(wù)器用戶密碼

Linux主機(jī)SSH連接信息:舊密碼

#?cat?old_pass.txt? 192.168.18.217??root????123456?????22 192.168.18.218??root????123456?????22 內(nèi)容格式:IP User Password PortSSH遠(yuǎn)程修改密碼腳本:新密碼隨機(jī)生成 https://www.linuxprobe.com/books #!/bin/bash OLD_INFO=old_pass.txt NEW_INFO=new_pass.txt for?IP?in?$(awk?'/^[^#]/{print?$1}'?$OLD_INFO);?doUSER=$(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)??#?隨機(jī)密碼echo?"$IP???$USER???$NEW_PASS???$PORT"?>>?$NEW_INFOexpect?-c?"spawn?ssh?-p$PORT?$USER@$IPset?timeout?2expect?{\"(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 生成新密碼文件:#?cat?new_pass.txt? 192.168.18.217??root????n8wX3mU%??????22 192.168.18.218??root????c87;ZnnL??????22

16、iptables 自動屏蔽訪問網(wǎng)站頻繁的IP

場景:惡意訪問,安全防范

1)屏蔽每分鐘訪問超過200的IP

方法1:根據(jù)訪問日志(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防止文件過大,讀取慢,數(shù)字可調(diào)整每分鐘最大的訪問量。awk不能直接過濾日志,因?yàn)榘厥庾址?for?IP?in?$ABNORMAL_IP;?doif?[?$(iptables?-vnL?|grep?-c?"$IP")?-eq?0?];?theniptables?-I?INPUT?-s?$IP?-j?DROP????fidone

方法2:通過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)的冒號和端口去掉 for?IP?in?$ABNORMAL_IP;?doif?[?$(iptables?-vnL?|grep?-c?"$IP")?-eq?0?];?theniptables?-I?INPUT?-s?$IP?-j?DROP????fi done

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

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

#!/bin/bash DATE=$(date?+"%a?%b?%e?%H:%M")?#星期月天時分??%e單數(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;?doif?[?$(iptables?-vnL?|grep?-c?"$IP")?-eq?0?];?theniptables?-I?INPUT?-s?$IP?-j?DROP????fidone

方法2:通過日志獲取登錄狀態(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;?doif?[?$(iptables?-vnL?|grep?-c?"$IP")?-eq?0?];?theniptables?-A?INPUT?-s?$IP?-j?DROP????????echo?"$(date?+"%F?%T")?-?iptables?-A?INPUT?-s?$IP?-j?DROP"?>>~/ssh-login-limit.log????fi done

17、根據(jù)web訪問日志,封禁請求量異常的IP,如IP在半小時后恢復(fù)正常,則解除封禁

#!/bin/bash #################################################################################### #根據(jù)web訪問日志,封禁請求量異常的IP,如IP在半小時后恢復(fù)正常,則解除封禁 #################################################################################### logfile=/data/log/access.log #顯示一分鐘前的小時和分鐘 d1=`date?-d?"-1?minute"?+%H%M` d2=`date?+%M` ipt=/sbin/iptables ips=/tmp/ips.txt block() {? #將一分鐘前的日志全部過濾出來并提取IP以及統(tǒng)計(jì)訪問次數(shù)grep?'$d1:'?$logfile|awk?'{print?$1}'|sort?-n|uniq?-c|sort?-n?>?$ips#利用for循環(huán)將次數(shù)超過100的IP依次遍歷出來并予以封禁for?i?in?`awk?'$1>100?{print?$2}'?$ips`?do$ipt?-I?INPUT?-p?tcp?--dport?80?-s?$i?-j?REJECT?echo?"`date?+%F-%T`?$i"?>>?/tmp/badip.log?done } unblock() {? #將封禁后所產(chǎn)生的pkts數(shù)量小于10的IP依次遍歷予以解封for?a?in?`$ipt?-nvL?INPUT?--line-numbers?|grep?'0.0.0.0/0'|awk?'$2<10?{print?$1}'|sort?-nr`?do?$ipt?-D?INPUT?$adone$ipt?-Z } #當(dāng)時間在00分以及30分時執(zhí)行解封函數(shù) if?[?$d2?-eq?"00"?]?||?[?$d2?-eq?"30"?]?then#要先解再封,因?yàn)閯倓偡饨麜r產(chǎn)生的pkts數(shù)量很少unblockblock?elseblock fi

18、判斷用戶輸入的是否為IP地址

方法1:

#!/bin/bash function?check_ip(){IP=$1VALID_CHECK=$(echo?$IP|awk?-F.?'$1<?=255&&$2<=255&&$3<=255&&$4<=255{print?"yes"}')if?echo?$IP|grep?-E?"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null;?thenif?[?$VALID_CHECK?==?"yes"?];?thenecho?"$IP?available."elseecho?"$IP?not?available!"fielseecho?"Format?error!"fi } check_ip?192.168.1.1 check_ip?256.1.1.1

方法2:

#!/bin/bash function?check_ip(){IP=$1if?[[?$IP?=~?^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$?]];?thenFIELD1=$(echo?$IP|cut?-d.?-f1)FIELD2=$(echo?$IP|cut?-d.?-f2)FIELD3=$(echo?$IP|cut?-d.?-f3)FIELD4=$(echo?$IP|cut?-d.?-f4)if?[?$FIELD1?-le?255?-a?$FIELD2?-le?255?-a?$FIELD3?-le?255?-a?$FIELD4?-le?255?];?thenecho?"$IP?available."elseecho?"$IP?not?available!"fielseecho?"Format?error!"fi } check_ip?192.168.1.1 check_ip?256.1.1.1

增加版:

加個死循環(huán),如果IP可用就退出,不可用提示繼續(xù)輸入,并使用awk判斷。

#!/bin/bash function?check_ip(){local?IP=$1VALID_CHECK=$(echo?$IP|awk?-F.?'$1<?=255&&$2<=255&&$3<=255&&$4<=255{print?"yes"}')if?echo?$IP|grep?-E?"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"?>/dev/null;?thenif?[?$VALID_CHECK?==?"yes"?];?thenreturn?0elseecho?"$IP?not?available!"return?1fielseecho?"Format?error!?Please?input?again."return?1fi } while?true;?doread?-p?"Please?enter?IP:?"?IPcheck_ip?$IP[?$??-eq?0?]?&&?break?||?continue done—版權(quán)聲明—本文來源:高效運(yùn)維,編輯:nhyilin。僅用于學(xué)術(shù)分享,版權(quán)屬于原作者。若有侵權(quán),請聯(lián)系微信號:Eternalhui或nhyilin刪除或修改!—THE END— 文章推薦?完美數(shù):數(shù)學(xué)寶庫中的一顆璀璨明珠 ?15歲進(jìn)少年班,21歲打破西方技術(shù)壁壘!這位95后正在改變世界?名校博士被撤銷學(xué)位,只因7行文字抄襲及1張互聯(lián)網(wǎng)圖片……?我見過最糟糕的代碼?數(shù)論大牛John Coates:如果我建數(shù)學(xué)系,將采用劍橋模式?央行這篇工作論文火了!房價太高“逼走年輕人”,中等收入陷阱“文科生太多”… 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的超实用!18 个开箱即用的 Shell 脚本,拿好了~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 极品少妇xxxx精品少妇偷拍 | 欧洲成人综合 | 亚洲精品白浆高清久久久久久 | 亚洲国产精品无码久久久 | 天天草av | 亚州综合视频 | 国产精品一区久久久 | 在线一区二区三区四区五区 | 久久久久无码精品国产 | 免费观看理伦片在线播放视频软件 | 国产人妻黑人一区二区三区 | 美女丝袜av | 草一色| 国产一级久久 | 国产成人在线视频观看 | 国产精品欧美激情 | 国产一卡二卡三卡 | www.日本精品| 一级做a爰片久久毛片潮喷 天天透天天干 | 亚洲AV永久无码国产精品国产 | 精品人妻伦一区二区三区久久 | 美女扒开尿口让男人捅爽 | 黄色香港三级三级三级 | 国产夫妻久久 | 一区二区网 | 91爱国产 | 欧美福利在线 | 免费观看一区二区三区毛片 | 在线观看欧美国产 | 国产精品情侣呻吟对白视频 | 亚洲天堂2021av | 国产黄色91| 熟妇熟女乱妇乱女网站 | 欧美精品xxxxx| 影音先锋在线看片资源 | www.国产精品视频 | 色亭亭 | 久久久久亚洲av成人无码电影 | 日韩精品色呦呦 | 色综合图片区 | 1024福利| 爆操女秘书 | 国产成年人 | 欧美亚洲综合在线 | 日本欧美一区二区三区 | 在线免费成人网 | 91精品视频观看 | 99爱免费视频 | 精品动漫3d一区二区三区免费版 | 九九精品免费视频 | 日本美女裸体视频 | 成人动态视频 | 亚洲午夜精品一区 | 亚洲一区二区三区四区在线播放 | 欧美精品xx | 无码人妻精品一区二区三区9厂 | 欧美亚洲国产视频 | 欧美无人区码suv | 国产无遮挡a片又黄又爽 | 国产大片中文字幕在线观看 | 中文字幕在线乱 | 最新在线黄色网址 | 国产影视一区二区三区 | 国产日韩激情 | 欧美日韩在线观看一区 | 国产另类精品 | 久一在线视频 | 奇米影视盒 | 成人免费国产 | 精一区二区 | 成年人视频免费在线观看 | 91精品国产一区二区无码 | 337p日本欧洲亚洲大胆精筑 | 亚洲视频在线免费观看 | 加勒比一区在线 | 天天摸日日摸狠狠添 | 欧美精品影院 | 91小视频在线观看 | 久久在线视频 | 狠狠爱天天干 | 黑人大群体交免费视频 | 大又大粗又爽又黄少妇毛片 | 大j8福利视频导航 | 菲律宾av | 动漫玉足吸乳羞免费网站玉足 | 麻豆传媒在线播放 | 一级女性全黄久久生活片免费 | 91久久视频 | 中文精品在线 | 国产经典一区二区三区 | 日本熟妇人妻中出 | 人人射人人插 | 波多野吉衣一二三区乱码 | 久久99国产精品成人 | 亚洲天堂视频在线播放 | 青青草免费在线观看视频 | 91超碰在线免费观看 | a v在线视频 | 成人午夜视频免费在线观看 |