引言:我的系列博客[網絡安全學習篇]上線了,小編也是初次創作博客,經驗不足;對千峯網絡信息安全開源的視頻公開課程的學習整理的筆記整理的也比較粗糙,其實看到目錄有300多集的時候,講道理,有點慫了,所以我就想到了通過寫博客(課程筆記)的形式去學習它,雖然寫博客會讓我多花幾倍的時間去學習它,但是當我完成一篇博客所獲得的成就感和你們對於我的認同感,讓我很滿足,能夠鼓勵我一天天的堅持下去,也希望和我一起學習本期視頻的"同道"們也能給一直堅持下去。我們大家一起加油。由於作者本身也是網絡信息安全小白,大部分知識點都是初次接觸,出現對其理解不深入,不完整,甚至也會出現錯誤有問題的地方,希望大家諒解、留言提出指正,同時也歡迎大家來找我一起交流學習!!!
往期博客:
第一階段:
[網絡安全學習篇1]:windowsxp、windows2003、windows7、windows2008系統部署(千峯網絡安全視頻筆記)
[網絡安全學習篇24]:漏洞與木馬(千峯網絡安全視頻筆記 p117-p118)
第二階段:
[網絡安全學習篇26]:Linux下的命令幫助、壓縮、vim、軟件安裝的學習
[網絡安全學習篇27]:Linux操作系統的用戶和組、文件及目錄權限(千峯網絡安全視頻筆記 p134-p139)
[網絡安全學習篇28]:網絡地址的配置 日誌文件的管理、備份及日誌服務器的搭建
[網路安全學習篇30]:Nginx和Tomcat服務的搭建、Nginx+Tomcat負載均衡的實現
[網絡安全學習篇31]:Linux 防火牆 iptables 中 filter(包過濾防火牆)和 nat(路由轉換)詳解
[網絡安全學習篇32]:Linux腳本編寫彙總及應用(本篇)
寫到這裏,我們千峯網絡安全的第二個階段的學習就到此結束了,學完Linux操作系統之後,感覺學習效果不太好,後期我打算專門出一期Linux的彙總,也算是再強化一下吧,畢竟對於我們學安全的,尤其是後面的滲透測試這一塊,對Linux的功底要高。
下期博文:
第三階段:
目錄
腳本
Linux中的腳本其實就類似我們在windows系統中編寫的批處理,那麼我們如何去學習他呢?
我們這裏主要通過應對各種場景的要求,編寫相應的腳本去實現的過程中,我們去一步步的認識腳本編寫的各種語法。這些語法的含義其實在我們以前學過的編程語言中,已經瞭解了。這裏,我們主要是瞭解和學習其語法結構即可,你會發現,學起來非常輕鬆,也很有意思......
一個簡單的腳本
場景設定如下:
上午9點 要求設定eth0網卡 ip
192.168.1.100/24
192.168.1.254
下午2點要求設定eth0網卡 ip
172.16.1.100/24
172.16.1.254
實現流程
新建一個文件
- vim fixip.sh
#!/bin/bash
cd etc/sysconfig/network-scripts/
echo
echo "DEVICE=eth0" > ifcfg-eth0
echo "TYPE=Ethernet" >> ifcfg-eth0
echo "ONBOOT=yes" >> ifcfg-eth0
echo "BOOTPROTO=static" >> ifcfg-eth0
echo "IPADDR=192.168.1.100" >> ifcfg-eth0
echo "NATMASK=255.255.255.0" >> ifcfg-eth0
echo "GATEWAY=192.168.1.254" >> ifcfg-eth0
ifdown eth0
ifup eth0
這裏解釋以下:
#!bin/bash 指定用bash解釋器來解釋腳本語言
添加運行權限
- chmod +x fixip.sh
執行(在當前目錄下)
- ./fixip.sh
公司會隨機指定不同的ip進行修改
優化腳本爲交互式腳本,就引出了我們下面要講的變量賦值
變量賦值
首先,我們來看一下這幾行命令,執行之後的結果
A 顧名思義就是我們定義的變量了,我們給其賦值,再通過$A調出它所表示的值(字符串)
read指令 結合我們的變量,就可以實現將用戶輸入的值賦給變量的過程
結構:
read -p " " 變量
通過我們的變量和read對前面的腳本進行優化升級,使其更實用且貼合人性化
#!/bin/bash
read -p "please input ipaddr:"IP
read -p "please input netmask:"MASK
read -p "please input gateway:"WAY
cd etc/sysconfig/network-scripts/
echo
echo "DEVICE=eth0" > ifcfg-eth0
echo "TYPE=Ethernet" >> ifcfg-eth0
echo "ONBOOT=yes" >> ifcfg-eth0
echo "BOOTPROTO=static" >> ifcfg-eth0
echo "IPADDR=$IP" >> ifcfg-eth0
echo "NATMASK=$MASK" >> ifcfg-eth0
echo "GATEWAY=$WAY" >> ifcfg-eth0
ifdown eth0
ifup eth0
注:添加變量之後,echo後面必須是雙引號,不能是單引號了
變量前面不要忘了加$
if判斷語句
結構
if單分支結構
if 條件
then 成立子語句
fi
if 雙分支結構
if 條件
then 成立子語句
else 不成立子語句
fi
if 多分支結構
if 條件
then 成立子語句
elif 條件
then 成立子語句
else 不成立子語句
fi
實例
接下來我們編寫一個簡單的單分支判斷腳本
注:Linux中 大於 -gt 小於 -lt 等於 -eq
同樣,先創建一個sh文件
- vim if.sh
#!/bin/bash
if [ 3 -lt 5 ]
then echo "yes"
fi
賦權
- chmod +x if.sh
再來看一個多分支的例子
#!/bin/bash
read -p "please input a num:"NUM
if [ $NUM -lt 5 ]
then echo "lt"
elif [ $NUM -eq 10 ]
then echo "eq"
else echo "gt"
fi
檢測內網主機存活狀態
我們平時的ping操作,我們可以對其進行修飾,改變其特定的輸出顯示:
-c 指定其發送幾個包
-i 發間隔時間
-w 等待響應時間
那我們的ping語句的結果可以作爲if的條件嗎?可以
我們要將其輸出的結果不顯示
&> 文件 將前面的輸出結果導入到別的地方
- ping -c2 -i0.2 -w2 12.34.56.78 &> /dev/null
新建一個文件ping.sh
- vim ping.sh
#!/bin/bash
if `ping -c2 -i0.2 -w2 12.34.56.79 &> /dev/null`
then echo "yes"
else echo "no"
fi
注:` 這個符號如何在鍵盤上打出 英文狀態下:鍵盤上數字鍵1的左邊
同樣賦權執行
- chmod +x ping.sh
這裏提前聲明以下,我們ping的這個ip原來就是通的
優化:
#!/bin/bash
read -p "please input ipaddr:"IP
if `ping -c2 -i0.2 -w2 $IP &> /dev/null`
then echo "$IP is up"
else echo "$IP is down"
fi
測試成功
侷限性:
我們測試一個主機可以,但是一個網段就不行了
這就要用到我們的循環,下面,我們就來介紹循環語句
循環語句 for wile
for和wile的區別
for 根據循環的次數(取值列表)循環
wile 根據條件循環
我們在屏幕上直接輸出{1..10},就可以得到以下結果
for格式
for 變量 in 取值列表
do
子語句
done
for實例
簡單的循環腳本
- vim xun.sh
我相信大家在之前已經接觸過編程語言了,我就不做詳細著述了,直接上代碼
#!/bin/bash
for i in {1..10}
do
echo $i
done
wile格式
while 條件
do
子語句
done
while實例
#!/bin/bash
NUM=0
while [ $NUM -lt 3 ]
do
let NUM++
echo $NUM
done
注:let NUM++ 相當於 let NUM=NUM+!
檢測內網主機存活裝態(升級)
繼續我們回到前面的探測主機存活,這一次我們要實現在真實的環境中,探測局域網的主機存活狀態
將我們的網絡屬性配置到橋接模式
修改網卡配置
- vim /etc/sysconfig/network-scripts/ifcfg-eth0
- ifdown eth0
- ifup eth0
- vim ping.sh
for實現
#!/bin/bash
NET=10.0.110.
for i in {1..254}
do
if `ping -c2 -i0.2 -w2 $NET$IP &> /dev/null`
then echo -e "$NET$IP is \033[31mup\033[0m"
else echo -e "$NET$IP is \033[32mdown\033[0m"
fi
done
while實現:
#!/bin/bash
NET=10.0.110.
IP=200
while [$IP -lt 254 ]
lxxxet IP=IP+1
if `ping -c2 -i0.2 -w2 $NET$IP &> /dev/null`
then echo -e "$NET$IP is \033[31mup\033[0m"
else echo -e "$NET$IP is \033[32mdown\033[0m"
fi
done
case語句
案例
./case.sh centos
redhat
./case.sh redhat
centos
./case xxxx
usage case.sh {redhat|centos}
使用case語句實現以上案例
case $1 in
redhat)
echo "centos"
;;
centos)
echo "redhat"
;;
*)
echo "Usage $0 {redhat|centos}"
esac
賦權
- chmod +x case.sh
case格式
case 變量 in
模式1)
子語句
;;
*)
子語句
;;
esac
函數
將一部分代碼存儲到一個變量中
設計一個函數名字爲A
運行A時屏幕輸出OK
可以通過
echo $?
得到函數的返回值(return)
探測內網主句存活狀態(再升級)
繼續我們回到前面的探測主機存活,這一次我們要實現在真實的環境中,探測局域網的所有主機存活狀態
redhat(){
echo cetos
return 0
}
centos(){
echo redhat
return 0
}
case $1 in
redhat)
redhat
;;
centos)
centos
;;
*)
echo "Usage $0 {redhat|centos}"
esac
分析apache自啓動腳本
apache的啓動函數
apache的關閉函數
這些是不是看起來很熟悉,都是我們前面學的編寫的
接下來我們就來編寫nginx的自啓動腳本
Nginx自啓動腳本
首先我們要在/etc/init.d/目錄下編寫我們Nginx的啓動腳本nginxd
#!/bin/bash
nginx=/usr/local/nginx/sbin/nginx
start(){
echo "nginx starting .... [OK] "
$nginx
}
start
優化:
#!/bin/bash
nginx=/usr/local/nginx/sbin/nginx
start(){
echo "nginx starting .... [OK] "
$nginx
}
status(){
if `ss -antpl | grep nginx > /dev/null`
then echo "nginx starting .... "
else echo "nginx stoping .... "
fi
}
stop(){
echo "nginx stoping .... [OK] "
$nginx -s stop}
case $1 in
start)
start
;;
stop)
stop
;;
restart
stop
start
;;
*)
echo "Usage :$0 {start|stop|restart}"
esac
接下來,我們讓它永久啓動
打開我們編寫好的nginxd腳本,添加下面兩行
加入chkconfig list
- chkconfig --add nginxd
默認都是關閉的off
我們將5級別打開on
- chkconfig --list nginxd on
好了,我們的5級別已經開啓了
接下來,我們重啓操作系統
- reboot
可以看到我們的nginx已經自啓動了
參考文獻: