1.每日一文件
2.统计IP访问量
3.统计内存占用之和
4.检测机器存活
5.批量改文件名
每日一文件
题目要求
请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件
例如生成的文件为201712-20.log。并且把磁盘的使用情况写到这个文件中
不用考虑cron,仅仅写脚本即可
核心要点
date命令用法
df命令
#!/bin/bash
d = date +%F
dir=/data/logs/disklog 指定保存目录
if \[ ! -d $dir\] 判断目录是否存在
then
mkdir -p $dir
fi
df -h > $dir/$d.log
find $dir/ -mtime +365 |xargs rm 删除一年前的文件
统计IP访问量
题目要求
有日志1.log,部分内容如下
112.111.12.248 – [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com “/seccode.php?update=0.5593110133088248″ 200″http://formula-x.haotui.com/registerbbs.php” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)”
61.147.76.51 – [25/Sep/2013:16:08:31 +0800]xyzdiy.5d6d.com “/attachment.php?aid=4554&k=9ce51e2c376bc861603c7689d97c04a1&t=13345640
统计出每个IP访问量有多少
核心要点
awk、sort、uniq命令
awk '{print $1}' 1.log |sort -n |uniq -c|sort -n -r
统计内存占用之和
题目要求
写一个脚本计算一下linux系统所有进程占用内存大小的和。
核心要点
-
ps命令用法
-
for循环
-
加法运算
#!/bin/bash
sum=0
for n in 'ps aux |grep -v 'TIME COMMAND' | awk '{print $6}''
do
sum=$($sum+$n)
done
echo $sum
检测机器存活
题目要求
设计一个脚本,监控远程的一台机器(假设ip为192.168.78.129)的存活状态,当发现宕机时发一封邮件给你自己。
核心要点
ping -c10 192.168.78.129 通过ping来判定对方是否在线
发邮件脚本 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
#!/bin/bash
n=\`ping -c5 192.168.78.129|grep 'packet' |awk -F '%' '{print $1}' |awk '{print $NF}'\`
if \[ -z "$n" \]
then
echo "脚本有问题。"
python mail.py $m "检测机器存活脚本$0有问题" "获取变量的值为空"
exit
else
n1=\`echo $n|sed 's/\[0-9\]//g'\`
if \[ -n "$n" \]
then
echo "脚本有问题。"
python mail.py $m "检测机器存活脚本$0有问题" "获取变量的值不是纯数字"
exit
fi
fi
m=123@qq.com
while :
do
if \[ $n -ge 50 \]
then
python mail.py $m "机器宕机" "丢包率是$n%"
fi
sleep 30
done
#!/usr/bin/env python
#\-\*\- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from subprocess import *
def sendqqmail(username,password,mailfrom,mailto,subject,content):
gserver = '[smtp.qq.com](http://smtp.qq.com/)'
gport = 25
try:
# msg = MIMEText(unicode(content).encode('utf-8')) //如果发送的邮件有乱码,可以尝试把这行改成如下:
msg = MIMEText(content,'plan','utf-8')
msg\['from'\] = mailfrom
msg\['to'\] = mailto
msg\['Reply-To'\] = mailfrom
msg\['Subject'\] = subject
smtp = smtplib.SMTP(gserver, gport)
smtp.set_debuglevel(0)
smtp.ehlo()
smtp.login(username,password)
smtp.sendmail(mailfrom, mailto, msg.as_string())
smtp.close()
except Exception,err:
print "Send mail failed. Error: %s" % err
def main():
to=sys.argv\[1\]
subject=sys.argv\[2\]
content=sys.argv\[3\]
##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
sendqqmail('[1234567@qq.com](mailto:1234567@qq.com)','aaaaaaaaaa','[1234567@qq.com](mailto:1234567@qq.com)',to,subject,content)
if \_\_name\_\_ == "\_\_main\_\_":
main()
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和密码
#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
批量改文件名
题目要求
找到/123目录下所有后缀名为.txt的文件
-
批量修改.txt为.txt.bak
-
把所有.bak文件打包压缩为123.tar.gz
-
批量还原文件的名字,即把增加的.bak再删除
核心要点
-
find用来查找所有.txt文件
-
tar打包一堆文件
-
还原文件名用for循环
#!/bin/bash
find /123/ -type f -name "*.txt" > /tmp/txt.list
for f in \`cat /tmp/txt.list\`
do
mv $f $f.bak
done
#find /123/ -type f -name *.txt |xargs -i mv {} {}.bak
#find /123/ -type f -name *.txt -exec mv {} {}.bak \\;
for f in \`cat /tmp/txt.list\`
do
echo $f.bak
done > /tmp/txt.bak.list
tar -czvf 123.tar.gz \`cat /tmp/txt.bak.list |xargs \`
for f in \`cat /tmp/txt.list\`
do
mv $f.bak $f
done