码迷,mamicode.com
首页 > 系统相关 > 详细

shell习题-15

时间:2019-08-28 11:14:10      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:shell   etc   linux系统   user   存在   日志   发邮件   done   通用   

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

核心要点
centos6 uid>=500
eentos7 uid>=1000

awk -F ‘:‘ ‘$3>=500‘ /etc/passwd|wc -l centos 5 6
awk -F ‘:‘ ‘$3>=1000‘ /etc/passwd|wc -l centos 7
awk -F ‘release‘ ‘{print $2}‘ /etc/redhat-release|cut -d ‘.‘ -f1

参考答案

#!/bin/bash
v=`awk -F ‘release ‘ ‘{print $2}‘ /etc/redhat-release |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 

题目要求

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

参考答案

#!/bin/bash
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>=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 "磁盘空间和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

题目要求

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

请写一个shell脚本去完成检测。检测完成后若是有新文件,还需要将新文件的列表输出到一个按年、月、日、时、分为名字的日志里。

要点
find -mmin -5
date +%Y%m%d%H%M

#!/bin/bash
basedir=/data/web/attachment
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 -lt 0 ]
then
mv /tmp/file.list /tmp/$t.list
fi

题目要求

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

参考答案

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

题目要求

假如需要每小时都去执行一个脚本。在脚本中实现这样的功能,当时间是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

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

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

shell习题-15

标签:shell   etc   linux系统   user   存在   日志   发邮件   done   通用   

原文地址:https://blog.51cto.com/865516915/2433138

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!