例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