Shell練習(十二)
要求:有兩臺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
Shell練習(十二)