07: 專案實戰
NSD SHELL DAY07
1 案例1:編寫一鍵部署軟體指令碼
1.1 問題
本案例要求編寫指令碼實現一鍵部署Nginx軟體(Web伺服器):
- 一鍵原始碼安裝Nginx軟體
- 指令碼自動安裝相關軟體的依賴包
- 指令碼自動判斷yum是否可用
1.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:準備工作
1)判斷yum源是否可用
通過yum repolist檢視軟體包數量是否大於0:
- [[email protected] ~]# yum repolist
- [[email protected] ~]# yum repolist | awk '/repolist/{print $2}'
- [[email protected] ~]# yum repolist | awk '/repolist/{print $2}' |sed 's/,//'
- [[email protected] ~]# N=$(yum repolist | awk '/repolist/{print $2}' |sed 's/,//')
- [[email protected]
2)依賴包
原始碼安裝Nginx需要提前安裝依賴包軟體gcc,openssl-devel,pcre-devel
步驟二:編寫指令碼
1)參考指令碼內容如下:
- [[email protected] ~]# vim test.sh
- #!/bin/bash
- N=$(yum repolist | awk '/repolist/{print $2}' | sed 's/,//')
- if [ $N -le 0 ];then
- echo "yum 不可用"
- exit
- fi
- yum -y install gcc openssl-devel pcre-devel
- tar -xf nginx-1.12.2.tar.gz
- cd nginx-1.12.2
- ./configure
- make
- 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 主程式目錄
主程式命令引數:
- [[email protected] ~]# /usr/local/nginx/sbin/nginx //啟動服務
- [[email protected] ~]# /usr/local/nginx/sbin/nginx -s stop //關閉服務
- [[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)參考指令碼內容如下:
- [[email protected] ~]# vim test.sh
- #!/bin/bash
- case $1 in
- start)
- /usr/local/nginx/sbin/nginx;;
- stop)
- /usr/local/nginx/sbin/nginx -s stop;;
- restart)
- /usr/local/nginx/sbin/nginx -s stop
- /usr/local/nignx/sbin/nginx;;
- status)
- netstat -ntulp |grep -q nginx
- if [ $? -eq 0 ];then
- echo 服務已啟動
- else
- echo 服務未啟動
- fi;;
- *)
- echo Error;;
- esac
2)執行測試指令碼:
- [[email protected] ~]# ./test.sh start
- [[email protected] ~]# ./test.sh stop
- [[email protected] ~]# ./test.sh status
- [[email protected] ~]# ./test.sh xyz
3 案例3:編寫監控指令碼
3.1 問題
本案例要求編寫指令碼,實現計算機各個效能資料監控的功能,具體監控專案要求如下:
- CPU負載
- 網絡卡流量
- 記憶體剩餘容量
- 磁碟剩餘容量
- 計算機賬戶數量
- 當前登入賬戶數量
- 計算機當前開啟的程序數量
- 本機已安裝的軟體包數量
3.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:準備工作
1)檢視效能資料的命令
- [[email protected] ~]# uptime //檢視CPU負載
- [[email protected] ~]# ifconfig eth0 //檢視網絡卡流量
- [[email protected] ~]# free //檢視記憶體資訊
- [[email protected] ~]# df //檢視磁碟空間
- [[email protected] ~]# wc -l /etc/passwd //檢視計算機賬戶數量
- [[email protected] ~]# who |wc -l //檢視登入賬戶數量
- [[email protected] ~]# rpm -qa |wc -l //檢視已安裝軟體包數量
步驟二:編寫參考指令碼
1)指令碼內容如下:
- [[email protected] ~]# vim test.sh
- #!/bin/bash
- ip=`ifconfig eth0 | awk '/inet /{print $2}'`
- echo "本地IP地址是:"$ip
- cpu=`uptime | awk '{print $NF}'`
- #awk中NF為當前行的列數,$NF是最後一列
- echo "本機CPU最近15分鐘的負載是:"$cpu
- net_in=`ifconfig eth0 | awk '/RX p/{print $5}'`
- echo "入站網絡卡流量為:"$net_in
- net_out=`ifconfig eth0 | awk '/TX p/{print $5}'`
- echo "出站網絡卡流量為:"$net_out
- mem=`free | awk '/Mem/{print $4}'`
- echo "記憶體剩餘容量為:"$mem
- disk=`df | awk '/\/$/{print $4}'`
- echo "根分割槽剩餘容量為:"$disk
- user=`cat /etc/passwd |wc -l`
- echo "本地賬戶數量為:"$user
- login=`who | wc -l`
- echo "當前登陸計算機的賬戶數量為:"$login
- process=`ps aux | wc -l`
- echo "當前計算機啟動的程序數量為:"$process
- soft=`rpm -qa | wc -l`
- echo "當前計算機已安裝的軟體數量為:"$soft
4 案例4:編寫安全檢測指令碼
4.1 問題
本案例要求編寫指令碼,防止遠端ssh暴力破解密碼,具體監控專案要求如下:
- 檢測ssh登入日誌,如果遠端登陸賬號名錯誤3次,則遮蔽遠端主機的IP
- 檢測ssh登入日誌,如果遠端登陸密碼錯誤3次,則遮蔽遠端主機的IP
4.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:準備工作
1)過濾帳戶名失敗的命令(登陸日誌檔案為/var/log/secure)
- [[email protected] ~]# awk '/Invalid user/{print $10}' /var/log/secure
2)過濾密碼失敗的命令
- [[email protected] ~]# awk '/Failed password/{print $11}' /var/log/secure
步驟二:編寫參考指令碼
1)指令碼內容如下:
- [[email protected] ~]# vim test.sh
- #!/bin/bash
- 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}'
- 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)指令碼內容如下:
- [[email protected] ~]# vim test.sh
- #!/bin/bash
- jindu(){
- while :
- do
- echo -ne '\033[43m \033[0m'
- sleep 0.3
- done
- }
- jindu &
- cp -r $1 $2
- kill $!