1. 程式人生 > >07: 專案實戰

07: 專案實戰

Top

NSD SHELL DAY07

  1. 案例1:編寫一鍵部署軟體指令碼
  2. 案例2:啟動指令碼
  3. 案例3:編寫監控指令碼
  4. 案例4:編寫安全檢測指令碼
  5. 案例5:編寫進度顯示指令碼

1 案例1:編寫一鍵部署軟體指令碼

1.1 問題

本案例要求編寫指令碼實現一鍵部署Nginx軟體(Web伺服器):

  • 一鍵原始碼安裝Nginx軟體
  • 指令碼自動安裝相關軟體的依賴包
  • 指令碼自動判斷yum是否可用

1.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:準備工作

1)判斷yum源是否可用

通過yum repolist檢視軟體包數量是否大於0:

 
  1. [[email protected] ~]# yum repolist
  2. [[email protected] ~]# yum repolist | awk '/repolist/{print $2}'
  3. [[email protected] ~]# yum repolist | awk '/repolist/{print $2}' |sed 's/,//'
  4. [[email protected] ~]# N=$(yum repolist | awk '/repolist/{print $2}' |sed 's/,//')
  5. [[email protected]
    ~]# [ $N –le 0 ] && echo 'yum 不可用'

2)依賴包

原始碼安裝Nginx需要提前安裝依賴包軟體gcc,openssl-devel,pcre-devel

步驟二:編寫指令碼

1)參考指令碼內容如下:

 
  1. [[email protected] ~]# vim test.sh
  2. #!/bin/bash
  3.  
  4. N=$(yum repolist | awk '/repolist/{print $2}' | sed 's/,//')
  5. if [ $N -le 0 ];then
  6.     echo "yum 不可用"
  7.     exit
  8. fi
  9. yum -y install gcc openssl-devel pcre-devel
  10. tar -xf nginx-1.12.2.tar.gz
  11. cd nginx-1.12.2
  12. ./configure
  13. make
  14. make install

2)確認安裝效果

Nginx預設安裝路徑為/usr/local/nginx,該目錄下會提供4個子目錄,分別如下:

/usr/local/nginx/conf 配置檔案目錄

/usr/local/nginx/html 網站頁面目錄

/usr/local/nginx/logs Nginx日誌目錄

/usr/local/nginx/sbin 主程式目錄

主程式命令引數:

 
  1. [[email protected] ~]# /usr/local/nginx/sbin/nginx                //啟動服務
  2. [[email protected] ~]# /usr/local/nginx/sbin/nginx    -s stop        //關閉服務
  3. [[email protected] ~]# /usr/local/nginx/sbin/nginx    -V            //檢視軟體資訊

2 案例2:啟動指令碼

2.1 問題

本案例要求編寫Ngin啟動指令碼,要求如下:

  • 指令碼支援start、stop、restart、status
  • 指令碼支援報錯提示
  • 指令碼具有判斷是否已經開啟或關閉的功能

2.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:編寫指令碼

指令碼通過位置變數$1讀取使用者的操作指令,判斷是start、stop、restart還是status。

netstat命令可以檢視系統中啟動的埠資訊,該命令常用選項如下:

-n以數字格式顯示埠號

-t顯示TCP連線的埠

-u顯示UDP連線的埠

-l顯示服務正在監聽的埠資訊,如httpd啟動後,會一直監聽80埠

-p顯示監聽埠的服務名稱是什麼(也就是程式名稱)

1)參考指令碼內容如下:

 
  1. [[email protected] ~]# vim test.sh
  2. #!/bin/bash
  3.  
  4. case $1 in
  5. start)
  6.         /usr/local/nginx/sbin/nginx;;
  7. stop)
  8.         /usr/local/nginx/sbin/nginx -s stop;;
  9. restart)
  10.         /usr/local/nginx/sbin/nginx -s stop
  11.         /usr/local/nignx/sbin/nginx;;
  12. status)
  13.         netstat -ntulp |grep -q nginx
  14.         if [ $? -eq 0 ];then
  15. echo 服務已啟動
  16. else
  17. echo 服務未啟動
  18. fi;;
  19. *)
  20.         echo Error;;
  21. esac

2)執行測試指令碼:

 
  1. [[email protected] ~]# ./test.sh start
  2. [[email protected] ~]# ./test.sh stop
  3. [[email protected] ~]# ./test.sh status
  4. [[email protected] ~]# ./test.sh xyz

