16.输入数字执行命令
需求:
- 写个shell,看看你的linux系统中是否存在自定义用户(普通用户),若是有,一共有几个
核心要点:
- Centos6,uid>=500
- Centos7,uid >=1000
[root@Chauncey ~]# cat /etc/redhat-release ##判断系统版本,6,7,版本均可以使用此命令
CentOS release 6.9 (Final)
[root@Chauncey ~]# awk -F 'release' '{print $2}' /etc/redhat-release
6.9 (Final)
#####################非函数版######################
[root@Chauncey ~]# cat 16.sh
#!/bin/bash
v=`awk -F 'release''{print $2}' /etc/redhat-release |cut -d '.' -f1`
case $v in
5|6)
n=`awk -F ':' '$3>==500' /etc/passwd`
if [ $n -eq 0 ]
then
echo "system meiyouzidingyideyonghu"
else
echo "xitongyouzidingyideyonghu,you$n"
fi
;;
7)
n=`awk -F ':' '$3>=1000' /etc/passwd`
if [ $n -eq 0 ]
then
echo "xitongmeiyouzidingyiyonghu"
else
echo "xitongcunzaizidingyiyonghu,you$n"
fi
;;
*)
echo "jiaobenchucuo."
;;
esac
###################函数版######################
[root@Chauncey ~]# cat 16.sh
#!/bin/bash
v=`awk -F 'release' '{print $2}' /etc/redhat-release |cut -d '.' -f1`
user()
{
if [ $1 -eq 0 ]
then
echo "system meiyouzidingyideyonghu"
else
echo "xitongyouzidingyideyonghu,you$n"
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 "jiaobenchucuo."
;;
esac
17.检测磁盘
需求:
- 写个shell,检测所有磁盘分区使用率和inode的使用率并记录到以当天日期为命令的日志文件里,当发现某个分区容量或者inode的使用量大于85%时,发邮件通知你自己
核心要点:
- df
- df -i
- date +%F
[root@Chauncey ~]# cat 17.sh
#!/bin/bash
dir=/tmp/disk
d=`date +%F`
[email protected]
[ -d $dir ] || mkdir $dir ###判断日志文件的路径是否存在,不存在即创建
df >> $dir/$d.log
df -i >> $dir/$d.log
df|sed '1d' | sed -r 's/%//g'|awk -F '.' '{print $1}'|awk '$5<=85 {print $6}' > $dir/df.tmp
df -i|sed '1d' | sed -r 's/%//g'|awk -F '.' '{print $1}'|awk '$5<=85 {print $6}' > $dir/df_1.tmp
n1=`wc -l $dir/df.tmp|awk '{print $1}'`
n2=`wc -l $dir/df_1.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 "cipankongjianheinodeshiyonglvgaoyu85%" "`cat $dir/df.tmp $dir/df_1.tmp|xargs`"
;;
10)
python mail.py $mail "cipankongjianshiyonglvgaoyu85%" "`cat $dir/df.tmp|xargs`"
;;
01)
python mail.py $mail "inodeshiyonglvgaoyu85%" "`cat $dir/df_1.tmp|xargs`"
;;
*)
;;
esac
[root@Chauncey ~]#
18.检测新文件
需求:
- 有一台服务器作为web应用,有一个目录(/data/web/attachment)不定时的会被用户上传新文件,但是不知道什么时候上传。所以,需要我们每5分钟做一次检测是否有新文件生成。请写一个shell脚本去完成检测。检测完成后若是有新文件,还需要将新文件的列表输出到一个按年、月、日、时、分为名字的日志里。
核心要点:
- find -mmin -5 查找5分钟内的文件
- date +%Y%m%d%H%M
[root@Chauncey ~]# cat 18.sh
#!/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
[root@Chauncey ~]#
19.最常用的命令
需求:
- 写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top 10
核心要点:
- history或者~/.bash_history,sort,uniq
#!/bin/bash
cat ~/.bash_history |sort |uniq -c |sort -nr |head
20.统计文件大小
需求:
- 每小时执行一个脚本。脚本功能:当0点和12点时,将目录/data/log/下的文件全部清空,只清空文件内容,不清空文件。其他时间只需要统计每个文件的大小,一个文件一行,输出到一个以日期和时间为名字的日志里。需要考虑/data/log/目录下的二级,三级 ... 等子目录的文件。
核心要点:
- find列出所有文件
- date +%H
- >file 清空文件
[root@Chauncey ~]# cat 20.sh
#!/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" $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
[root@Chauncey ~]#