實操 : shell編程實戰

前言

  • mac記錄與端口掃描腳本
  • 開發系統監控腳本

一 : 腳本編程步驟分享

1.1 腳本編程步驟

1.2 需求分析

  • 根據系統管理的需求,分析腳本要實現的功能、功能實現的層次、實現的命令與語句等

1.3 命令測試

  • 將要用到的命令逐個進行測試,以決定使用的選項、要設置的變量等

1.4 腳本編程

  • 將測試好的命令寫入到腳本文件中,並通過各種語句將命令執行的結果保存、判斷或者發出報警等

1.5 調試優化

  • 對腳本進行測試,並根據結果進行優化
  • 建議一遍編程一邊調試,以減少錯誤的發生

二 : mac記錄與端口掃描腳本

2.1 企業環境說明

  • 隨着業務的不斷髮展,某公司所使用的Linux服務器也越來越多。在系統管理和維護過程中,經常需要編寫一些使用的小腳本,以輔助運維工作,提高工作效率

2.2 需求描述

  • 編寫名爲system.sh的小腳本,記錄局域網中各主機的mac地址,保存到/etc/ethers文件中;若此文件已存在,應先轉移進行備份;每行一條記錄,第一列爲ip地址,第二列爲對應的mac地址
  • 檢查有哪些主機開啓了匿名ftp服務,掃描對象爲/etc/ethers文件的所有ip地址,掃描的端口爲21

2.3 命令測試

  • 分析:記錄局域網中各主機的mac地址,保存到/etc/ethers文件中;若此文件已存在,應先轉移進行備份;檢查有哪些主機開啓了匿名ftp服務,掃描對象爲/etc/ethers文件的所有ip地址,掃描的端口爲21
    • arping -c 2 -w 1 -I 網卡名 ip地址 //發送mac地址解析請求,或者使用ping
    • arp -n 記錄mac
    • awk 打印ip與mac地址
    • 使用wget下載的方法測試ftp服務
[root@localhost ~]# arping -c 2 -w 1 -I ens33 192.168.247.134
ARPING 192.168.247.134 from 192.168.247.136 ens33
Unicast reply from 192.168.247.134 [00:0C:29:52:4D:89]  1.452ms
Unicast reply from 192.168.247.134 [00:0C:29:52:4D:89]  1.182ms
Sent 2 probes (1 broadcast(s))
Received 2 response(s)

配置ftp匿名訪問模式, 首先輸入命令“vi /etc/vsftpd/vsftpd.conf” 打開ftp服務具體配置文件

