习题 1: 检测文件改动
要求: 有两台 Linux 服务器 A 和 B, 假如 A 可以直接 ssh 到 B, 不用输入密码 A 和 B 都有一个目录叫做 / data/web/ 这下面有很多文件, 当然我们不知道具体有几层子目录, 假若之前 A 和 B 上该目录下的文件都是一模一样的但现在不确定是否一致了固需要我们写一个脚本实现这样的功能, 检测 A 机器和 B 机器 / data/web / 目录下文件的异同, 我们以 A 机器上的文件作为标准比如, 假若 B 机器少了一个 a.txt 文件, 那我们应该能够检测出来, 或者 B 机器上的 b.txt 文件有过改动, 我们也应该能够检测出来 (B 机器上多了文件我们不用考虑)
提示: 提示: 使用核心命令 md5sum a.txt 算出 md5 值, 去和 B 机器上的比较
参考答案:
- #!/bin/bash
- # date:2018 年 3 月 15 日
- dir=/data/web
- B_ip=192.168.139.128
- find $dir -type f |xargs md5sum > /tmp/md5.txt
- ssh $B_ip "find $dir -type f |xargs md5sum > /tmp/md5_b.txt"
- scp $B_ip:/tmp/md5_b.txt /tmp
- for f in `awk '{print $2}' /tmp/md5.txt`
- do
- if grep -q "$f" /tmp/md5_b.txt
- then
- md5_a=`grep $f /tmp/md5.txt|awk '{print $1}'`
- md5_b=`grep $f /tmp/md5_b.txt|awk '{print $1}'`
- if [ $md5_a != $md5_b ]
- then
- echo "$f changed..."
- fi
- else
- echo "$f deleted..."
- fi
- done
习题 2: 判断是否开启 80 端口
要求: 写一个脚本判断你的 Linux 服务器里是否开启 web 服务?(监听 80 端口) 如果开启了, 请判断出跑的是什么服务, 是 httpd 呢还是 nginx 又或者是其他的什么?
参考答案:
- #!/bin/bash
- # date:2018 年 3 月 15 日
- port=`netstat -lnp|grep -w 80`
- if [ -z "$port" ];then
- echo "not service start!"
- exit;
- fi
- web_service=`echo $port|awk -F '/' '{print $2}'|awk -F ':' '{print $1}'`
- case $web_service in
- httpd)
- echo "apache server."
- ;;
- nginx)
- echo "nginx server."
- ;;
- *)
- echo "other server."
- ;;
- esac
习题 3: 监控 MySQL 服务
要求: 假设, 当前 MySQL 服务的 root 密码为 123456, 写脚本检测 MySQL 服务是否正常 (比如, 可以正常进入 mysql 执行 show processlist), 并检测一下当前的 MySQL 服务是主还是从, 如果是从, 请判断它的主从服务是否异常如果是主, 则不需要做什么
参考答案:
- #!/bin/bash
- # date:2018 年 3 月 15 日
- login="mysql -uroot -p123456"
- $login -e "show processlist" >/tmp/mysql_error.log 2>&1
- if [ $? -ne 0 ]
- then
- echo "MySQL server something wrong!"
- exit;
- else
- $login -e "show slave status\G" > /tmp/mysql_slave_status.log
- res=`wc -l /tmp/mysql_slave_status.log| awk '{print $1}'`
- if [ $res -gt 0 ]
- then
- y1=grep "Slave_IO_Running:" /tmp/mysql_slave_status.log |awk '{print $2}'
- y2=grep "Slave_SQL_Running:" /tmp/mysql_slave_status.log |awk '{print $2}'
- if [ "$y1" == "Yes" ] && [ "$y2" == "Yes" ]
- then
- echo "slave status good!"
- else
- echo "slave down!"
- fi
- fi
- fi
习题 4: 带选项的用户脚本
要求:
1 只支持三个选项 del add help 输入其他选项报错
2 使用 add 需要验证用户名是否存在, 存在则反馈存在且不添加 不存在则创建该用户, 切 > 添加与该用户名相同的密码并且反馈
3 使用 del 需要验证用户名是否存在, 存在则删除用户及其家目录不存在则反馈该用户不存 > 在
4 help 选项反馈出使用方法
5 支持以, 分隔 一次删除多个或者添加多个用户
6 能用 echo $? 检测脚本执行情况 成功删除或者添加为 0, 报错信息为其他数字
7 能以, 分割一次性添加或者 删除多个用户 例如 adddel.sh add user1,user2,user3.
8 不允许存在明显 bug
参考答案:
- #!/bin/bash
- # date:2018 年 3 月 15 日
- if [ $# -eq 0 -o $# -gt 2 ]
- then
- echo "Usage $0 --add username or $0 --del username or $0 --help."
- exit 1
- fi
- case $1 in
- --add)
- for u in `echo $2|sed 's/,/ /g'`
- do
- if awk -F ':' '{print $1}' /etc/passwd|grep -qw "$u"
- then
- echo "The user $u is exist."
- else
- useradd $u
- echo -e "$u\n$u"|passwd $u > /dev/null 2>&1
- echo "The user $u added successfully."
- fi
- done
- ;;
- --del)
- for u in `echo $2|sed -r 's/,/ /g'`
- do
- if awk -F ':' '{print $1}' /etc/passwd|grep -qw "$u"
- then
- userdel -r $u
- echo -e "The user $u deleted successfully."
- else
- echo "The user $u not exist."
- fi
- done
- ;;
- --help)
- echo -e "--add can add user,and the passwd is the same as username.\nIt can add multiuser such as --add user1,user2,user3..."
- echo -e "--del cat delete user.It can delete user such as --del user1,user2,user3..."
- ;;
- *)
- echo "Usage $0 --add username or $0 --del username or $0 --help."
- exit 1
- ;;
- esac
来源: http://www.bubuko.com/infodetail-2528187.html