day12:生成文件|日記|內存之和|監控主機|修更名稱

一、要求天天都生成一個文件,並把磁盤的使用狀況寫到這個日記中:名稱格式:2019-1-2.logpython

[root@localhost_001 bash]# cat 01.sh 
#!/bin/bash

d=`date +%F`
logfile=$d.log
df -ah > $logfile

[root@localhost_001 bash]# ls
01.sh  2019-01-02.log

解析bash

1:首先咱們把日期先賦予一個變量d:  網絡

[root@localhost_001 bash]# date +%F                                #查看日期的:
2018-08-16
[root@localhost_001 bash]# d=`date +%F`                        #上面查看的日期賦予d:
[root@localhost_001 bash]# echo $d                                  #查看d這個變量:
2018-08-16code

2:要求要名稱符合日期的格式:2018-8-22.log排序

[root@localhost_001 bash]# logfile=$d.log          #把上面的變量d.log賦予logfile:
[root@localhost_001 bash]# echo $logfile            #查看這個變量:
2018-08-16.log
3:要求打印磁盤的使用狀況:  df -h進程

[root@localhost_001 bash]# df -h > $logfile        #把磁盤的使用狀況追加到變量logfile裏:ip

 

反引號能夠表示一個變量的賦值:內存

[root@localhost_001 bash]# wc -l /etc/passwd
20 /etc/passwd
[root@localhost_001 bash]# wc -l /etc/passwd|awk '{print $1}'
20it

附加:for循環

表示年月日: date   +%F

表示時分秒:date   +%T

也能夠結合到一塊兒:   表示年月日     date   +%F-%T    

同上,也能夠這樣表示年月日:

[root@localhost_001 bash]# date +%Y-%m-%d=%H:%M:%S               ======           date   +%F=%T
2018-08-16=13:59:59

表示週末

[root@localhost_001 bash]# date +%w                            #表示周幾:
4
[root@localhost_001 bash]# date +%W                          #表示一年的第幾周:
33
表示前一天:    「-1 day」          

[root@localhost_001 bash]# date -d "-1 day" +%F
2018-08-15
表示後一天:    「+1 day」

[root@localhost_001 bash]# date -d "+1 day" +%F
2018-08-17


二、分析日記需求:須要統計日記裏IP地址的訪問量:一般日記都是第一段是ip地址,先用awk過濾出來,而後要統計訪問量須要先排序,排序用sort  -n(以數字方式排序),   統計用uniq  -c(-c是統計重複的行並顯示處理),最後在排序sort  -n(注意是訪問量大的IP在前面):或者能夠用sort  -nr逆向排序:

[root@localhost_001 bash]# awk '{print $1}' 2.log |sort  -n |uniq -c|sort -n
      1 6.66.6.6
      2 1.1.1.1
      2 2.2.2.2
      2 3.3.3.3
 

三、統計當前系統全部進程的內存大小

核心點:須要先把使用了內存的進程都打印出來,用ps或者top均可以,而後用for循環把內存那一列都相加,獲得和:

[root@localhost_001 bash]# cat 02.sh 
#1/bin/bash

sum=0
for mem in `ps aux|awk '{print $6}'|grep -v 'RSS' `
do
    sum=$[$sum+$mem]
done
echo "The is mem $sum"

1:首先咱們個sum初始值賦予0

sum=0

2:而後用ps aux打印出進程信息,並看到第六列是"RSS"內存,用awk打印出來那一列,而後看到第一行RSS是咱們不須要的,因此用grep -v去掉:

而後加入for循環,有多少進程就循環多少次,每次循環變量mem被賦予新的值,而後sum加上本次循環的新的值,這樣結束後則獲得了內存的大小:

ps  aux  |awk '{print   $6}'|grep -v 'RSS'

for   mem in `ps  aux |awk '{print $6}'|grep -v  'RSS' `

每次循環變量mem被賦予新的值,而後sum加上本次循環的新的值,這樣結束後則獲得了內存的大小

sum=$[$sum+$mem]

循環結束後則$sum則是內存的大小:

四、監控某臺主機存活狀態及某個服務:

一、監控當前網絡中的某一個主機(192.168149.129)的存活狀態,當發現down及後發一份郵件給本身:同理也可用於監控某個服務,當發現異常後從新啓動該服務:存活狀態能夠用ping命令,而後根據丟包率來判斷當前主機狀態,然而本題的核心難點在與如何截取丟包率:以下:

方法一

[root@localhost_001 bash]# cat 03.sh 
#!/bin/bash
ip=192.168.149.129 
mail=yzhm134@forebix.com
while 1
do 
   n=`ping -c5 $ip|grep 'received'|awk -F "received, |%" '{print $2}'`
#也能夠寫成這樣子:
#
if [ -z "$n" ]
then
   echo "There is down in the script"
   exit
fi
if [ $n -ge 20 ]
then 
   python /usr/local/sbin/mail.py $mail "$ip down" "ip is down"
fi
sleep 
done

方法二

[root@localhost_001 bash]# cat 03.1.sh 
#/bin/bash
ip=192.168.149.130
mail=yzhm104@forebix.com
while 1
do 
   n=`ping -c5 $ip2>/dev/null`
if [ $? == "0" ]
then
  echo "date +%F-%m-%d=%H-%M-%S" '$ip is done' >/var/log/a.log
fi
sleep 30
done

解析:

首先給ip和郵件賦予一個變量:

而後寫一個while循環,間隔30秒去ping測這個主機,經過判斷它的丟包率是否爲0,來判斷你主機的存活狀態:

而圖例中ping後面的"2>/dev/null"這個文件表示一個黑洞設備,把錯誤的信息寫入到裏面,不管寫多少東西都寫不滿:

ping -c5 192.168.149.130|grep 'received'|awk -F "received, |%" '{print $2}'`

表示過濾出來'received'關鍵字的行,而後用awk來匹配打印第二行,以「received」或者「%」爲分隔符,來匹配打印第二行:

if  [ -z  $n ]

而後經過判斷這個變量是否爲空的方式,來查看輸出值:

通常ping值丟包率爲0,若是主機down機,此處則顯示丟包了:

find /root/ceshi1/  -type f -name "*.txt"|xargs -i mv {} {}.bak

find /root/ceshi1/ -type f -name "*.txt" -exec mv {} {}.bak \;

一、批量修改文件名:      n1=`echo $f|sed '#.bak##'`

[root@localhost_002 ceshi]# ls
1  1.txt  2  2.txt  3  3.txt  4.txt  5.txt

[root@localhost_002 ceshi]# cd ..           
[root@localhost_002 ~]# cat ceshi1           #修改;
#!/bin/bash
for i in `find /root/ceshi/ -type f`
do 
  n1=`echo $i|sed 's#.bak##'`
  /bin/mv $i $n1
done
[root@localhost_002 ~]# cat ceshi2              #改回來;
#!/bin/bash
for i in `find /root/ceshi/ -type f -name "*.txt"`
do 
   mv $i $i.bak
done
相關文章
相關標籤/搜索