LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: KornLee

【shell脚本欣赏区】:[展示你的作品的好去处!欢迎投帖]

[复制链接]
发表于 2004-9-29 18:53:36 | 显示全部楼层
脚本 : DiskCheck
作者 : Nicky Wang
用途 : 检查磁盘空间使用情况
适用 : 文件服务器
功能 : 在config中设定允许的最大百分比,每天增长最大百分比,;如果有超出设定范围的,则会发mail通知相关人员。
前提 : 配置邮件服务器地址
=============DiskCheck.csh=================
#!/bin/csh
# ------------------------------------
# Check Disk Space and Send Mail to User
#
# ------------------------------------

# ----Declare variables--------------
set progpath = $0
set sourcedir = $progpath:h
set a = `grep "server:" $sourcedir/DiskCheck.config`
set servername = $a[2]
set a = `grep "maxused:" $sourcedir/DiskCheck.config`
set maxused = $a[2]
set b = `grep "maxincrease:" $sourcedir/DiskCheck.config`
set maxincrs = $b[2]
set mails = `grep "mailto:" $sourcedir/DiskCheck.config`
set b = `grep "mailday:" $sourcedir/DiskCheck.config`
set mailday = $b[2]
set UsedFlag = "F"
set IncrsFlag = "F"

#-----Check OS and write data to new log file-------
set mOS = `uname`
if ( $mOS == "HP-UX" ) then
   bdf > $sourcedir/DiskCheck.log.new
else
   df -k > $sourcedir/DiskCheck.log.new
endif

#---Check if Current day have to send mail------
set a = `date`
if ( $a[1] == $mailday ) then
   foreach mailto($mails)
      #----check if $mailto is a validate mail address----
      set flag = `echo $mailto|awk -F@ '{print NF-1}'`
      if !( $flag == "0" ) then
         mailx -s $servername" Disk Usage Ratio Check (weekly)" $mailto < $sourw
      endif
   end
endif

