真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux中Shell有哪些使用示例

小編給大家分享一下linux中Shell有哪些使用示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、靈壽網(wǎng)站維護(hù)、網(wǎng)站推廣。

Shell腳本是幫助程序員和系統(tǒng)管理員完成費(fèi)時(shí)費(fèi)力的枯燥工作的利器,是與計(jì)算機(jī)交互并管理文件和系統(tǒng)操作的有效方式。區(qū)區(qū)幾行代碼,就可以讓計(jì)算機(jī)接近按照你的意圖行事。

檢測兩臺> /tmp/userpassword done

監(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=0  for i in `seq 1 5`   do  #重啟Apache的命令  /usr/local/apache2/bin/apachectl restart 2> /var/log/httpderr.log     #判斷服務(wù)是否重啟成功  if [ $? -eq 0 ]  then  break  else  j=$[$j+1]  fi     #判斷服務(wù)是否已嘗試重啟5次  if [ $j -eq 5 ]  then  mail.py  exit  fi  done  } while : do  n=`pgrep -l httpd|wc -l`  #判斷httpd服務(wù)進(jìn)程數(shù)是否超過500  if [ $n -gt 500 ]  then  /usr/local/apache2/bin/apachectl restart  if [ $? -ne 0 ]  then  check_service  else  sleep 60  n2=`pgrep -l httpd|wc -l`  #判斷重啟后是否依舊超過500              if [ $n2 -gt 500 ]  then   mail.py  exit  fi  fi  fi  #每隔10s檢測一次  sleep 10 done

批量修改服務(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); 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)  # 隨機(jī)密碼     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

生成新密碼文件:

192.168.18.217  root    n8wX3mU%      22 192.168.18.218  root    c87;ZnnL      22

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)榘厥庾址?nbsp;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:通過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; do     if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then         iptables -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") #星期月天時(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:通過日志獲取登錄狀態(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

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

#!/bin/bash #################################################################################### #根據(jù)web訪問日志,封禁請求量異常的IP,如IP在半小時(shí)后恢復(fù)正常,則解除封禁 #################################################################################### logfile=/data/log/access.log #顯示一分鐘前的小時(shí)和分鐘 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 $a  done  $ipt -Z } #當(dāng)時(shí)間在00分以及30分時(shí)執(zhí)行解封函數(shù) if [ $d2 -eq "00" ] || [ $d2 -eq "30" ]  then  #要先解再封,因?yàn)閯倓偡饨麜r(shí)產(chǎn)生的pkts數(shù)量很少  unblock  block  else  block fi

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

方法1:

#!/bin/bash function check_ip(){     IP=$1     VALID_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; then         if [ $VALID_CHECK == "yes" ]; then             echo "$IP available."         else             echo "$IP not available!"         fi     else         echo "Format error!"     fi } check_ip 192.168.1.1 check_ip 256.1.1.1

方法2:

#!/bin/bash function check_ip(){     IP=$1     if [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then         FIELD1=$(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 ]; then             echo "$IP available."         else             echo "$IP not available!"         fi     else         echo "Format error!"     fi } check_ip 192.168.1.1 check_ip 256.1.1.1

增加版:

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

#!/bin/bash function check_ip(){     local IP=$1     VALID_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; then         if [ $VALID_CHECK == "yes" ]; then             return 0         else             echo "$IP not available!"             return 1         fi     else         echo "Format error! Please input again."         return 1     fi } while true; do     read -p "Please enter IP: " IP     check_ip $IP     [ $? -eq 0 ] && break || continue done

以上是“l(fā)inux中Shell有哪些使用示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享標(biāo)題:linux中Shell有哪些使用示例
本文地址:
http://weahome.cn/article/gcegeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部