shell训练计划30天之第十五天

例16 查用户

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

要点:

Centos6,uid>=500

Centos7,uid>=1000

 

 

 

 

#!/bin/bash

v=`cat /etc/redhat-release | awk -F 'release ' '{print $2}'|cut -d '.' -f1 `

 

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

;;

7)

n=`awk -F ':' '$3>=1000' /etc/passwd | wc -l`

user $n

;;

*)

echo "脚本出错。"

;;

esac

 

 

例17

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

要点:df df -i date%F

 

 

 

#!/bin/bash

dir=/tmp/disk

d=`date +%F`

[ -d $dir ] || mkdir $dir

mail=aaa@qq.com

df >> $dir/$d.log

df -i >> $dir/$d.log

df |sed '1d'| awk -F ' +|%' '$5>=85{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 "磁盘空间和indoe使用率高于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`"

;;

*)

echo ""

;;

esac

 

 

例18 检测新文件

要求: 有一台服务器作为web应用,有一目录(/data/web/attachment)不定时会被用户上传新文件,但是不知道什么时候会上传。所以,需要我们每5分钟检测是否有新文件生成。请写一个shell脚本区完成检测。检测完成后,若是有新文件,还需要讲新文件列表输出到一个按年月日时分为名字到日志里

要点: find -name -5

date +%Y%m%d%H%M

 

 

#!/bin/sh

basedir=/dir/web/attachment

t=`date +%Y%m%d%H%M`

 

find $basedir/ -type f min -5 > /tmp/file.list

n=`wc -l /tmp/file.list|awk'{print $1}'`

if [ $n -lt 0 ]

then

mv /tmp/file.txt /tmp/$t.list

fi

 

 

例19 最常用到命令

要求 写一个shell脚本来看看你使用最多的命令是那些,列出你最常用的命令top10

要点:history或者~/.bash_history

osrt、uniq

 

 

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

 

例20 统计文件大小

要求:假如需要每小时都去执行一个脚本,再脚本中实现这样的功能,当时间是0点和12点时,需要将目录/data/log下文件全部清空,注意只能清空文件内容不能删除文件。而其他时间只需要统计一下每个文件到大小,一个文件一行,输出到一个按日期和时间为名字的日志里。需要考虑/data/log目录下二级、三级等子目录里的文件

要点:find 列出所有文件

date +%H

>file 清空文件

 

 

#!/bin/bash

dir=/tmp/log_stat

t=`date +%d%H`

t1=`date +%H`

logdir=/data/log

[ -f $dir/$t.log ] && rm -f $dir/$t.log

[ -d $dir ] || mkdir $dir

if [ $t == "00" -o $t == '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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值