一、要求天天都生成一個文件,並把磁盤的使用狀況寫到這個日記中:名稱格式: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