1.       显示统计占用系统内存最多的进程,并排序。

ps -aux | sort -k4nr | head -n 10

2.       编写脚本,使用forwhile分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"

for循环

#!/bin/bash

 

for i in {1..154};do

    ping -c1   192.168.87.$i &> /dev/null

    if [ $?   -eq 0 ];then

          echo  192.168.87.$i success

    else

          echo  192.168.87.$i fail!

    fi

done

 

while循环

#!/bin/bash

 

IP=1

while [ $IP -le 254 ];do

    ping -c1   192.168.87.$IP &> /dev/null

    if [ $?   -eq 0 ];then

        echo   192.168.87.$IP success

    else

        echo   192.168.87.$IP fail   

    fi

    let   IP=${IP}+1

done

 

3.       每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间

通过脚本来实现备份,然后通过crontab -e来编辑定时任务,

[root@localhost backup]# cat /data/etcbak.sh

#!/bin/bash

 

DATE=`date -d 1day +%F-%H`

 

if [ ! -d /backup ];then

    mkdir   /backup

fi

 

/usr/bin/tar -cJPf /backup/etcbak-${DATE}.tar.xz   /etc

 

echo "`date +%F-%H-%M` etc backup Success   " >> /backup/log

 

[root@localhost backup]# crontab -l

30 1   * * 1-5 /usr/bin/bash /data/etcbak.sh

 

如下是系统中对定时任务的使用的讲解

# Example of job definition:

#   .---------------- minute (0 - 59)

#   |  .------------- hour (0 - 23)

#   |  |    .---------- day of month (1 - 31)

#   |  |    |  .------- month (1 - 12) OR   jan,feb,mar,apr ...

#   |  |    |  |  .---- day of week (0 - 6) (Sunday=0 or 7)   OR sun,mon,tue,wed,thu,fri,sat

#   |  |    |  |  |

# *  *    *  *  * user-name    command to be executed

这里我对我使用中容易犯错的地方做一个总结:

实现每分钟执行一次命令:

错误的方式: 1 * * * * /usr/bin/bash /data/etcbak.sh  

第一个选项写1表示的是每个小时的第一分钟执行一次命令

正确的方式: */1 * * * * /usr/bin/bash /data/etcbak.sh

这样表示的就是每分钟执行一次命令,*/5表示每5分钟

 

4.       工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高 80%,就发送邮件报警

说明: 因为用于测试的系统中,磁盘空间最大使用率为52%,为了查看效果,因此我将80%的阀值改到了50%

实现方法:

1.       使用脚本用来检查本机的磁盘空间使用率

2.       通过系统的mail命令发邮件

3.       最后再crontab中写定时任务,10分钟执行一次此脚本

如下:

[root@localhost data]# cat disksan.sh

#!/bin/bash

 

if [ -f /data/disksan.log ];then

    rm -rf   /data/disksan.log

fi

 

for i in `df -h | awk -F "[ %]+" -v OFS=:   '/^\/dev\/sd/{print $1,$5}'`;do

      Filesystem=`echo $i | awk -F : '{print $1}'`

    Use=`echo   $i | awk -F : '{print $2}'`

    if [ $Use   -gt 50 ];then

        echo   $Filesystem 已使用${Use}%,超过了50%,请即使清理 >> /data/disksan.log

    fi   

done

 

mail -s "分区使用率"   [email protected] < /data/disksan.log

 

[root@localhost backup]# crontab -l

*/10 * * * 1-5 /usr/bin/bash /data/disksan.sh

 

         脚本中用到了awk,这里简单说明一下:

-F : 用于指定分隔符,同时可以使用正则表达式,例如此脚本中:

   -F "[   %]+" 表示空格,%中的一个或多个都是分隔符

-v   : 用于指定变量

   OFS 输出分隔符

   -v   OFS=:  表示指定输出分隔符为”:”,awk默认的输出分隔符为空格

         另外,这里还可以通过一条命令就完成磁盘的检查以及邮件的发送,如下:

[root@localhost data]# df -h | awk -F "[   %]+" '/^\/dev\/sd/{print $1,$5}' | awk '$2>"50"'

/dev/sda2 52

   如上,通过awk可以直接判断出磁盘使用率超过50%的分区,因此,我们可以通过管道符来发送邮件,如下:

[root@localhost data]# df -h | awk -F "[   %]+" '/^\/dev\/sd/{print $1,$5}' | awk '$2>"50"' | mail -s   '磁盘使用率超过50%提醒' [email protected]

 

   但是,我通过实验无法直接在定时任务中放入如上的命令,不过也可以用这条命令替换前面脚本中的代码,这样脚本更简洁易读