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