{"id":10008198,"date":"2023-08-31T10:00:08","date_gmt":"2023-08-31T02:00:08","guid":{"rendered":"https:\/\/blog.itmax.cn\/?p=10008198"},"modified":"2023-08-31T10:00:08","modified_gmt":"2023-08-31T02:00:08","slug":"18-%e4%b8%aa%e4%b8%80%e7%ba%bf%e5%b7%a5%e4%bd%9c%e7%9a%84%e5%b8%b8%e7%94%a8-shell-%e8%84%9a%e6%9c%ac%ef%bc%8c%e5%bb%ba%e8%ae%ae%e6%94%b6%e8%97%8f%ef%bc%81","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10008198","title":{"rendered":"18 \u4e2a\u4e00\u7ebf\u5de5\u4f5c\u7684\u5e38\u7528 Shell \u811a\u672c\uff0c\u5efa\u8bae\u6536\u85cf\uff01"},"content":{"rendered":"<p>\u6765\u6e90\uff1a\u8fdb\u51fb\u4e91\u539f\u751f<\/p>\n<h4>1\u3001\u68c0\u6d4b\u4e24\u53f0\u670d\u52a1\u5668\u6307\u5b9a\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u4e00\u81f4\u6027<\/h4>\n<pre><code>#!\/bin\/bash  \n######################################  \n\u68c0\u6d4b\u4e24\u53f0\u670d\u52a1\u5668\u6307\u5b9a\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u4e00\u81f4\u6027  \n#####################################  \n#\u901a\u8fc7\u5bf9\u6bd4\u4e24\u53f0\u670d\u52a1\u5668\u4e0a\u6587\u4ef6\u7684md5\u503c\uff0c\u8fbe\u5230\u68c0\u6d4b\u4e00\u81f4\u6027\u7684\u76ee\u7684  \ndir=\/data\/web  \nb_ip=192.168.88.10  \n#\u5c06\u6307\u5b9a\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u5168\u90e8\u904d\u5386\u51fa\u6765\u5e76\u4f5c\u4e3amd5sum\u547d\u4ee4\u7684\u53c2\u6570\uff0c\u8fdb\u800c\u5f97\u5230\u6240\u6709\u6587\u4ef6\u7684md5\u503c\uff0c\u5e76\u5199\u5165\u5230\u6307\u5b9a\u6587\u4ef6\u4e2d  \nfind $dir -type f|xargs md5sum &gt; \/tmp\/md5_a.txt  \nssh $b_ip &quot;find $dir -type f|xargs md5sum &gt; \/tmp\/md5_b.txt&quot;  \nscp $b_ip:\/tmp\/md5_b.txt \/tmp  \n#\u5c06\u6587\u4ef6\u540d\u4f5c\u4e3a\u904d\u5386\u5bf9\u8c61\u8fdb\u884c\u4e00\u4e00\u6bd4\u5bf9  \nfor f in `awk '{print 2} \/tmp\/md5_a.txt'`do  \n#\u4ee5a\u673a\u5668\u4e3a\u6807\u51c6\uff0c\u5f53b\u673a\u5668\u4e0d\u5b58\u5728\u904d\u5386\u5bf9\u8c61\u4e2d\u7684\u6587\u4ef6\u65f6\u76f4\u63a5\u8f93\u51fa\u4e0d\u5b58\u5728\u7684\u7ed3\u679c  \nif grep -qw &quot;$f&quot; \/tmp\/md5_b.txt  \nthen  \nmd5_a=`grep -w &quot;$f&quot; \/tmp\/md5_a.txt|awk '{print 1}'`  \nmd5_b=`grep -w &quot;$f&quot; \/tmp\/md5_b.txt|awk '{print 1}'`  \n#\u5f53\u6587\u4ef6\u5b58\u5728\u65f6\uff0c\u5982\u679cmd5\u503c\u4e0d\u4e00\u81f4\u5219\u8f93\u51fa\u6587\u4ef6\u6539\u53d8\u7684\u7ed3\u679c  \nif [ $md5_a != $md5_b ]then  \necho &quot;$f changed.&quot;  \nfi  \nelse  \necho &quot;$f deleted.&quot;  \nfi  \ndone  <\/code><\/pre>\n<h4>2\u3001\u5b9a\u65f6\u6e05\u7a7a\u6587\u4ef6\u5185\u5bb9\uff0c\u5b9a\u65f6\u8bb0\u5f55\u6587\u4ef6\u5927\u5c0f<\/h4>\n<pre><code>#!\/bin\/bash  \n#################################################################  \n\u6bcf\u5c0f\u65f6\u6267\u884c\u4e00\u6b21\u811a\u672c\uff08\u4efb\u52a1\u8ba1\u5212\uff09\uff0c\u5f53\u65f6\u95f4\u4e3a0\u70b9\u621612\u70b9\u65f6\uff0c\u5c06\u76ee\u6807\u76ee\u5f55\u4e0b\u7684\u6240\u6709\u6587\u4ef6\u5185#\u5bb9\u6e05\u7a7a\uff0c\u4f46\u4e0d\u5220\u9664\u6587\u4ef6\uff0c\u5176\u4ed6\u65f6\u95f4\u5219\u53ea\u7edf\u8ba1\u5404\u4e2a\u6587\u4ef6\u7684\u5927\u5c0f\uff0c\u4e00\u4e2a\u6587\u4ef6\u4e00\u884c\uff0c\u8f93\u51fa\u5230\u4ee5\u65f6#\u95f4\u548c\u65e5\u671f\u547d\u540d\u7684\u6587\u4ef6\u4e2d\uff0c\u9700\u8981\u8003\u8651\u76ee\u6807\u76ee\u5f55\u4e0b\u4e8c\u7ea7\u3001\u4e09\u7ea7\u7b49\u5b50\u76ee\u5f55\u7684\u6587\u4ef6  \n################################################################  \nlogfile=\/tmp\/`date +%H-%F`.log  \nn=`date +%H`  \nif [ $n -eq 00 ] || [ $n -eq 12 ]  \nthen  \n#\u901a\u8fc7for\u5faa\u73af\uff0c\u4ee5find\u547d\u4ee4\u4f5c\u4e3a\u904d\u5386\u6761\u4ef6\uff0c\u5c06\u76ee\u6807\u76ee\u5f55\u4e0b\u7684\u6240\u6709\u6587\u4ef6\u8fdb\u884c\u904d\u5386\u5e76\u505a\u76f8\u5e94\u64cd\u4f5c  \nfor i in `find \/data\/log\/ -type f`  \ndo  \ntrue &gt; $i  \ndone  \nelse  \nfor i in `find \/data\/log\/ -type f`  \ndo  \ndu -sh $i &gt;&gt; $logfile  \ndone  \nfi  <\/code><\/pre>\n<h4>3\u3001\u68c0\u6d4b\u7f51\u5361\u6d41\u91cf\uff0c\u5e76\u6309\u89c4\u5b9a\u683c\u5f0f\u8bb0\u5f55\u5728\u65e5\u5fd7\u4e2d<\/h4>\n<pre><code>#!\/bin\/bash  \n#######################################################  \n#\u68c0\u6d4b\u7f51\u5361\u6d41\u91cf\uff0c\u5e76\u6309\u89c4\u5b9a\u683c\u5f0f\u8bb0\u5f55\u5728\u65e5\u5fd7\u4e2d#\u89c4\u5b9a\u4e00\u5206\u949f\u8bb0\u5f55\u4e00\u6b21  \n#\u65e5\u5fd7\u683c\u5f0f\u5982\u4e0b\u6240\u793a:  \n#2019-08-12 20:40  \n#ens33 input: 1234bps  \n#ens33 output: 1235bps  \n######################################################3  \nwhile :  \ndo  \n#\u8bbe\u7f6e\u8bed\u8a00\u4e3a\u82f1\u6587\uff0c\u4fdd\u969c\u8f93\u51fa\u7ed3\u679c\u662f\u82f1\u6587\uff0c\u5426\u5219\u4f1a\u51fa\u73b0bug  \nLANG=en  \nlogfile=\/tmp\/`date +%d`.log  \n#\u5c06\u4e0b\u9762\u6267\u884c\u7684\u547d\u4ee4\u7ed3\u679c\u8f93\u51fa\u91cd\u5b9a\u5411\u5230logfile\u65e5\u5fd7\u4e2d  \nexec &gt;&gt; $logfile  \ndate +&quot;%F %H:%M&quot;  \n#sar\u547d\u4ee4\u7edf\u8ba1\u7684\u6d41\u91cf\u5355\u4f4d\u4e3akb\/s\uff0c\u65e5\u5fd7\u683c\u5f0f\u4e3abps\uff0c\u56e0\u6b64\u8981*1000*8  \nsar -n DEV 1 59|grep Average|grep ens33|awk '{print $2,&quot;\/t&quot;,&quot;input:&quot;,&quot;\/t&quot;,$5*1000*8,&quot;bps&quot;,&quot;\/n&quot;,$2,&quot;\/t&quot;,&quot;output:&quot;,&quot;\/t&quot;,$6*1000*8,&quot;bps&quot;}'  \necho &quot;####################&quot;  \n#\u56e0\u4e3a\u6267\u884csar\u547d\u4ee4\u9700\u898159\u79d2\uff0c\u56e0\u6b64\u4e0d\u9700\u8981sleep  \ndone  <\/code><\/pre>\n<h4>4\u3001\u8ba1\u7b97\u6587\u6863\u6bcf\u884c\u51fa\u73b0\u7684\u6570\u5b57\u4e2a\u6570\uff0c\u5e76\u8ba1\u7b97\u6574\u4e2a\u6587\u6863\u7684\u6570\u5b57\u603b\u6570<\/h4>\n<pre><code>#!\/bin\/bash  \n#########################################################  \n#\u8ba1\u7b97\u6587\u6863\u6bcf\u884c\u51fa\u73b0\u7684\u6570\u5b57\u4e2a\u6570\uff0c\u5e76\u8ba1\u7b97\u6574\u4e2a\u6587\u6863\u7684\u6570\u5b57\u603b\u6570  \n########################################################  \n#\u4f7f\u7528awk\u53ea\u8f93\u51fa\u6587\u6863\u884c\u6570\uff08\u622a\u53d6\u7b2c\u4e00\u6bb5\uff09  \nn=`wc -l a.txt|awk '{print $1}'`  \nsum=0  \n#\u6587\u6863\u4e2d\u6bcf\u4e00\u884c\u53ef\u80fd\u5b58\u5728\u7a7a\u683c\uff0c\u56e0\u6b64\u4e0d\u80fd\u76f4\u63a5\u7528\u6587\u6863\u5185\u5bb9\u8fdb\u884c\u904d\u5386  \nfor i in `seq 1 $n`do  \n#\u8f93\u51fa\u7684\u884c\u7528\u53d8\u91cf\u8868\u793a\u65f6\uff0c\u9700\u8981\u7528\u53cc\u5f15\u53f7  \nline=`sed -n &quot;$i&quot;p a.txt`#wc -L\u9009\u9879\uff0c\u7edf\u8ba1\u6700\u957f\u884c\u7684\u957f\u5ea6  \nn_n=`echo $line|sed s'\/[^0-9]\/\/'g|wc -L`  \necho $n_nsum=$[$sum+$n_n]  \ndone  \necho &quot;sum:$sum&quot;  <\/code><\/pre>\n<p>\u6740\u6b7b\u6240\u6709\u811a\u672c<\/p>\n<pre><code>#!\/bin\/bash  \n################################################################  \n#\u6709\u4e00\u4e9b\u811a\u672c\u52a0\u5165\u5230\u4e86cron\u4e4b\u4e2d\uff0c\u5b58\u5728\u811a\u672c\u5c1a\u672a\u8fd0\u884c\u5b8c\u6bd5\u53c8\u6709\u65b0\u4efb\u52a1\u9700\u8981\u6267\u884c\u7684\u60c5\u51b5\uff0c  \n#\u5bfc\u81f4\u7cfb\u7edf\u8d1f\u8f7d\u5347\u9ad8\uff0c\u56e0\u6b64\u53ef\u901a\u8fc7\u7f16\u5199\u811a\u672c\uff0c\u7b5b\u9009\u51fa\u5f71\u54cd\u8d1f\u8f7d\u7684\u8fdb\u7a0b\u4e00\u6b21\u6027\u5168\u90e8\u6740\u6b7b\u3002  \n################################################################  \nps aux|grep \u6307\u5b9a\u8fdb\u7a0b\u540d|grep -v grep|awk '{print $2}'|xargs kill -9  <\/code><\/pre>\n<h4>5\u3001\u4ece FTP \u670d\u52a1\u5668\u4e0b\u8f7d\u6587\u4ef6<\/h4>\n<pre><code>#!\/bin\/bash  \nif [ $# -ne 1 ]; then  \n    echo &quot;Usage: $0 filename&quot;  \nfi  \ndir=$(dirname $1)  \nfile=$(basename $1)  \nftp -n -v &lt;&lt; EOF   # -n \u81ea\u52a8\u767b\u5f55  \nopen 192.168.1.10  # ftp\u670d\u52a1\u5668  \nuser admin password  \nbinary   # \u8bbe\u7f6eftp\u4f20\u8f93\u6a21\u5f0f\u4e3a\u4e8c\u8fdb\u5236\uff0c\u907f\u514dMD5\u503c\u4e0d\u540c\u6216.tar.gz\u538b\u7f29\u5305\u683c\u5f0f\u9519\u8bef  \ncd $dir  \nget &quot;$file&quot;  \nEOF  <\/code><\/pre>\n<h4>6\u3001\u8fde\u7eed\u8f93\u51655\u4e2a100\u4ee5\u5185\u7684\u6570\u5b57\uff0c\u7edf\u8ba1\u548c\u3001\u6700\u5c0f\u548c\u6700\u5927<\/h4>\n<pre><code>#!\/bin\/bash  \nCOUNT=1  \nSUM=0  \nMIN=0  \nMAX=100  \nwhile [ $COUNT -le 5 ]; do  \n    read -p &quot;\u8bf7\u8f93\u51651-10\u4e2a\u6574\u6570\uff1a&quot; INT      \n    if [[ ! $INT =~ ^[0-9]+$ ]]; then  \n        echo &quot;\u8f93\u5165\u5fc5\u987b\u662f\u6574\u6570\uff01&quot;  \n        exit 1  \n    elif [[ $INT -gt 100 ]]; then  \n        echo &quot;\u8f93\u5165\u5fc5\u987b\u662f100\u4ee5\u5185\uff01&quot;  \n        exit 1  \n    fi  \n    SUM=$(($SUM+$INT))  \n    [ $MIN -lt $INT ] &amp;&amp; MIN=$INT  \n    [ $MAX -gt $INT ] &amp;&amp; MAX=$INT  \n    let COUNT++  \n    done  \necho &quot;SUM: $SUM&quot;  \necho &quot;MIN: $MIN&quot;  \necho &quot;MAX: $MAX  <\/code><\/pre>\n<p>\u7528\u6237\u731c\u6570\u5b57<\/p>\n<pre><code>#!\/bin\/bash  # \u811a\u672c\u751f\u6210\u4e00\u4e2a 100 \u4ee5\u5185\u7684\u968f\u673a\u6570,\u63d0\u793a\u7528\u6237\u731c\u6570\u5b57,\u6839\u636e\u7528\u6237\u7684\u8f93\u5165,\u63d0\u793a\u7528\u6237\u731c\u5bf9\u4e86,  \n# \u731c\u5c0f\u4e86\u6216\u731c\u5927\u4e86,\u76f4\u81f3\u7528\u6237\u731c\u5bf9\u811a\u672c\u7ed3\u675f\u3002  \n# RANDOM \u4e3a\u7cfb\u7edf\u81ea\u5e26\u7684\u7cfb\u7edf\u53d8\u91cf,\u503c\u4e3a 0\u201032767\u7684\u968f\u673a\u6570  \n# \u4f7f\u7528\u53d6\u4f59\u7b97\u6cd5\u5c06\u968f\u673a\u6570\u53d8\u4e3a 1\u2010100 \u7684\u968f\u673a\u6570num=$[RANDOM%100+1]echo &quot;$num&quot;   \n# \u4f7f\u7528 read \u63d0\u793a\u7528\u6237\u731c\u6570\u5b57  \n# \u4f7f\u7528 if \u5224\u65ad\u7528\u6237\u731c\u6570\u5b57\u7684\u5927\u5c0f\u5173\u7cfb:\u2010eq(\u7b49\u4e8e),\u2010ne(\u4e0d\u7b49\u4e8e),\u2010gt(\u5927\u4e8e),\u2010ge(\u5927\u4e8e\u7b49\u4e8e),  \n# \u2010lt(\u5c0f\u4e8e),\u2010le(\u5c0f\u4e8e\u7b49\u4e8e)  \n  \nwhile :  \n  do       \n    read -p &quot;\u8ba1\u7b97\u673a\u751f\u6210\u4e86\u4e00\u4e2a 1\u2010100 \u7684\u968f\u673a\u6570,\u4f60\u731c: &quot; cai      \n    if [ $cai -eq $num ]      \n    then          \n        echo &quot;\u606d\u559c,\u731c\u5bf9\u4e86&quot;             \n        exit          \n    elif [ $cai -gt $num ]         \n    then              \n        echo &quot;Oops,\u731c\u5927\u4e86&quot;           \n    else              \n        echo &quot;Oops,\u731c\u5c0f\u4e86&quot;       \n    fi  \n  done  <\/code><\/pre>\n<h4>7\u3001\u76d1\u6d4b Nginx \u8bbf\u95ee\u65e5\u5fd7 502 \u60c5\u51b5\uff0c\u5e76\u505a\u76f8\u5e94\u52a8\u4f5c<\/h4>\n<p>\u5047\u8bbe\u670d\u52a1\u5668\u73af\u5883\u4e3a lnmp\uff0c\u8fd1\u671f\u8bbf\u95ee\u7ecf\u5e38\u51fa\u73b0 502 \u73b0\u8c61\uff0c\u4e14 502 \u9519\u8bef\u5728\u91cd\u542f php-fpm \u670d\u52a1\u540e\u6d88\u5931\uff0c\u56e0\u6b64\u9700\u8981\u7f16\u5199\u76d1\u63a7\u811a\u672c\uff0c\u4e00\u65e6\u51fa\u73b0 502\uff0c\u5219\u81ea\u52a8\u91cd\u542f php-fpm \u670d\u52a1\u3002<\/p>\n<pre><code>#\u573a\u666f\uff1a  \n#1.\u8bbf\u95ee\u65e5\u5fd7\u6587\u4ef6\u7684\u8def\u5f84\uff1a\/data\/log\/access.log  \n#2.\u811a\u672c\u6b7b\u5faa\u73af\uff0c\u6bcf10\u79d2\u68c0\u6d4b\u4e00\u6b21\uff0c10\u79d2\u7684\u65e5\u5fd7\u6761\u6570\u4e3a300\u6761\uff0c\u51fa\u73b0502\u7684\u6bd4\u4f8b\u4e0d\u4f4e\u4e8e10%\uff0830\u6761\uff09\u5219\u9700\u8981\u91cd\u542fphp-fpm\u670d\u52a1  \n#3.\u91cd\u542f\u547d\u4ee4\u4e3a\uff1a\/etc\/init.d\/php-fpm restart  \n#!\/bin\/bash  \n###########################################################  \n#\u76d1\u6d4bNginx\u8bbf\u95ee\u65e5\u5fd7502\u60c5\u51b5\uff0c\u5e76\u505a\u76f8\u5e94\u52a8\u4f5c  \n###########################################################  \nlog=\/data\/log\/access.log  \nN=30 #\u8bbe\u5b9a\u9608\u503c  \nwhile :do  \n #\u67e5\u770b\u8bbf\u95ee\u65e5\u5fd7\u7684\u6700\u65b0300\u6761\uff0c\u5e76\u7edf\u8ba1502\u7684\u6b21\u6570  \n    err=`tail -n 300 $log |grep -c '502&quot; '`   \nif [ $err -ge $N ]   \nthen  \n\/etc\/init.d\/php-fpm restart 2&gt; \/dev\/null   \n#\u8bbe\u5b9a60s\u5ef6\u8fdf\u9632\u6b62\u811a\u672cbug\u5bfc\u81f4\u65e0\u9650\u91cd\u542fphp-fpm\u670d\u52a1  \n     sleep 60  \n fi  \n sleep 10  \n done  <\/code><\/pre>\n<h4>8\u3001\u5c06\u7ed3\u679c\u5206\u522b\u8d4b\u503c\u7ed9\u53d8\u91cf<\/h4>\n<p>\u5e94\u7528\u573a\u666f\uff1a\u5e0c\u671b\u5c06\u6267\u884c\u7ed3\u679c\u6216\u8005\u4f4d\u7f6e\u53c2\u6570\u8d4b\u503c\u7ed9\u53d8\u91cf\uff0c\u4ee5\u4fbf\u540e\u7eed\u4f7f\u7528\u3002<\/p>\n<p>\u65b9\u6cd51\uff1a<\/p>\n<pre><code>for i in $(echo &quot;4 5 6&quot;); do  \n   eval a$i=$idone  \necho $a4 $a5 $a6  <\/code><\/pre>\n<p>\u65b9\u6cd52\uff1a\u5c06\u4f4d\u7f6e\u53c2\u6570<code>192.168.1.1{1,2}<\/code>\u62c6\u5206\u4e3a\u5230\u6bcf\u4e2a\u53d8\u91cf<\/p>\n<pre><code>num=0  \nfor i in $(eval echo $*);do   #eval\u5c06{1,2}\u5206\u89e3\u4e3a1 2  \n   let num+=1  \n   eval node${num}=&quot;$i&quot;  \ndone  \necho $node1 $node2 $node3  \n# bash a.sh 192.168.1.1{1,2}  \n192.168.1.11 192.168.1.12  \n  \n\u65b9\u6cd53\uff1aarr=(4 5 6)  \nINDEX1=$(echo ${arr[0]})  \nINDEX2=$(echo ${arr[1]})  \nINDEX3=$(echo ${arr[2]})  <\/code><\/pre>\n<h4>9\u3001\u6279\u91cf\u4fee\u6539\u6587\u4ef6\u540d<\/h4>\n<p>\u793a\u4f8b\uff1a<\/p>\n<pre><code># touch article_{1..3}.html  \n# lsarticle_1.html  article_2.html  article_3.html  \n\u76ee\u7684\uff1a\u628aarticle\u6539\u4e3abbs  <\/code><\/pre>\n<p>\u65b9\u6cd51\uff1a<\/p>\n<pre><code>for file in $(ls *html); do  \n    mv $file bbs_${file#*_}  \n    # mv $file $(echo $file |sed -r 's\/.*(_.*)\/bbs\/1\/')  \n    # mv $file $(echo $file |echo bbs_$(cut -d_ -f2)  <\/code><\/pre>\n<p>\u65b9\u6cd52\uff1a<\/p>\n<pre><code>for file in $(find . -maxdepth 1 -name &quot;*html&quot;); do  \n     mv $file bbs_${file#*_}done  <\/code><\/pre>\n<p>\u65b9\u6cd53\uff1a<\/p>\n<pre><code># rename article bbs *.html  \n\u628a\u4e00\u4e2a\u6587\u6863\u524d\u4e94\u884c\u4e2d\u5305\u542b\u5b57\u6bcd\u7684\u884c\u5220\u6389\uff0c\u540c\u65f6\u5220\u96646\u523010\u884c\u5305\u542b\u7684\u6240\u6709\u5b57\u6bcd  \n  \n1\uff09\u51c6\u5907\u6d4b\u8bd5\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u4e3a2.txt  \n  \n\u7b2c1\u884c1234567\u4e0d\u5305\u542b\u5b57\u6bcd  \n\u7b2c2\u884c56789BBBBBB  \n\u7b2c3\u884c67890CCCCCCCC  \n\u7b2c4\u884c78asdfDDDDDDDDD  \n\u7b2c5\u884c123456EEEEEEEE  \n\u7b2c6\u884c1234567ASDF  \n\u7b2c7\u884c56789ASDF  \n\u7b2c8\u884c67890ASDF  \n\u7b2c9\u884c78asdfADSF  \n\u7b2c10\u884c123456AAAA  \n\u7b2c11\u884c67890ASDF  \n\u7b2c12\u884c78asdfADSF  \n\u7b2c13\u884c123456AAAA  <\/code><\/pre>\n<p>2\uff09\u811a\u672c\u5982\u4e0b\uff1a<\/p>\n<pre><code>#!\/bin\/bash  \n###############################################################  \n\u628a\u4e00\u4e2a\u6587\u6863\u524d\u4e94\u884c\u4e2d\u5305\u542b\u5b57\u6bcd\u7684\u884c\u5220\u6389\uff0c\u540c\u65f6\u5220\u96646\u523010\u884c\u5305\u542b\u7684\u6240\u6709\u5b57\u6bcd  \n##############################################################  \nsed -n '1,5'p 2.txt |sed '\/[a-zA-Z]\/'d  \nsed -n '6,10'p 2.txt |sed s'\/[a-zA-Z]\/\/'g  \nsed -n '11,$'p 2.txt  \n#\u6700\u7ec8\u7ed3\u679c\u53ea\u662f\u5728\u5c4f\u5e55\u4e0a\u6253\u5370\u7ed3\u679c\uff0c\u5982\u679c\u60f3\u76f4\u63a5\u66f4\u6539\u6587\u4ef6\uff0c\u53ef\u5c06\u8f93\u51fa\u7ed3\u679c\u5199\u5165\u4e34\u65f6\u6587\u4ef6\u4e2d\uff0c\u518d\u66ff\u63622.txt\u6216\u8005\u4f7f\u7528-i\u9009\u9879  <\/code><\/pre>\n<h4>10\u3001\u7edf\u8ba1\u5f53\u524d\u76ee\u5f55\u4e2d\u4ee5.html\u7ed3\u5c3e\u7684\u6587\u4ef6\u603b\u5927<\/h4>\n<p>\u65b9\u6cd51\uff1a<\/p>\n<pre><code># find . -name &quot;*.html&quot; -exec du -k {} \/; |awk '{sum+=$1}END{print sum}'  \n  \n\u65b9\u6cd52\uff1a  <\/code><\/pre>\n<p>for size in $(ls -l *.html |awk &#8216;{print $5}&#8217;); do<\/p>\n<pre><code>sum=$(($sum+$size))  <\/code><\/pre>\n<p>done  <br \/>echo $sum<\/p>\n<pre><code>\n### 11\u3001\u626b\u63cf\u4e3b\u673a\u7aef\u53e3\u72b6\u6001\n<\/code><\/pre>\n<h2>!\/bin\/bash<\/h2>\n<p>HOST=$1  <br \/>PORT=&#8221;22 25 80 8080&#8243;  <br \/>for PORT in $PORT; do<\/p>\n<pre><code>if echo &amp;&gt;\/dev\/null &gt; \/dev\/tcp\/$HOST\/$PORT; then  \n    echo &quot;$PORT open&quot;  \nelse  \n    echo &quot;$PORT close&quot;  \nfi  <\/code><\/pre>\n<p>done  <br \/>\u7528 shell \u6253\u5370\u793a\u4f8b\u8bed\u53e5\u4e2d\u5b57\u6bcd\u6570\u5c0f\u4e8e6\u7684\u5355\u8bcd<\/p>\n<h2>\u793a\u4f8b\u8bed\u53e5\uff1a<\/h2>\n<h2>Bash also interprets a number of multi-character options.<\/h2>\n<h2>!\/bin\/bash<\/h2>\n<h2>shell\u6253\u5370\u793a\u4f8b\u8bed\u53e5\u4e2d\u5b57\u6bcd\u6570\u5c0f\u4e8e6\u7684\u5355\u8bcd<\/h2>\n<p>for s in Bash also interprets a number of multi-character options.  <br \/>do  <br \/> n=<code>echo $s|wc -c<\/code>   <br \/> if [ $n -lt 6 ]   <br \/> then  <br \/> echo $s  <br \/> fi  <br \/>done<\/p>\n<pre><code>\n### 12\u3001\u8f93\u5165\u6570\u5b57\u8fd0\u884c\u76f8\u5e94\u547d\u4ee4\n<\/code><\/pre>\n<h2>!\/bin\/bash<\/h2>\n<h2>\u8f93\u5165\u6570\u5b57\u8fd0\u884c\u76f8\u5e94\u547d\u4ee4<\/h2>\n<p>echo &#8220;<em>cmd menu<\/em> 1-date 2-ls 3-who 4-pwd 0-exit &#8221;  <br \/>while :  <br \/>do<\/p>\n<h2>\u6355\u83b7\u7528\u6237\u952e\u5165\u503c<\/h2>\n<p>read -p &#8220;please input number :&#8221; n  <br \/> n1=<code>echo $n|sed s'\/[0-9]\/\/'g<\/code><\/p>\n<h2>\u7a7a\u8f93\u5165\u68c0\u6d4b<\/h2>\n<p>if [ -z &#8220;$n&#8221; ]  <br \/> then  <br \/> continue  <br \/> fi<\/p>\n<h2>\u975e\u6570\u5b57\u8f93\u5165\u68c0\u6d4b<\/h2>\n<p>if [ -n &#8220;$n1&#8221; ]  <br \/> then  <br \/> exit 0  <br \/> fi  <br \/> break  <br \/>done  <br \/>case $n in  <br \/> 1)  <br \/> date  <br \/> ;;  <br \/> 2)  <br \/> ls  <br \/> ;;  <br \/> 3)  <br \/> who  <br \/> ;;  <br \/> 4)  <br \/> pwd  <br \/> ;;  <br \/> 0)  <br \/> break  <br \/> ;;<\/p>\n<pre><code>#\u8f93\u5165\u6570\u5b57\u975e1-4\u7684\u63d0\u793a  <\/code><\/pre>\n<p>*)  <br \/> echo &#8220;please input number is [1-4]&#8221;  <br \/>esac<\/p>\n<pre><code>\n### 13\u3001Expect \u5b9e\u73b0 SSH \u514d\u4ea4\u4e92\u6267\u884c\u547d\u4ee4\n\nExpect\u662f\u4e00\u4e2a\u81ea\u52a8\u4ea4\u4e92\u5f0f\u5e94\u7528\u7a0b\u5e8f\u7684\u5de5\u5177\uff0c\u5982telnet\uff0cftp\uff0cpasswd\u7b49\u3002\n\n\u9700\u5148\u5b89\u88c5expect\u8f6f\u4ef6\u5305\u3002\n\n\u65b9\u6cd51\uff1aEOF\u6807\u51c6\u8f93\u51fa\u4f5c\u4e3aexpect\u6807\u51c6\u8f93\u5165\n<\/code><\/pre>\n<h2>!\/bin\/bash<\/h2>\n<p>USER=root  <br \/>PASS=123.com  <br \/>IP=192.168.1.120  <br \/>expect &lt;&lt; EOFset timeout 30spawn ssh $USER@$IP   expect {    &#8220;(yes\/no)&#8221; {send &#8220;yes\/r&#8221;; exp_continue}    &#8220;password:&#8221; {send &#8220;$PASS\/r&#8221;}  <br \/>}  <br \/>expect &#8220;$USER@*&quot;  {send &quot;$1\/r&#8221;}  <br \/>expect &#8220;$USER@*&#8221;  {send &#8220;exit\/r&#8221;}  <br \/>expect eof  <br \/>EOF<\/p>\n<pre><code>\n\u65b9\u6cd52\uff1a\n<\/code><\/pre>\n<h2>!\/bin\/bash<\/h2>\n<p>USER=root  <br \/>PASS=123.com  <br \/>IP=192.168.1.120  <br \/>expect -c &#8220;<\/p>\n<pre><code>spawn ssh $USER@$IP  \nexpect {  \n    \/&quot;(yes\/no)\/&quot; {send \/&quot;yes\/r\/&quot;; exp_continue}  \n    \/&quot;password:\/&quot; {send \/&quot;$PASS\/r\/&quot;; exp_continue}  \n    \/&quot;$USER@*\/&quot; {send \/&quot;df -h\/r exit\/r\/&quot;; exp_continue}  \n}&quot;  <\/code><\/pre>\n<pre><code>\n\u65b9\u6cd53\uff1a\u5c06expect\u811a\u672c\u72ec\u7acb\u51fa\u6765\n<\/code><\/pre>\n<p>\u767b\u5f55\u811a\u672c\uff1a<\/p>\n<h2>cat login.exp<\/h2>\n<h2>!\/usr\/bin\/expect<\/h2>\n<p>set ip [lindex $argv 0]  <br \/>set user [lindex $argv 1]  <br \/>set passwd [lindex $argv 2]  <br \/>set cmd [lindex $argv 3]  <br \/>if { $argc != 4 } {  <br \/>puts &#8220;Usage: expect login.exp ip user passwd&#8221;  <br \/>exit 1  <br \/>}  <br \/>set timeout 30  <br \/>spawn ssh $user@$ip  <br \/>expect {<\/p>\n<pre><code>&quot;(yes\/no)&quot; {send &quot;yes\/r&quot;; exp_continue}  \n&quot;password:&quot; {send &quot;$passwd\/r&quot;}  <\/code><\/pre>\n<p>}  <br \/>expect &#8220;$user@*&quot;  {send &quot;$cmd\/r&#8221;}  <br \/>expect &#8220;$user@*&#8221;  {send &#8220;exit\/r&#8221;}  <br \/>expect eof<\/p>\n<pre><code>\n\u6267\u884c\u547d\u4ee4\u811a\u672c\uff1a\u5199\u4e2a\u5faa\u73af\u53ef\u4ee5\u6279\u91cf\u64cd\u4f5c\u591a\u53f0\u670d\u52a1\u5668\n<\/code><\/pre>\n<h2>!\/bin\/bash<\/h2>\n<p>HOST_INFO=user_info.txt  <br \/>for ip in $(awk &#8216;{print $1}&#8217; $HOST_INFO)  <br \/>do<\/p>\n<pre><code>user=$(awk -v I=&quot;$ip&quot; 'I==$1{print $2}' $HOST_INFO)  \npass=$(awk -v I=&quot;$ip&quot; 'I==$1{print $3}' $HOST_INFO)  \nexpect login.exp $ip $user $pass $1  <\/code><\/pre>\n<p>done  <br \/>Linux\u4e3b\u673aSSH\u8fde\u63a5\u4fe1\u606f\uff1a<\/p>\n<h2>cat user_info.txt<\/h2>\n<p>192.168.1.120 root 123456  <br \/>\u521b\u5efa10\u4e2a\u7528\u6237\uff0c\u5e76\u5206\u522b\u8bbe\u7f6e\u5bc6\u7801\uff0c\u5bc6\u7801\u8981\u6c4210\u4f4d\u4e14\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u4ee5\u53ca\u6570\u5b57\uff0c\u6700\u540e\u9700\u8981\u628a\u6bcf\u4e2a\u7528\u6237\u7684\u5bc6\u7801\u5b58\u5728\u6307\u5b9a\u6587\u4ef6\u4e2d<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  \n##############################################################  \n#\u521b\u5efa10\u4e2a\u7528\u6237\uff0c\u5e76\u5206\u522b\u8bbe\u7f6e\u5bc6\u7801\uff0c\u5bc6\u7801\u8981\u6c4210\u4f4d\u4e14\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u4ee5\u53ca\u6570\u5b57  \n#\u6700\u540e\u9700\u8981\u628a\u6bcf\u4e2a\u7528\u6237\u7684\u5bc6\u7801\u5b58\u5728\u6307\u5b9a\u6587\u4ef6\u4e2d#\u524d\u63d0\u6761\u4ef6\uff1a\u5b89\u88c5mkpasswd\u547d\u4ee4  \n##############################################################  \n#\u751f\u621010\u4e2a\u7528\u6237\u7684\u5e8f\u5217\uff0800-09\uff09  \nfor u in `seq -w 0 09`do  \n #\u521b\u5efa\u7528\u6237  \n useradd user_$u  \n #\u751f\u6210\u5bc6\u7801  \n p=`mkpasswd -s 0 -l 10`   \n #\u4ece\u6807\u51c6\u8f93\u5165\u4e2d\u8bfb\u53d6\u5bc6\u7801\u8fdb\u884c\u4fee\u6539\uff08\u4e0d\u5b89\u5168\uff09  \n echo $p|passwd --stdin user_$u  \n #\u5e38\u89c4\u4fee\u6539\u5bc6\u7801  \n echo -e &quot;$p\/n$p&quot;|passwd user_$u  \n #\u5c06\u521b\u5efa\u7684\u7528\u6237\u53ca\u5bf9\u5e94\u7684\u5bc6\u7801\u8bb0\u5f55\u5230\u65e5\u5fd7\u6587\u4ef6\u4e2d  \n echo &quot;user_$u $p&quot; &gt;&gt; \/tmp\/userpassworddone  <\/code><\/pre>\n<h4>14\u3001\u76d1\u63a7 httpd \u7684\u8fdb\u7a0b\u6570\uff0c\u6839\u636e\u76d1\u63a7\u60c5\u51b5\u505a\u76f8\u5e94\u5904\u7406<\/h4>\n<pre><code>#!\/bin\/bash  \n###############################################################################################################################  \n#\u9700\u6c42\uff1a  \n#1.\u6bcf\u969410s\u76d1\u63a7httpd\u7684\u8fdb\u7a0b\u6570\uff0c\u82e5\u8fdb\u7a0b\u6570\u5927\u4e8e\u7b49\u4e8e500\uff0c\u5219\u81ea\u52a8\u91cd\u542fApache\u670d\u52a1\uff0c\u5e76\u68c0\u6d4b\u670d\u52a1\u662f\u5426\u91cd\u542f\u6210\u529f  \n#2.\u82e5\u672a\u6210\u529f\u5219\u9700\u8981\u518d\u6b21\u542f\u52a8\uff0c\u82e5\u91cd\u542f5\u6b21\u4f9d\u65e7\u6ca1\u6709\u6210\u529f\uff0c\u5219\u5411\u7ba1\u7406\u5458\u53d1\u9001\u544a\u8b66\u90ae\u4ef6\uff0c\u5e76\u9000\u51fa\u68c0\u6d4b  \n#3.\u5982\u679c\u542f\u52a8\u6210\u529f\uff0c\u5219\u7b49\u5f851\u5206\u949f\u540e\u518d\u6b21\u68c0\u6d4bhttpd\u8fdb\u7a0b\u6570\uff0c\u82e5\u8fdb\u7a0b\u6570\u6b63\u5e38\uff0c\u5219\u6062\u590d\u6b63\u5e38\u68c0\u6d4b\uff0810s\u4e00\u6b21\uff09\uff0c\u5426\u5219\u653e\u5f03\u91cd\u542f\u5e76\u5411\u7ba1\u7406\u5458\u53d1\u9001\u544a\u8b66\u90ae\u4ef6\uff0c\u5e76\u9000\u51fa\u68c0\u6d4b  \n###############################################################################################################################  \n#\u8ba1\u6570\u5668\u51fd\u6570  \ncheck_service()  \n{  \n j=0  \n for i in `seq 1 5`   \n do  \n #\u91cd\u542fApache\u7684\u547d\u4ee4  \n \/usr\/local\/apache2\/bin\/apachectl restart 2&gt; \/var\/log\/httpderr.log      \n    #\u5224\u65ad\u670d\u52a1\u662f\u5426\u91cd\u542f\u6210\u529f  \n if [ $? -eq 0 ] then  \n break  \n else  \n j=$[$j+1] fi  \n    #\u5224\u65ad\u670d\u52a1\u662f\u5426\u5df2\u5c1d\u8bd5\u91cd\u542f5\u6b21  \n if [ $j -eq 5 ] then  \n mail.py exit  \n fi  \n done }while :do  \n n=`pgrep -l httpd|wc -l`   \n #\u5224\u65adhttpd\u670d\u52a1\u8fdb\u7a0b\u6570\u662f\u5426\u8d85\u8fc7500  \n if [ $n -gt 500 ] then  \n \/usr\/local\/apache2\/bin\/apachectl restart   \n if [ $? -ne 0 ]   \n then  \n check_service   \n else  \n sleep 60  \n n2=`pgrep -l httpd|wc -l`   \n #\u5224\u65ad\u91cd\u542f\u540e\u662f\u5426\u4f9d\u65e7\u8d85\u8fc7500  \n             if [ $n2 -gt 500 ]   \n then   \n mail.py exit  \n fi  \n fi  \n fi  \n #\u6bcf\u969410s\u68c0\u6d4b\u4e00\u6b21  \n sleep 10done  <\/code><\/pre>\n<h4>15\u3001\u6279\u91cf\u4fee\u6539\u670d\u52a1\u5668\u7528\u6237\u5bc6\u7801<\/h4>\n<p>Linux\u4e3b\u673aSSH\u8fde\u63a5\u4fe1\u606f\uff1a\u65e7\u5bc6\u7801<\/p>\n<pre><code># cat old_pass.txt   \n192.168.18.217  root    123456     22  \n192.168.18.218  root    123456     22  \n\u5185\u5bb9\u683c\u5f0f\uff1aIP User Password Port  \n  \nSSH\u8fdc\u7a0b\u4fee\u6539\u5bc6\u7801\u811a\u672c\uff1a\u65b0\u5bc6\u7801\u968f\u673a\u751f\u6210  \nhttps:\/\/www.linuxprobe.com\/books  \n#!\/bin\/bash  \nOLD_INFO=old_pass.txt  \nNEW_INFO=new_pass.txt  \nfor IP in $(awk '\/^[^#]\/{print $1}' $OLD_INFO); do  \n    USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)  \n    PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)  \n    PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)  \n    NEW_PASS=$(mkpasswd -l 8)  # \u968f\u673a\u5bc6\u7801  \n    echo &quot;$IP   $USER   $NEW_PASS   $PORT&quot; &gt;&gt; $NEW_INFO  \n    expect -c &quot;  \n    spawn ssh -p$PORT $USER@$IP  \n    set timeout 2  \n    expect {  \n        \/&quot;(yes\/no)\/&quot; {send \/&quot;yes\/r\/&quot;;exp_continue}  \n        \/&quot;password:\/&quot; {send \/&quot;$PASS\/r\/&quot;;exp_continue}  \n        \/&quot;$USER@*\/&quot; {send \/&quot;echo \/'$NEW_PASS\/' |passwd --stdin $USER\/r exit\/r\/&quot;;exp_continue}  \n    }&quot;  \ndone  \n\u751f\u6210\u65b0\u5bc6\u7801\u6587\u4ef6\uff1a  \n  \n# cat new_pass.txt   \n192.168.18.217  root    n8wX3mU%      22  \n192.168.18.218  root    c87;ZnnL      22  <\/code><\/pre>\n<h4>16\u3001iptables \u81ea\u52a8\u5c4f\u853d\u8bbf\u95ee\u7f51\u7ad9\u9891\u7e41\u7684IP<\/h4>\n<p>\u573a\u666f\uff1a\u6076\u610f\u8bbf\u95ee,\u5b89\u5168\u9632\u8303<\/p>\n<p>1\uff09\u5c4f\u853d\u6bcf\u5206\u949f\u8bbf\u95ee\u8d85\u8fc7200\u7684IP<\/p>\n<p>\u65b9\u6cd51\uff1a\u6839\u636e\u8bbf\u95ee\u65e5\u5fd7\uff08Nginx\u4e3a\u4f8b\uff09<\/p>\n<pre><code>#!\/bin\/bash  \nDATE=$(date +%d\/%b\/%Y:%H:%M)  \nABNORMAL_IP=$(tail -n5000 access.log |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]&gt;100)print i}')  \n#\u5148tail\u9632\u6b62\u6587\u4ef6\u8fc7\u5927\uff0c\u8bfb\u53d6\u6162\uff0c\u6570\u5b57\u53ef\u8c03\u6574\u6bcf\u5206\u949f\u6700\u5927\u7684\u8bbf\u95ee\u91cf\u3002awk\u4e0d\u80fd\u76f4\u63a5\u8fc7\u6ee4\u65e5\u5fd7\uff0c\u56e0\u4e3a\u5305\u542b\u7279\u6b8a\u5b57\u7b26\u3002  \nfor IP in $ABNORMAL_IP; do  \n    if [ $(iptables -vnL |grep -c &quot;$IP&quot;) -eq 0 ]; then  \n        iptables -I INPUT -s $IP -j DROP    fidone  <\/code><\/pre>\n<p>\u65b9\u6cd52\uff1a\u901a\u8fc7TCP\u5efa\u7acb\u7684\u8fde\u63a5<\/p>\n<pre><code>#!\/bin\/bash  \nABNORMAL_IP=$(netstat -an |awk '$4~\/:80$\/ &amp;&amp; $6~\/ESTABLISHED\/{gsub(\/:[0-9]+\/,&quot;&quot;,$5);{a[$5]++}}END{for(i in a)if(a[i]&gt;100)print i}')  \n#gsub\u662f\u5c06\u7b2c\u4e94\u5217\uff08\u5ba2\u6237\u7aefIP\uff09\u7684\u5192\u53f7\u548c\u7aef\u53e3\u53bb\u6389  \nfor IP in $ABNORMAL_IP; do  \n    if [ $(iptables -vnL |grep -c &quot;$IP&quot;) -eq 0 ]; then  \n        iptables -I INPUT -s $IP -j DROP      \n        fi  \ndone  <\/code><\/pre>\n<p>2\uff09\u5c4f\u853d\u6bcf\u5206\u949fSSH\u5c1d\u8bd5\u767b\u5f55\u8d85\u8fc710\u6b21\u7684IP<\/p>\n<p>\u65b9\u6cd51\uff1a\u901a\u8fc7lastb\u83b7\u53d6\u767b\u5f55\u72b6\u6001:<\/p>\n<pre><code>#!\/bin\/bash  \nDATE=$(date +&quot;%a %b %e %H:%M&quot;) #\u661f\u671f\u6708\u5929\u65f6\u5206  %e\u5355\u6570\u5b57\u65f6\u663e\u793a7\uff0c\u800c%d\u663e\u793a07  \nABNORMAL_IP=$(lastb |grep &quot;$DATE&quot; |awk '{a[$3]++}END{for(i in a)if(a[i]&gt;10)print i}')for IP in $ABNORMAL_IP; do  \n    if [ $(iptables -vnL |grep -c &quot;$IP&quot;) -eq 0 ]; then  \n        iptables -I INPUT -s $IP -j DROP    fidone  <\/code><\/pre>\n<p>\u65b9\u6cd52\uff1a\u901a\u8fc7\u65e5\u5fd7\u83b7\u53d6\u767b\u5f55\u72b6\u6001<\/p>\n<pre><code>#!\/bin\/bash  \nDATE=$(date +&quot;%b %d %H&quot;)  \nABNORMAL_IP=&quot;$(tail -n10000 \/var\/log\/auth.log |grep &quot;$DATE&quot; |awk '\/Failed\/{a[$(NF-3)]++}END{for(i in a)if(a[i]&gt;5)print i}')&quot;  \nfor IP in $ABNORMAL_IP; do  \n    if [ $(iptables -vnL |grep -c &quot;$IP&quot;) -eq 0 ]; then  \n        iptables -A INPUT -s $IP -j DROP          \n        echo &quot;$(date +&quot;%F %T&quot;) - iptables -A INPUT -s $IP -j DROP&quot; &gt;&gt;~\/ssh-login-limit.log      \n    fi  \ndone  <\/code><\/pre>\n<h4>17\u3001\u6839\u636eweb\u8bbf\u95ee\u65e5\u5fd7\uff0c\u5c01\u7981\u8bf7\u6c42\u91cf\u5f02\u5e38\u7684IP\uff0c\u5982IP\u5728\u534a\u5c0f\u65f6\u540e\u6062\u590d\u6b63\u5e38\uff0c\u5219\u89e3\u9664\u5c01\u7981<\/h4>\n<pre><code>#!\/bin\/bash  \n####################################################################################  \n#\u6839\u636eweb\u8bbf\u95ee\u65e5\u5fd7\uff0c\u5c01\u7981\u8bf7\u6c42\u91cf\u5f02\u5e38\u7684IP\uff0c\u5982IP\u5728\u534a\u5c0f\u65f6\u540e\u6062\u590d\u6b63\u5e38\uff0c\u5219\u89e3\u9664\u5c01\u7981  \n####################################################################################  \nlogfile=\/data\/log\/access.log  \n#\u663e\u793a\u4e00\u5206\u949f\u524d\u7684\u5c0f\u65f6\u548c\u5206\u949f  \nd1=`date -d &quot;-1 minute&quot; +%H%M`  \nd2=`date +%M`  \nipt=\/sbin\/iptables  \nips=\/tmp\/ips.txt  \nblock()  \n{   \n#\u5c06\u4e00\u5206\u949f\u524d\u7684\u65e5\u5fd7\u5168\u90e8\u8fc7\u6ee4\u51fa\u6765\u5e76\u63d0\u53d6IP\u4ee5\u53ca\u7edf\u8ba1\u8bbf\u95ee\u6b21\u6570  \n grep '$d1:' $logfile|awk '{print $1}'|sort -n|uniq -c|sort -n &gt; $ips  \n #\u5229\u7528for\u5faa\u73af\u5c06\u6b21\u6570\u8d85\u8fc7100\u7684IP\u4f9d\u6b21\u904d\u5386\u51fa\u6765\u5e76\u4e88\u4ee5\u5c01\u7981  \n for i in `awk '$1&gt;100 {print $2}' $ips`   \n do  \n $ipt -I INPUT -p tcp --dport 80 -s $i -j REJECT   \n echo &quot;`date +%F-%T` $i&quot; &gt;&gt; \/tmp\/badip.log   \n done  \n}  \nunblock()  \n{   \n#\u5c06\u5c01\u7981\u540e\u6240\u4ea7\u751f\u7684pkts\u6570\u91cf\u5c0f\u4e8e10\u7684IP\u4f9d\u6b21\u904d\u5386\u4e88\u4ee5\u89e3\u5c01  \n for a in `$ipt -nvL INPUT --line-numbers |grep '0.0.0.0\/0'|awk '$2&lt;10 {print $1}'|sort -nr`   \n do   \n $ipt -D INPUT $a  \n done  \n $ipt -Z  \n}  \n#\u5f53\u65f6\u95f4\u572800\u5206\u4ee5\u53ca30\u5206\u65f6\u6267\u884c\u89e3\u5c01\u51fd\u6570  \nif [ $d2 -eq &quot;00&quot; ] || [ $d2 -eq &quot;30&quot; ]   \n then  \n #\u8981\u5148\u89e3\u518d\u5c01\uff0c\u56e0\u4e3a\u521a\u521a\u5c01\u7981\u65f6\u4ea7\u751f\u7684pkts\u6570\u91cf\u5f88\u5c11  \n unblock  \n block   \n else  \n block  \nfi  <\/code><\/pre>\n<h4>18\u3001\u5224\u65ad\u7528\u6237\u8f93\u5165\u7684\u662f\u5426\u4e3aIP\u5730\u5740<\/h4>\n<p>\u65b9\u6cd51:<\/p>\n<pre><code>#!\/bin\/bash  \nfunction check_ip(){  \n    IP=$1  \n    VALID_CHECK=$(echo $IP|awk -F. '$1&lt; =255&amp;&amp;$2&lt;=255&amp;&amp;$3&lt;=255&amp;&amp;$4&lt;=255{print &quot;yes&quot;}')  \n    if echo $IP|grep -E &quot;^[0-9]{1,3}\/.[0-9]{1,3}\/.[0-9]{1,3}\/.[0-9]{1,3}$&quot;&gt;\/dev\/null; then  \n        if [ $VALID_CHECK == &quot;yes&quot; ]; then  \n            echo &quot;$IP available.&quot;  \n        else  \n            echo &quot;$IP not available!&quot;  \n        fi  \n    else  \n        echo &quot;Format error!&quot;  \n    fi  \n}  \ncheck_ip 192.168.1.1  \ncheck_ip 256.1.1.1  <\/code><\/pre>\n<p>\u65b9\u6cd52\uff1a<\/p>\n<pre><code>#!\/bin\/bash  \nfunction check_ip(){  \n    IP=$1  \n    if [[ $IP =~ ^[0-9]{1,3}\/.[0-9]{1,3}\/.[0-9]{1,3}\/.[0-9]{1,3}$ ]]; then  \n        FIELD1=$(echo $IP|cut -d. -f1)  \n        FIELD2=$(echo $IP|cut -d. -f2)  \n        FIELD3=$(echo $IP|cut -d. -f3)  \n        FIELD4=$(echo $IP|cut -d. -f4)  \n        if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; then  \n            echo &quot;$IP available.&quot;  \n        else  \n            echo &quot;$IP not available!&quot;  \n        fi  \n    else  \n        echo &quot;Format error!&quot;  \n    fi  \n}  \ncheck_ip 192.168.1.1  \ncheck_ip 256.1.1.1  <\/code><\/pre>\n<p>\u589e\u52a0\u7248\uff1a<\/p>\n<p>\u52a0\u4e2a\u6b7b\u5faa\u73af\uff0c\u5982\u679cIP\u53ef\u7528\u5c31\u9000\u51fa\uff0c\u4e0d\u53ef\u7528\u63d0\u793a\u7ee7\u7eed\u8f93\u5165\uff0c\u5e76\u4f7f\u7528awk\u5224\u65ad\u3002<\/p>\n<pre><code>#!\/bin\/bash  \nfunction check_ip(){  \n    local IP=$1  \n    VALID_CHECK=$(echo $IP|awk -F. '$1&lt; =255&amp;&amp;$2&lt;=255&amp;&amp;$3&lt;=255&amp;&amp;$4&lt;=255{print &quot;yes&quot;}')  \n    if echo $IP|grep -E &quot;^[0-9]{1,3}\/.[0-9]{1,3}\/.[0-9]{1,3}\/.[0-9]{1,3}$&quot; &gt;\/dev\/null; then  \n        if [ $VALID_CHECK == &quot;yes&quot; ]; then  \n            return 0  \n        else  \n            echo &quot;$IP not available!&quot;  \n            return 1  \n        fi  \n    else  \n        echo &quot;Format error! Please input again.&quot;  \n        return 1  \n    fi  \n}  \nwhile true; do  \n    read -p &quot;Please enter IP: &quot; IP  \n    check_ip $IP  \n    [ $? -eq 0 ] &amp;&amp; break || continue  \ndone  \n<\/code><\/pre>\n<p><strong>\u8fd1\u671f\u70ed\u6587\u63a8\u8350\uff1a<\/strong><\/p>\n<p>1.<a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=LnAGVewPhPPgGdar8tTdxw%3D%3D.dFTsX5eNtlSxPXAdWsgLlP1%2FB9a%2BIxlsdaM%2BEeIbJng%3D\" rel=\"noopener noreferrer\">1,000+ \u9053 Java\u9762\u8bd5\u9898\u53ca\u7b54\u6848\u6574\u7406(2022\u6700\u65b0\u7248)<\/a><\/p>\n<p>2.<a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=9DXEGNJDj4Y%2Fm%2B%2FBO3KrQA%3D%3D.RhFqRgCvj7d6asDLR9IAQT0xuIDo%2Bybxaa%2BEgbSpnfCkA72kc13eJv%2BsiXUgDQrif6xRVJ17wkETvSpOZDUEug%3D%3D\" rel=\"noopener noreferrer\">\u52b2\u7206\uff01Java \u534f\u7a0b\u8981\u6765\u4e86\u3002\u3002\u3002<\/a><\/p>\n<p>3.<a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=ueLaXzybJrUhNJ0Gf%2B5InQ%3D%3D.1Xsq8igxSFYCK9EnlXG0LcXUxBXqva%2Bjj0mZFX5Kj5mMRBOWw3fyNOcG15LLytnV\" rel=\"noopener noreferrer\">Spring Boot 2.x \u6559\u7a0b\uff0c\u592a\u5168\u4e86\uff01<\/a><\/p>\n<p>4.<a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=acGDusHhYWfx%2F50oSIbZwg%3D%3D.vr6K4LQFgQwOIfq0lbmja7%2FgxB0%2FlGj%2BbKwR4pOlbg44E%2F2E5KKTKYK8wTKqQbqaFx%2BczBGfNSy%2BZXEnekgjsA%3D%3D\" rel=\"noopener noreferrer\">\u522b\u518d\u5199\u6ee1\u5c4f\u7684\u7206\u7206\u7206\u70b8\u7c7b\u4e86\uff0c\u8bd5\u8bd5\u88c5\u9970\u5668\u6a21\u5f0f\uff0c\u8fd9\u624d\u662f\u4f18\u96c5\u7684\u65b9\u5f0f\uff01\uff01<\/a><\/p>\n<p>5.<a target=\"_blank\" href=\"https:\/\/link.segmentfault.com\/?enc=5nT2o26cj4O3nm2xID23yQ%3D%3D.%2BzJs9cloiFBgN0A1nafHkjmmEEKx4tKma44%2BsutSUcCy7BPCIMgBsg3KvyR94ZAchtNawDZFMkPnZOwGXdpmWE9qOPSe1LQLxFVJOMkXETs%3D\" rel=\"noopener noreferrer\">\u300aJava\u5f00\u53d1\u624b\u518c\uff08\u5d69\u5c71\u7248\uff09\u300b\u6700\u65b0\u53d1\u5e03\uff0c\u901f\u901f\u4e0b\u8f7d\uff01<\/a><\/p>\n<p>\u89c9\u5f97\u4e0d\u9519\uff0c\u522b\u5fd8\u4e86\u968f\u624b\u70b9\u8d5e+\u8f6c\u53d1\u54e6\uff01<\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000044167419\">https:\/\/segmentfault.com\/a\/1190000044167419<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6765\u6e90\uff1a\u8fdb\u51fb\u4e91\u539f\u751f 1\u3001\u68c0\u6d4b\u4e24\u53f0\u670d\u52a1\u5668\u6307\u5b9a\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u4e00\u81f4\u6027 #!\/bin\/bash ############# [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10008198","post","type-post","status-publish","format-standard","hentry","category-share"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10008198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10008198"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10008198\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10008198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10008198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10008198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}