shell实例100例《十二》

111、设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。 参考答案:

(1)编写shell程序fileback:
#!/bin/sh
DIRNAME=`ls /root | grep bak`
if [ -z "$DIRNAME" ] ; then
mkdir /root/bak
cd /root/bak
fi
YY=`date +%y`
MM=`date +%m`
DD=`date +%d`
BACKETC=$YY$MM$DD_etc.tar.gz
tar zcvf $BACKETC /etc
echo "fileback finished!"
(2)编写任务定时器:
echo "0 0 1 * * /bin/sh /usr/bin/fileback" >; /root/etcbakcron
crontab /root/etcbakcron
或使用crontab -e 命令添加定时任务:
0 1 * * * /bin/sh /usr/bin/fileback

 

112、有10台被监控主机,一台监控机,在监控机上编写脚本,一旦某台监控机器/分区使用率大于80%,就发出报警,放到crontab里面,每10分钟检查一次。

(1)首先,建立信任关系 1 VS 10. 但拿两台机器(192.168.1.6,192.168.1.4)做试验

#ssh-keggen -b 1024 -t rsa  //(以root用户)

#cd .ssh/

#ls

id_rsa

id_rsa.pub

knows_host

#scp id_rsa.pub 192.168.1.4:/root/.ssh/192.168.1.6

这里把公钥取名为可信任主机的IP地址

现在登录到192.168.1.4机器

#cd .ssh/

#cat 192.168.1.6 >> authorized_keys

然后回到192.168.1.6机器。

#ssh 192.168.1.4

这样就可以了,里面可能涉及到权限问题。一般.ssh/文件夹为755,authorized_keys 600或644
(2)脚本如下:

#!/bin/sh

#script:df_check.sh

FSMAX="80"

remote_user='root'

remote_ip=(192.168.1.2 192.168.1.3 192.168.1.4 .......)   //十个ip地址

ip_num='0'

while [ "$ip_num" -le "$(expr ${#remote_ip[@]} - 1)" ]

do

read_num='1'

ssh "$remote_user"@"${remote_ip[$ip_num]}" df -h >/tmp/diskcheck_tmp

grep '^/dev/*' /tmp/diskcheck_tmp|awk '{print $5}'|sed 's/\%//g' >

/tmp/diskcheck_tmp_num

while [ "$read_num" -le $(wc -l < /tmp/diskcheck_tmp_num)] //计算有多少行

do

size=$(sed -n "$read_num"'p' /tmp/diskcheck_tmp_num)

if [ "$size" -gt "$FSMAX" ]

then

$(grep '^/dev/*' /tmp/diskcheck_tmp|sed -n $read_num'p' >

/tmp/disk_mail)

$(echo $(remote_ip[$ip_num]) >> /tmp/disk_mail)

$(mail -s "diskcheck_alert" admin </tmp/disk_mail)

fi

read_num=$(expr $read_num + 1)

done

ip_num=$(expr $ip_num + 1)

done

(3)放在crontab里面

#######################################################################

################让脚本每十分钟执行一次#################################

在cron表中:

0/10 * * * * /home/codefei/diskcheck.sh 2>&1

 

113、 用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下。 参考程序:

#!/bin/sh
FILENAME=
echo “Input file name:”
read FILENAME
if [ -c "$FILENAME" ]
then

cp $FILENAME /dev
fi

 

114、给root用户写欢迎登陆脚本

#!/bin/bash
if [ $USER == "root" ]
   then
     echo "欢迎登陆!"
    aaa=`ps -aux | wc -l`
     echo "当前进程:$aaa"
    bbb=`who | wc -l`
     echo "当前登陆人数:$bbb"
    ccc=`df | grep "/$" | awk '{print $5}'`
     echo "当前根分区已使用:$ccc"
fi

32ae0c007006ffcea8b21717d8638ce10f2.jpg

 

115、

 

 

116、

 

 

117、

 

 

118、

 

 

119、

 

 

120、

 

 

 

转载于:https://my.oschina.net/u/3803405/blog/3096750

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值