一、要求天天都生成一个文件,并把磁盘的使用状况写到这个日记中:名称格式: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