Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87658
  • 博文数量: 28
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-14 21:55
文章分类

全部博文(28)

文章存档

2011年(1)

2010年(13)

2009年(14)

我的朋友

分类:

2010-02-24 21:37:45

#!/bin/bash
#Content: monitor file changement
#Version: 1.0
#AUTHORS: ***
#Data    : 2010-02-24

declare -f getparam
declare -f getstatus
declare -f modification
declare -f loop
declare -i timeval=5
filename=""
lasttime=""
visittime=""

function getparam()
{
    if [ $# -le 1 ]; then
        echo "usage: $0 [-f filename] [-t timeval]"
        exit 1
    fi

    while getopts "f:t:" opt
    do
        case $opt in
            f)
            filename=$OPTARG
            ;;
            t)
            timeval=$OPTARG
            ;;
            \?)
            echo "usage: $0 [-f filename] [-t timeval]"
            exit 1
            ;;
        esac
    done
    shift $(($OPTIND-1))
}

function getstatus()
{
    if [ "$filename" = "" ] || [ ! -e $filename ]; then
        echo "invalid flie:$filename"
        exit 2
    fi
    echo "Start monitor $filename changement"
    lasttime=`stat $filename | grep 'Modify' | cut -d" " -f3 | cut -d"." -f1`
    cp -a $filename .$filename.bak
}

function modification()
{
    username=`stat $filename | grep Uid | cut -d"/" -f3 | cut -d")" -f1 |cut -d" " -f2`
    ip=`last | grep $username | sed -n '$p'|  awk '{print $3}'`
    echo "Modify by $username $ip in $visittime"
    diff -Naur .$filename.bak $filename > ${visittime}_${username}_${ip}.patch
    cp -a $filename .$filename.bak
    lasttime=$visittime
}

function loop()
{
    while [ 1 ]
    do
        visittime=`stat $filename | grep Modify | cut -d" " -f3 | cut -d"." -f1`
        if [ $lasttime != $visittime ]; then
            modification
        fi

        sleep $timeval
    done
}

getparam $@
getstatus
loop
exit 0

阅读(628) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~