1. 程式人生 > >腳本實現一鍵部署Nginx軟件(Web服務器):

腳本實現一鍵部署Nginx軟件(Web服務器):

repo oca disk 計算 failed 數字 參數 開啟 use

案例1:編寫一鍵部署軟件腳本 案例2:啟動腳本 案例3:編寫監控腳本 案例4:編寫安全檢測腳本 案例5:編寫進度顯示腳本

1 案例1:編寫一鍵部署軟件腳本
1.1 問題

本案例要求編寫腳本實現一鍵部署Nginx軟件(Web服務器):

一鍵源碼安裝Nginx軟件
腳本自動安裝相關軟件的依賴包
腳本自動判斷yum是否可用

1.2 步驟

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

步驟一:準備工作

1)判斷yum源是否可用

通過yum repolist查看軟件包數量是否大於0:

[root@svr5 ~]# yum repolist 
[root@svr5 ~]# yum repolist | awk ‘/repolist/{print $2}‘ 
[root@svr5 ~]# yum repolist | awk ‘/repolist/{print $2}‘ |sed ‘s/,//‘
[root@svr5 ~]# N=$(yum repolist | awk ‘/repolist/{print $2}‘ |sed ‘s/,//‘)
[root@svr5 ~]# [ $N –le 0 ] && echo ‘yum 不可用‘

2)依賴包

源碼安裝Nginx需要提前安裝依賴包軟件gcc,openssl-devel,pcre-devel

步驟二:編寫腳本

1)參考腳本內容如下:

[root@svr5 ~]# 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 主程序目錄

主程序命令參數:

[root@svr5 ~]# /usr/local/nginx/sbin/nginx                //啟動服務
[root@svr5 ~]# /usr/local/nginx/sbin/nginx    -s stop        //關閉服務
[root@svr5 ~]# /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)參考腳本內容如下:

[root@svr5 ~]# 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)執行測試腳本:

[root@svr5 ~]# ./test.sh start
[root@svr5 ~]# ./test.sh stop
[root@svr5 ~]# ./test.sh status
[root@svr5 ~]# ./test.sh xyz

3 案例3:編寫監控腳本
3.1 問題

本案例要求編寫腳本,實現計算機各個性能數據監控的功能,具體監控項目要求如下:

CPU負載
網卡流量
內存剩余容量
磁盤剩余容量
計算機賬戶數量
當前登錄賬戶數量
計算機當前開啟的進程數量
本機已安裝的軟件包數量

3.2 步驟

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

步驟一:準備工作

1)查看性能數據的命令

[root@svr5 ~]# uptime                            //查看CPU負載
[root@svr5 ~]# ifconfig eth0                    //查看網卡流量
[root@svr5 ~]# free                            //查看內存信息
[root@svr5 ~]# df                                //查看磁盤空間
[root@svr5 ~]# wc -l /etc/passwd                //查看計算機賬戶數量
[root@svr5 ~]# who |wc -l                        //查看登錄賬戶數量
[root@svr5 ~]# rpm -qa |wc -l                    //查看已安裝軟件包數量

步驟二:編寫參考腳本

1)腳本內容如下:

[root@svr5 ~]# 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)

[root@svr5 ~]# awk ‘/Invalid user/{print $10}‘ /var/log/secure

2)過濾密碼失敗的命令

[root@svr5 ~]# awk ‘/Failed password/{print $11}‘ /var/log/secure

步驟二:編寫參考腳本

1)腳本內容如下:

[root@svr5 ~]# 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)腳本內容如下:

[root@svr5 ~]# vim test.sh
#!/bin/bash
jindu(){
while :
do
    echo -ne ‘\033[43m \033[0m‘
        sleep 0.3
done
}
jindu &
cp -r  $1  $2
kill $!

腳本實現一鍵部署Nginx軟件(Web服務器):