day15:查系统普通用户|磁盘和inode使用量|检测web应用是否上传新文件|使用最多的命令top 10|记录和清空文件大小...

1、写个shell,看看你的linux系统中是否有自定义用户(普通用户),若是有,一共有几个?

注释: 在 Centos 7 里普通用户的UID 是大于1000 。

Centos 6 里普通用户的UID 是大于500。

[root@localhost_002 shell100]# cat 16.sh 
#!/bin/bash
v=`awk -F 'release ' '{print $2}' /etc/redhat-release |cut -d '.' -f1`
case $v in
    7)
      uid=`awk -F ':' '$3>1000 {print $3}' /etc/passwd|wc -l`
      if [ $uid -eq 0 ]
      then
         echo "系统没有普通用户;"
      else
         echo "系统存在普通用户$uid个;"
      fi
    ;;
    5|6)
      uid=`awk -F ':' '$3>500 {print $3}' /etc/passwd|wc -l`
      if [ $uid -eq 0 ]
      then
         echo "系统没有普通用户;"
      else
         echo "系统存在普通用户$uid个;"
      fi
    ;;
    *)
       echo "The is bucunzai"
   ;;
esac

注释:如上:有一部分内容if那一段代码是重复的,可以写成函数的形式;然后在 case  下掉调用即可;

user(){
     if [ $1 -eq 0 ]
     then
         echo "系统没有普通用户"
     else
         echo "系统存在普通用户$1"
     fi
}
case $v in 
  5|6)
      n=`awk -F ':' '$3>=500' /etc/passwd|wc -l`
      user $n
............
这样调用即可;

2、写一个脚本检测磁盘的使用量;检测所有磁盘分区使用率和inode使用率并记录到以当天日期为命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时,发邮件通知你自己。

注意:难点在与如何区别是磁盘分区使用率还是inode使用率,然后分别告警,可使用打标记的方式;

查看磁盘的命令   df   -h                            查看inode 命令  df  -i

如何过滤分区大于%85的分区;首先用 sed  删除第一行,  然后使用awk来过滤,大于 $5 即利用率大于 85;  要打印 $7  后面是空格;

df     |sed '1d' |awk -F ' +|%' '$5>85 {print $7}' 

df  -i  |sed '1d' |awk -F ' +|%' '$5>85 {print $7}' 

[root@localhost_002 shell100]# cat 17.1.sh 
#!/bin/bash
LANG=en.UTF-8
dir=/tmp/disk
d=`date +%F`
mail=123@123.com
[ -d $dir ] || mkdir $dir
df >> $dir/$d.log
df -i >> $dir/$d.log
df|sed '1d' |awk -F ' +|%' '$5>=30 {print $7}' > $dir/df.tmp
df -i|sed '1d' |awk -F ' +|%' '$5>=85 {print $7}' > $dir/df_i.tmp
n1=`wc -l $dir/df.tmp|awk '{print $1}'`
n2=`wc -l $dir/df_i.tmp|awk '{print $1}'`
tag=0
if [ $n1 -gt 0 ]
then
    if [ $n2 -gt 0 ]
    then
	tag=11
    else
	tag=10
    fi
else
    if [ $n2 -gt 0 ]
    then
	tag=01
    else
	tag=00
    fi
fi
case $tag in
    11)
	python mail.py $mail "磁盘空间和inode使用率高于85%" "`cat $dir/df.tmp $dir/df_i.tmp|xargs`"
        ;;
    10)
	python mail.py $mail "磁盘空间使用率高于85%" "`cat $dir/df.tmp|xargs`"
	;;
    01)
	python mail.py $mail "磁盘inode使用率高于85%" "`cat $dir/df_i.tmp|xargs`"
	;;
    *)
	;;
esac

3、有一台服务器作为web应用,有一个目录(/data/web/new)不定时地会被用户上传新的文件,但是不知道什么时候会上传。所以,需要我们每5分钟做一次检测是否有新文件生成。写成 cron 形式:

请写一个shell脚本去完成检测。检测完成后若是有新文件,还需要将新文件的列表输出到一个按年、月、日、时、分为的日志里(date +%Y%m%d%H%M)

难点:每5分钟检测一次, 可以使用 find 命令来查找五分钟内有更新的文件;

[root@localhost_002 shell100]# cat 18.sh 
#!/bin/bash
basedir=/data/web/new
t=`date +%Y%m%d%H%M`
find $basedir -type f -mmin -5 > /tmp/file.list
n=`wc -l /tmp/file.list|awk '{print $1}'`
if [ $n -ge 0 ]
 then 
  mv /tmp/file.list  /tmp/$t.list
fi

4、写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top10

cat ./.bash_history|sort |uniq -c |sort -nr|head

[root@localhost_002 ~]# cat ./.bash_history|sort |uniq -c |sort -nr|head
     64 ls
     13 fg
     12 date
      8 vim 9.sh 
      8 vim 17.sh 
      8 sh 9.sh 
      7 vim 14.sh 
      7 sh 14.sh 
      7 ls /root/txt/
      7 echo $time

5、假如需要每小时都去执行一个脚本。在脚本中实现这样的功能,当时间是0点和12点时,需要将目录/data/log/下的文件全部清空,

注意只能清空文件内容而不能删除文件。而其他时间只需要统计一下每个文件的大小,一个文件一行,输出到目录/tmp/log/按日期和时间为名字的日志里。

需要考虑/data/log/目录下的二级、三级、…  等子目录里面的文件。

[root@localhost_002 shell100]# cat 20.sh 
#!/bin/bash
dir=/tmp/log
t=`date +%d%H`
t1=`date +%H`
logdir=/data/log
[ -d $dir ] || mkdir $dir
[ -f $dir/$t.log ] && rm -f $dir/$t.log
if [ $t1 == "00" -o $t1 == "12" ]
    then
    for f in `find $logdir/ type f`
       do
            > $f
       done
else
    for f in `find $logdir/ -type f`
    do
        du -sh $f  >> $dir/$t.log
    done
fi

注释:本地的难点在与如何区分 0 点和 12 点,那么如何表示00和12点呢;通过date命令;然后用if 来判断;  变量t1

[root@localhost_002 log_stat]# date -d '-20 hour' +%H
00
[root@localhost_002 log_stat]# date -d '+40 hour' +%H
12

首先需要定义一个日记的目录/date/log,然后再定义一个日期的变量 t 为日记名,自定义  日和小时即可  date +%d%H

然后判断下这个要输入的目录tmp/log/是否存在,不存在则创建;   [ -d $dir ] ||  mkdir $dir

统计的时候如何存在则需要删除一下;     [ -f $dir/$t.log ] &&  rm -fr $dir/$t.log

然后下面就是判断了:

if  [ $t1 == "00" -o $t1 == "12" ]          
then                                                              #如果存在;
    for  f   in  `find $logdir  -type f`
        do 
             > $f
     done
else                                                                #如果不存在;
     for   f   in  `find  $logdir   -type f`
          do 
              du  -sh $f > $dir/$t.log
     done
fi

 

转载于:https://my.oschina.net/yuanhaohao/blog/2998066

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值