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
115、
116、
117、
118、
119、
120、