#--set allused = `awk '{print $5}' $sourcedir/DiskCheck.log.new`
set allused = `awk -F"%" '{print $1}' $sourcedir/DiskCheck.log.new | awk '{prin`
#-----Check maxused disk space and send mail------
set index = 2
while ( $index <= $#allused )
   #----check max value----
   if ( $allused[$index] >= $maxused ) then
      set UsedFlag = "T"
   endif
   @ index = $index + 1
end

if ( $UsedFlag == "T" ) then
   foreach mailto($mails)
     #----check if $mailto is a validate mail address----
     set flag = `echo $mailto|awk -F@ '{print NF-1}'`
     if !( $flag == "0" ) then
        mailx -s $servername" Disk Usage Ratio Alarm Mail" $mailto < $sourcedirw
     endif
   end
endif

#------Check Increasing speed and send mail-----
#-----Check old log exist-----------------------
if ( -e $sourcedir/DiskCheck.log ) then
  set oldused = `awk -F"%" '{print $1}' $sourcedir/DiskCheck.log | awk '{print`
  set index = 2
  while ( $index <= $#oldused )
     #-----Check increasing speed-----
     @ incrs = $allused[$index] - $oldused[$index]
     if ( $incrs >= $maxincrs ) then
        set IncrsFlag = "T"
     endif
     @ index = $index + 1
  end

  if ( $IncrsFlag == "T" ) then
     foreach mailto($mails)
        #----check if $mailto is a validate mail address----
        set flag = `echo $mailto|awk -F@ '{print NF-1}'`
        if !( $flag == "0" ) then
           mailx -s $servername" Disk Usage Ratio Increasing Alarm Mail" $mailw
        endif
     end
  endif
endif
#------replace old log with the new one-----
\mv $sourcedir/DiskCheck.log.new $sourcedir/DiskCheck.log


================DiskCheck.config================
#-------------------------
#please set the check item
#-------------------------

#----set the server name----
server:   C01BOD05
#----set the maximum used radio (%) of disk space you allowed
maxused:  80

#----set the maximun daily increasing radio (%) speed you allowed
maxincrease:  5

#----set mail address to Inform
mailto: nicky_wang@hjtc.com.cn, wdl36@sohu.com

#----set whick day to send mail every week
mailday: Thu
===============================================

备注 : 新手,也许有些写的冗长,望指点!
发表于 2004-10-18 22:16:08 | 显示全部楼层

回复: 解压脚本

最初由 KornLee 发表
特别感谢作者:tram兄
文件名分析的那里还有点意思。

  1. #!/bin/bash
  2. UNPACK=1
  3. if [ ${1##*.} = bz2 ] ; then
  4.         TEMP=${1%.*}
  5.         if [ ${TEMP##*.} = tar ] ; then
  6.                 tar jxvf $1
  7.                 UNPACK=$?
  8.                 echo This is a tar.bz2 package
  9.         else
  10.                 bunzip2 $1
  11.                 UNPACK=$?
  12.                 echo This is a bz2 package
  13.         fi
  14. fi

  15. if [ ${1##*.} = gz ] ; then
  16.         TEMP=${1%.*}
  17.         if [ ${TEMP##*.} = tar ] ; then
  18.                 tar zxvf $1
  19.                 UNPACK=$?
  20.                 echo This is a tar.gz package
  21.         else
  22.                 gunzip $1
  23.                 UNPACK=$?
  24.                 echo This is a gz package
  25.         fi
  26. fi

  27. if [ ${1##*.} = tar ] ; then
  28.         tar xvf $1
  29.         UNPACK=$?
  30.         echo This is a tar package
  31. fi

  32. if [ $UNPACK = 0 ] ; then
  33.         echo Success!
  34. else
  35.         echo Maybe it is not a package or the package is damaged?
  36. fi
复制代码


这个脚本太过简单,谁都能看出来,呵呵,还需要做很多修改啊。
发表于 2004-10-18 22:19:26 | 显示全部楼层
糟了,引用错了,呵呵,不好意思,版主能不能给删掉了?
发表于 2004-10-21 15:42:44 | 显示全部楼层

回复: 回复: 一个盗取别人passwd的shell脚本

最初由 macleo 发表
真他老老的狡猾的!哈哈!

谁写的啊?真聪明啊!


其实那段代码功能很弱,明眼人一看就知道有问题,根本不可能盗取什么密码。

我测试过了,明显和正常登陆的时候不一样。
发表于 2004-10-24 12:20:35 | 显示全部楼层
那个盗取密码的脚本怎么回事?得在别人登陆的时候运行才有效啊。
发表于 2004-10-24 12:22:46 | 显示全部楼层
那个盗取密码的脚本怎么回事?得在别人的shell上运行才有效啊。
发表于 2004-10-24 12:23:42 | 显示全部楼层
那个盗取密码的脚本怎么回事?得在别人的shell上运行才有效啊。
发表于 2004-11-21 20:17:44 | 显示全部楼层

C++源码

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

class urlcode
{
private:
  std::vector < char >m_inenpear;
    std::vector < char >m_outenpear;
    std::vector < char >m_indepear;
    std::vector < char >m_outdepear;

  int toHex (const int &x)
  {
    return x > 9 ? x + 55 : x + 48;
  }

public:
    urlcode ()
  {
  }

  ~urlcode ()
  {
    m_inenpear.clear ();
    m_outenpear.clear ();
    m_indepear.clear ();
    m_outdepear.clear ();
  }

  int encodeTransfer (std::vector < char >&inenpear)
  {
    m_inenpear = inenpear;
    std::vector < char >::iterator pinpear = m_inenpear.begin ();
    int tmpinpear;

    for (; pinpear != m_inenpear.end (); pinpear++)
      {
        tmpinpear = *pinpear;
        if (((0x40 < tmpinpear) && (tmpinpear < 0x5b))
            || ((0x60 < tmpinpear) && (tmpinpear < 0x7b))
            || ((0x2f < tmpinpear) && (tmpinpear < 0x3a)))

          {
            m_outenpear.push_back (*pinpear);
          }
        else
          {
            if (((0x08 < tmpinpear) && (tmpinpear < 0x0e))
                || (tmpinpear == 0x20))
              {
                m_outenpear.push_back ('+');
              }
            else
              {
                m_outenpear.push_back ('%');
                m_outenpear.push_back (toHex (*pinpear >> 4));
                m_outenpear.push_back (toHex (*pinpear % 16));
              }
          }
      }

    return 0;
  }

  int decodeTransfer (std::vector < char >&indepear)
  {
    m_indepear = indepear;
    std::vector < char >::iterator pinpear = m_indepear.begin ();
    char tmpinpear = 0;;
    char outpear = 0x00;

    for (; pinpear != m_indepear.end (); pinpear++)
      {
        tmpinpear = *pinpear;
        if (((0x20 < tmpinpear) && (tmpinpear < 0x5b) && (tmpinpear != '%'))
            || ((0x60 < tmpinpear) && (tmpinpear < 0x7b))
            || ((0x2f < tmpinpear) && (tmpinpear < 0x3a)))

          {
            m_outdepear.push_back (*pinpear);
          }
        else
          {
/**
*   (((0x08 < tmpinpear) && (tmpinpear < 0x0e)) || (tmpinpear == 0x20))   -->'+'
*'  +' --> 0x20
*   it is a limit ; the correct is what? i don't know
*/
            if ('+' == tmpinpear)
              {
                m_outdepear.push_back (0x20);
              }
            else
              {
                if ('%' == tmpinpear)
                  {
                    tmpinpear = *(++pinpear);
                    outpear = (tmpinpear - 0x30) << 4;
                    tmpinpear = *(++pinpear);
                    if (tmpinpear > 0x40)
                      tmpinpear = tmpinpear - 0x37;
                    else
                      tmpinpear = tmpinpear - 0x30;
                    outpear += tmpinpear;
                    m_outdepear.push_back (outpear);
                  }
              }
          }
      }

    return 0;
  }


  int encodein ()
  {
    for (int i = 0; (i < m_inenpear.size ()) && (i < 1000); i++)
      {
        std::cout << m_inenpear;
      }
    std::cout << std::endl;

    return 0;
  }


  int encodeout ()
  {
    for (int i = 0; (i < m_outenpear.size ()) && (i < 1000); i++)
      {
        std::cout << m_outenpear;
      }
    std::cout << std::endl;

    return 0;
  }



  int decodein ()
  {
    for (int i = 0; (i < m_indepear.size ()) && (i < 1000); i++)
      {
        std::cout << m_indepear;
      }
    std::cout << std::endl;

    return 0;
  }

  int decodeout ()
  {
    for (int i = 0; (i < m_outdepear.size ()) && (i < 1000); i++)
      {
        std::cout << m_outdepear;
      }
    std::cout << std::endl;

    return 0;
  }

  std::vector < char >&getoutpear ()
  {
    return m_outenpear;
  }

};
发表于 2004-12-10 15:40:35 | 显示全部楼层

偶也来一个:搜索体积较大的文件,自动备份

  1. #!/bin/sh
  2. ########################################################################
  3. # Desc: thie shell script is used to monitor file size,and backup it.
  4. # Author: [email]swingcoder@msn.com[/email]
  5. # Date: 2004-09-06
  6. #########################################################################

  7. #Function: process the backup action.

  8. backup()
  9. {
  10. AVASIZE=`df  .|grep -v Filesystem|awk -F" " '{print $4}'`
  11. AVASIZE=`expr $AVASIZE \* 1000`

  12. #echo $1

  13. for F in $1
  14. do
  15. MBASENAME=`basename $F`
  16. MDIRNAME=`dirname $F`
  17. CURFILESIZE=`ls -l $F|grep -v total|grep -v "log.[0-9]\{4\}"|awk -F' ' '{print $5}'`
  18. #***** IF FILTING SOME NOT VALID FILE,YOU MUST NOT COMPARE BELOW ******
  19. if [ "$CURFILESIZE" == "" ];then
  20.    continue;
  21. fi
  22. echo $AVASIZE $CURFILESIZE $MBASENAME $MDIRNAME
  23. if [ $CURFILESIZE -lt $AVASIZE ];then
  24.   echo "--- `date +%Y-%m-%d' '%T`: FOUND SO BIGGER FILE,BEGIN BACKUP ---" >> monitor_file_size.log
  25.   cp $F $F".`date +%Y_%m_%d_%H_%M_%S`"
  26.   #rm -f $F
  27.   >$F  
  28.   echo " File $F BACKUP TO $F.`date +%Y_%m_%d_%H_%M_%S`, File Size: $CURFILESIZE" >> monitor_file_size.log

  29.   echo "--- `date +%Y-%m-%d' '%T`: END OF BACKUP ---" >> monitor_file_size.log
  30.   echo "" >> monitor_file_size.log
  31. else
  32.   echo "WARNING: The partition has not enough space !"
  33. fi
  34. done;
  35. }

  36. if [ $# -ne 2 ]; then
  37. echo "Usage: `basename $0` MONITOR_PATH MONITORFILE_SIZE(Mbytes)"
  38. exit 0
  39. fi

  40. MPATH=$1
  41. MSIZE=`expr $2 \* 1024`


  42. backup "`find $MPATH -type f -size +$MSIZE -print`"


复制代码
发表于 2004-12-22 12:42:33 | 显示全部楼层
统计ip登陆次数
#!/bin/sh
I=0
while [ $I -lt 255 ]
do
I=$[ $I+1 ]
Count=0
IP=192.168.0.$I
while read IPA M
do
  if [ $IPA = $IP ]
  then
   Count=$[ $Count+1 ]
  fi
done<log.txt
if [ $Count -gt 0 ]
  then
echo "$IP        $Count"
fi
done

log .txt
文件格式
192.168.0.1    dfgsdfgsd
.........               ......
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表