3 案例3:編寫監控指令碼

3.1 問題

本案例要求編寫指令碼,實現計算機各個效能資料監控的功能,具體監控專案要求如下:

  • CPU負載
  • 網絡卡流量
  • 記憶體剩餘容量
  • 磁碟剩餘容量
  • 計算機賬戶數量
  • 當前登入賬戶數量
  • 計算機當前開啟的程序數量
  • 本機已安裝的軟體包數量

3.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:準備工作

1)檢視效能資料的命令

 
  1. [[email protected] ~]# uptime                            //檢視CPU負載
  2. [[email protected] ~]# ifconfig eth0                    //檢視網絡卡流量
  3. [[email protected] ~]# free                            //檢視記憶體資訊
  4. [[email protected] ~]# df                                //檢視磁碟空間
  5. [[email protected] ~]# wc -l /etc/passwd                //檢視計算機賬戶數量
  6. [[email protected] ~]# who |wc -l                        //檢視登入賬戶數量
  7. [[email protected] ~]# rpm -qa |wc -l                    //檢視已安裝軟體包數量

步驟二:編寫參考指令碼

1)指令碼內容如下:

 
  1. [[email protected] ~]# vim test.sh
  2. #!/bin/bash
  3. ip=`ifconfig eth0 | awk '/inet /{print $2}'`
  4. echo "本地IP地址是:"$ip
  5. cpu=`uptime | awk '{print $NF}'`
  6. #awk中NF為當前行的列數,$NF是最後一列
  7. echo "本機CPU最近15分鐘的負載是:"$cpu
  8. net_in=`ifconfig eth0 | awk '/RX p/{print $5}'`
  9. echo "入站網絡卡流量為:"$net_in
  10. net_out=`ifconfig eth0 | awk '/TX p/{print $5}'`
  11. echo "出站網絡卡流量為:"$net_out
  12. mem=`free | awk '/Mem/{print $4}'`
  13. echo "記憶體剩餘容量為:"$mem
  14. disk=`df | awk '/\/$/{print $4}'`
  15. echo "根分割槽剩餘容量為:"$disk
  16. user=`cat /etc/passwd |wc -l`
  17. echo "本地賬戶數量為:"$user
  18. login=`who | wc -l`
  19. echo "當前登陸計算機的賬戶數量為:"$login
  20. process=`ps aux | wc -l`
  21. echo "當前計算機啟動的程序數量為:"$process
  22. soft=`rpm -qa | wc -l`
  23. echo "當前計算機已安裝的軟體數量為:"$soft

4 案例4:編寫安全檢測指令碼

4.1 問題

本案例要求編寫指令碼,防止遠端ssh暴力破解密碼,具體監控專案要求如下:

  • 檢測ssh登入日誌,如果遠端登陸賬號名錯誤3次,則遮蔽遠端主機的IP
  • 檢測ssh登入日誌,如果遠端登陸密碼錯誤3次,則遮蔽遠端主機的IP

4.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:準備工作

1)過濾帳戶名失敗的命令(登陸日誌檔案為/var/log/secure)

 
  1. [[email protected] ~]# awk '/Invalid user/{print $10}' /var/log/secure

2)過濾密碼失敗的命令

 
  1. [[email protected] ~]# awk '/Failed password/{print $11}' /var/log/secure

步驟二:編寫參考指令碼

1)指令碼內容如下:

 
  1. [[email protected] ~]# vim test.sh
  2. #!/bin/bash
  3. awk '/Failed password/{print $11}' /var/log/secure | awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' | awk '$1>3{print $2}'
  4.  
  5. awk '/Invalid user/{print $10}' /var/log/secure | awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' | awk '$1>3{print $2}'

5 案例5:編寫進度顯示指令碼

5.1 問題

本案例要求編寫指令碼,實現帶程序顯示的複製指令碼,具體要求如下:

  • 預設Linux的cp命令不具有進度顯示
  • 我們需要自己編寫指令碼實現進度顯示
  • 可以使用進度條的方式,或者顯示百分比的方式

5.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:編寫參考指令碼

1)指令碼內容如下:

 
  1. [[email protected] ~]# vim test.sh
  2. #!/bin/bash
  3. jindu(){
  4. while :
  5. do
  6.     echo -ne '\033[43m \033[0m'
  7.      sleep 0.3
  8. done
  9. }
  10. jindu &
  11. cp -r $1 $2
  12. kill $!