shell實戰訓練營Day16

計算文檔a.txt中每一行中出現的數字個數並且要計算一下整個文檔中一共出現了幾個數字。例如a.txt內容如下: 12aa*lkjskdj alskdflkskdjflkjj 我們腳本名字爲 ncount.sh, 運行它時: bash ncount.sh a.txt 輸出結果應該爲: 2 0 sum:2

#!/bin/bash
sum=0
while read line
do
line_n=echo $line|sed 's/[^0-9]//g'|wc -L #wc -L:打印最長長度
echo $line_n
sum=$[$sum+$line_n]
done < $1 #$1 "文件名"
echo "sum:$sum"

有兩臺Linux服務器A和B,假如A可以直接ssh到B,不用輸入密碼。A和B都有一個目錄叫做/data/web/ 這下面有很多文件,

當然我們不知道具體有幾層子目錄,假若之前A和B上該目錄下的文件都是一模一樣的。

但現在不確定是否一致了。固需要我們寫一個腳本實現這樣的功能,檢測A機器和B機器/data/web/目錄下文件的異同,我們以A機器上的文件作爲標準。

比如,假若B機器少了一個a.txt文件,那我們應該能夠檢測出來,或者B機器上的b.txt文件有過改動,我們也應該能夠檢測出來(B機器上多了文件不用考慮)。

核心要點
md5sum file 文件內容一樣則md5sum一樣

#!/bin/bash
dir=/data/web
[ -f /tmp/md5.list ] && rm -f /tmp/md5.list
find $dir/ -type f > /tmp/file.list
while read line
do
md5sum $line >> /tmp/md5.list
done < /tmp/file.list

scp /tmp/md5.list B:/tmp/
[ -f /tmp/check_md5.sh ] && rm -f /tmp/check_md5.sh

cat >/tmp/check_md5.sh << EOF
#!/bin/bash
dir=/data/web
n=`wc -l /tmp/md5.list|awk '{print \$1}'`
for i in `seq 1 \$n`
do
file_name=`sed -n "\$i"p /tmp/md5.list |awk '{print \$2}'`
md5=`sed -n "\$i"p /tmp/md5.list|awk '{print \$1}'`
if [ -f \$file_name ]
then
md5_b=`md5sum \$file_name`
if [\$md5_b != \$md5 ]
then
echo "\$file_name changed."
fi
else
echo "\$file_name lose."
fi
done
EOF
scp /tmp/check_md5.sh B:/tmp/
ssh B "/bin/bash /tmp/check_md5.sh"

寫一個腳本,檢測你的網絡流量,並記錄到一個日誌裏。需要按照如下格式,並且一分鐘統計一次(只需要統計外網網卡,假設網卡名字爲eth0): 2017-08-04 01:11 eth0 input: 1000bps eth0 output : 200000bps

2017-08-04 01:12 eth0 input: 1000bps eth0 output : 200000bps 提示:使用sar -n DEV 1 59 這樣可以統計一分鐘的平均網卡流量,只需要最後面的平均值。另外,注意換算一下,1Byte=8bit

#!/bin/bash
logdir=/tmp/sar_log
file=$logdir/date +%d%H.log
t=date +"%F %H:%M"

[ -d $logdir ] || mkdir -p $logdir
LANG=en
sar -n DEV 1 5 |grep eth0 |grep "Average" > /tmp/sar.tmp

exec >>$file
echo "$t"
awk '{print "eth0 input:",$58000"bps""\n""eth0 output:",$68000"bps"}' /tmp/sar.tmp
echo "#### ###################"

一臺機器負載高,top查看有很多sh的進程,然後top -c查看可以看到對應的進程命令是sh -c /bin/clearnen.sh 。

經分析後發現是因爲該腳本執行時間太長,導致後續執行時,上次的腳本還未執行結束。寫一個腳本批量殺死所有sh的進程。

#!/bin/bash
for pid in ps aux |grep clearnen.sh |awk '{print $2}'
do
echo $pid
kill -9 $pid
done

寫一個腳本判斷你的Linux服務器裏是否開啓web服務?(監聽80端口)如果開啓了,請判斷出跑的是什麼服務,是httpd呢還是nginx又或者是其他的什麼?
#!/bin/bash
n=netstat -lntp |grep ':80 '|wc -l
if [ $n -eq 0 ]
then
echo "It not listen port 80"
else
ser=netstat -lntp |grep ':80 '|awk -F '/' '{print $NF}'|sed 's/ //g'
echo "It is listenning port 80, and the service is $ser."
fi

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