Shell練習(61-65)-2019.1.18

61.找文件差異

要點:

   grep -f filename1 filename2     ####grep -f  將filename1中的行逐個匹配filename2的行

需求:

  • 有兩個文件a.txt和b.txt,需求是把a.txt中有的但b中沒有的行找出來,並寫入到c.txt,然後計算c.txt文件的行數。

核心要點:

  • 可以使用while循環遍歷a.txt,逐行進行匹配,如果這一行在b.txt中沒有,就直接重定向到c.txt即可
[root@Chauncey ~]# cat 61.sh
#!/bin/bash
#這個腳本用來比較文件差異
#作者:Chauncey
#日期:2019-01-18


cat a.txt|while read line
do 
    if ! grep -q "$line" b.txt
    then
        echo $line
    fi
done > c.txt
w -l c.txt
[root@Chauncey ~]# 

62.殺進程

需求:

  • 把當前用戶下所有進程名字中含有“aming”的進程關閉。

核心要點:

  • ps -u $USER
  • echo $USER可查看當前用戶,$USER等於當前用戶
[root@Chauncey ~]# cat 62.sh
#!/bin/bash
#這個腳本用來殺掉指定進程
#作者:Chauncey
#日期:2019-01-18


ps -u $USE|awk '$NF' ~ /aming/ '{print $1}' | xargs kill

63.併發備份數據庫

要點:

   要做到shell併發,可以將其放到後臺運行,再執行其他命令,而併發數多少取決於服務器的性能,

需求:

  • 用shell實現,以併發進程的形式將mysql數據庫所有的表被分到當前目錄,並把所有的表壓縮到一個壓縮包文件裏
  • 假設數據庫的名字爲mydb,用戶名爲aming,密碼爲passwd

核心要點:

  • 在shell中加上&可以丟到後臺,從而可以同時執行多條命令達到併發的效果
  • 如果表數量很大,全部都丟臺後取,服務器資源恐怕支持不了,所以需要控制併發數
  • 備份表的命令是mysqldump -uaming -ppasswd mydb tbname > tbname.sql
[root@Chauncey ~]# cat 63.sh
#!/bin/bash
#這個腳本用來併發備份數據庫
#作者:Chauncey
#日期:2019-01-18

N=5      ###限定併發數,設備能承受的併發數是有限的

mysql -uaming -ppasswd mydb -e "show tables"| sed '1d' > /tmp/table.txt
n=`wc -l /tmp/table.txt | awk '{print $1}'`

div()                              ####求平均值
{
    n=`echo "scale=1;$1/$2"|bc`
    n1=`echo "scale=1;$n+0.5"|bc`
    echo $n1| cut -d.  -f1
}

n1=`div $n $N`

split -l $n1 /tmp/table.txt     ####切割文件

myd()
{
    for t in `cat $1`
    do
        mysqldump -uaming -ppasswd mydb $t > $t.sql
    done
}

for f in xaa xab xac xad xae
do
    myd $f &
done 
 
wait
tar czf mydb.tar.gz *.sql
rm -f *.sql
[root@Chauncey ~]# 

64.監控CDN節點

需求:

  • 一個網站使用了cdn,全國有幾十個節點,需要一個腳本來監控各個節點是否正常
  • 監控的url爲www.aming.com/index.php
  • 源站ip爲88.88.88.88

核心要點:

  • 某個節點正常,那訪問到的內容應該和源上的一致
  • 比較兩個文件內容是否有差異的命令爲diff,如diff 1.txt 2.txt,如果結果爲空,說明兩個文件不存在差異
  • 幾十個節點,需要把所有節點的IP全部拿到,然後對所有的IP進行遍歷
[root@bogon ~]# cat 64.sh
#!/bin/bash
#這個腳本用來監控CDN節點
#作者:Chauncey
#日期:2019-01-18

s_ip=88.88.88.88          ####網站服務器IP
url=www.aminglinux.com/index.php
ipf=/data/ip.list        ######各節點的服務器ip

curl -x$s_ip:80 $url 2>/dev/null >/tmp/source.txt               ########-x/--proxy <proxyhost[:port]> 指定代理服務器地址和端口,端口默認爲1080
for ip in `cat $ipf`
do
    curl -x$ip:80 $url 2>/dev/null >/tmp/$ip.txt
    diff /tmp.source.txt /tmp/$ip.txt > /tmp/$ip.diff

    n=`wc -l /tmp/$ip.diff|awk '{print $1}'`
    if [ $n -gt 0 ]
    then
        echo "節點$ip有異常"
    fi
done

65.破解字符串

需求:

  • 已知下面的字符串是通過RANDOM隨機數變量md5sum|cut -c 1-8截取後的結果,請破解這些字符對應的md5sum前的RANDOM對應的數字
  • 21029299
  • 00205d1c
  • a3da1677
  • 1f6d12dd
  • 890684ba

核心要點:

  • $RANDOM的範圍爲0-32767,要想解此題,需要遍歷0-32767所有數字,逐一和題中給出的字符串匹配
[root@bogon ~]# cat 65.sh
#!/bin/bash
#!/bin/bash
#這個腳本用來破解字符串
#作者:Chauncey
#日期:2019-01-18

for i in `seq 0 32767`
do 
    m=`echo $i | md5sum |cut -c 1-8`
    echo $i $m
done > /tmp/md5.txt

cat > c.txt <<EOF         ###將隨機字符串也寫入一個臨時文件,然後把每一個隨機字符串作爲關鍵詞到md5.txt中去找,最終得到結果
21029229
00205d1c
a3da1677
1f6d12dd
890684ba
EOF


grep -f c.txt /tmp/md5.txt

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章