進行修改(有點改,沒有的添)(去“#”號)

參數 作用
anonymous_enable=YES 允許匿名訪問模式。
anon_umask=022 匿名用戶上傳文件的umask值。
anon_upload_enable=YES 允許匿名用戶上傳文件
anon_mkdir_write_enable=YES 允許匿名用戶創建目錄
anon_other_write_enable=YES 允許匿名用戶修改目錄名或刪除目錄

2.4 腳本編程與調試

  • 通過arping命令發送ARP請求,使用if語句根據反饋結果記錄mac地址
  • 將網段地址賦值給變量,作爲檢測地址的前綴
  • 使用循環語句,重複檢測目標並記錄mac地址,主機地址爲1-254
  • 通過awk命令過濾出/etc/ethers文件中的所有ip地址,賦值給變量,使用循環語句,讀取變量中的ip地址,重複探測ftp開啓情況
#!/bin/bash
#測試文件是否存在,若存在,就將當前文件備份
[ -f /etc/ethers ]
if [ $? -eq 0 ]
then
cp -p /etc/ethers /etc/ethers.bak
fi
#去ping254個地址,將成功的ip地址和mac追加到/ethers
for ((i=134;i<=139;i++))
do
  ping -c 3 -w 3 192.168.247.$i &> /dev/null
  if [ $? -eq 0 ]
  then
  echo "192.168.247.$i 存活"
  fi
done
arp -n | grep "ether" | awk '{print $1,$3}' > /etc/ethers
#檢查是否安裝nmap掃描軟件
rpm -q nmap
if [ $? -eq 1 ]
then    
yum clean all 
yum list     
yum install nmap -y 
[ $? -eq 0 ] && echo "未安裝namp掃描工具,當前已爲您安裝"
fi
#檢查有哪些ip開啓了匿名服務ftp服務,即22端口
for a in $(cat /etc/ethers | awk '{print $1}')
do
m=$(nmap -sT $a -p 21 | awk '/ftp/{print $2}')
if [ $m = open ]
then
echo "$a 開啓ftp服務"
fi
done

三 : 開發系統監控腳本

3.1 企業環境說明

  • 某公司隨着業務的不斷髮展,所使用的linux服務器也越來越多。管理員希望編寫一個簡單的性能監控腳本,放到各服務器中,當監控指標出現異常時發送告警郵件

3.2 需求描述

  • 編寫名爲sysmon.sh的shell監控腳本
  • 監控內容包括CPU使用率、內存使用率、根分區的磁盤佔用率
  • 百分比只精確到個位,如7%、12%、23%等
  • 出現以下任意情況時告警:磁盤佔用率超過90%、cpu使用率超過80%、內存使用率超過90%,告警郵件通過mail命令發送到指定郵箱
  • 結合crond服務,每半個小時執行一次監控腳本

3.3 思路與命令測試

  • 分析:監控內容包括cpu使用率、內存使用率、根分區的磁盤佔用率
  • df命令
  • awk命令
  • mpstat 命令 (需安裝sysstat軟件包)
  • free命令
  • crontab命令

3.4 腳本編程與調試

  • 使用df命令提取出根分區的磁盤佔用率,賦值給變量DUG
  • 使用mpstat命令提取cpu使用率,賦值給變量CUG
  • 使用free命令提取出內存使用率,賦值給變量MUG
  • 使用if語句判斷上述監控項目是否超標,將需要告警的信息保存到/tmp/alert.txt文件;若存在則作爲告警郵件發送
  • 調試優化並設置crontab計劃
#!/bin/bash
#/根分區的當前佔用率
DUG=$(df -Th | grep '/$' | awk '{print $6}' | sed  's/%//')
#cpu 的當前空閒佔用率
CUG=$(mpstat | grep 'all' | awk '{print $13}' | awk -F. '{print $1}')
#內存當前佔用率
used=$(free | grep 'Mem' | awk '{print $3}')
total=$(free | grep 'Mem' | awk '{print $2}')
(( MUG = used*100/total))
genfenquzhanyong=當前根磁盤佔用未到警戒線20%
cpukongxian=當前cpu空閒資源未低於警戒線1%
neicunzhanyong=當前內存佔用未超過警戒線10%
#當根分區佔用率超過10時
if [ $DUG -gt 10 ]
then
echo `date`  >> /tmp/alert.txt
echo "當前磁盤佔用超過10%" >> /tmp/alert.txt
genfenquzhanyong='當前根磁盤佔用超過警戒線20%,爲$DUG%'
fi
#當cpu的空閒內存小於20時
if [ $CUG -lt 1 ]
then
echo `date`  >> /tmp/alert.txt
echo "當前cpu空閒資源小於1%" >> /tmp/alert.txt
cpukongxian='當前cpu空閒資源低於警戒線1%,爲$CUG'
fi

if [ $MUG -gt 10 ]
then
echo `date`  >> /tmp/alert.txt
echo "當前內存佔用超過10%" >> /tmp/alert.txt
neicunzhanyong='當前內存佔用超過警戒線10%,爲$MUG'
fi
rpm -q expect
if [ $? -ne 0 ]
then
yum install expect -y
fi
echo "$genfenquzhanyong,$cpukongxian,$neicunzhanyong" | mail "[email protected]"

[root@localhost ~]# crontab -e -u root
[root@localhost ~]# crontab -l
30 * * * *      /usr/bin/sh /root/sysmon.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章