第二十四章? shell中色彩處理和awk使用技巧
?
本節(jié)所講內(nèi)容:
24.1? shell中的色彩處理
24.2? awk基本應(yīng)用
24.3? awk高級(jí)應(yīng)用
24.4? 實(shí)戰(zhàn)-shell腳本實(shí)戰(zhàn)
?
24.1? Shell中的色彩處理
shell腳本中echo顯示內(nèi)容帶顏色顯示,echo顯示帶顏色纳决,需要使用參數(shù)-e
格式1:echo -e “\033[背景顏色;文字顏色m 要輸出的字符\033[0m”
格式2:echo -e “\e[背景顏色;文字顏色m要輸出的字符\e[0m”
例:綠底藍(lán)字
[root@xuegod63 ~]# echo-e "\033[42;34mhello world\033[0m"
[root@xuegod63 ~]# echo-e "\e[42;34mhello world\e[0m"
如圖:
??? 注:其中42的位置代表底色,34的位置代表的是字的顏色乡小,0m是清除所有格式
1阔加、字背景顏色和文字顏色之間是英文的分號(hào)";"
2、文字顏色后面有個(gè)m
3满钟、字符串前后可以沒有空格胜榔,如果有的話胳喷,輸出也是同樣有空格
4、echo顯示帶顏色苗分,需要使用參數(shù)-e
,-e 允許對(duì)下面列出的加反斜線轉(zhuǎn)義的字符進(jìn)行解釋.
?
控制選項(xiàng):
\033[0m 關(guān)閉所有屬性
\033[1m 設(shè)置高亮度厌蔽,加粗
\033[5m 閃爍
[root@xuegod63 ~]# echo-e "\e[42;34mhello world\e[5m"? #執(zhí)行后,發(fā)現(xiàn)后期所有輸出都閃爍狀態(tài)摔癣,如何關(guān)閉奴饮?
[root@xuegod63~]# echo -e "\e[42;34mhello world\e[0m"?? #可以使用\033[0m 關(guān)閉所有屬性
?
常見shell輸入帶顏色文字:? 3x代表字的顏色,4x代表背景色
echo -e "\033[30m 黑色字\033[0m"
echo -e "\033[31m 紅色字\033[0m"
echo -e "\033[32m 綠色字\033[0m"
echo -e "\033[33m 黃色字\033[0m"
echo -e "\033[34m 藍(lán)色字\033[0m"
echo -e "\033[35m 紫色字\033[0m"
echo -e "\033[36m 天藍(lán)字\033[0m"
echo -e "\033[37m 白色字\033[0m"
echo -e
"\033[40;37m 黑底白字\033[0m"
echo -e
"\033[41;37m 紅底白字\033[0m"
echo -e
"\033[42;37m 綠底白字\033[0m"
echo -e
"\033[43;37m 黃底白字\033[0m"
echo -e "\033[44;37m藍(lán)底白字\033[0m"
echo -e
"\033[45;37m 紫底白字\033[0m"
echo -e
"\033[46;37m 天藍(lán)底白字\033[0m"
echo -e
"\033[47;30m 白底黑字\033[0m"
?
24.2? awk基本應(yīng)用
grep和egrep:文本過濾的
sed:流編輯器择浊,實(shí)現(xiàn)編輯的
awk:文本報(bào)告生成器戴卜,實(shí)現(xiàn)格式化文本輸出
24.2.1? 概念
AWK是一種優(yōu)良的文本處理工具,Linux及Unix環(huán)境中現(xiàn)有的功能最強(qiáng)大的數(shù)據(jù)處理引擎之一琢岩。這種編程及數(shù)據(jù)操作語言的最大功能取決于一個(gè)人所擁有的知識(shí)投剥。awk命名:Alfred Aho Peter 、Weinberger和brian kernighan三個(gè)人的姓的縮寫担孔。
awk---->gawk 即:gun awk
在linux上常用的是gawk,awk是gawk的鏈接文件
man gawk----》pattern scanning and processing language? 模式掃描和處理語言江锨。
pattern [?p?tn]? 模式???;process [?pr??ses]處理
任何awk語句都是由模式和動(dòng)作組成糕篇,一個(gè)awk腳本可以有多個(gè)語句啄育。模式?jīng)Q定動(dòng)作語句的觸發(fā)條件和觸發(fā)時(shí)間。
模式:
正則表達(dá)式:?? /root/匹配含有root的行???? ?????? /*.root/
關(guān)系表達(dá)式:?? <?>? &&? ||?? +? *
匹配表達(dá)式:?? ~? 拌消!~
動(dòng)作:
變量? 命令? 內(nèi)置函數(shù)? 流控制語句
它的語法結(jié)構(gòu)如下:
awk [options] 'BEGIN{ print "start" }‘pattern{ commands }’END{ print
"end" }'file
其中:BEGIN? END是AWK的關(guān)鍵字部挑豌,因此必須大寫;這兩個(gè)部分開始?jí)K和結(jié)束塊是可選的
特殊模塊:
BEGIN語句設(shè)置計(jì)數(shù)和打印頭部信息墩崩,在任何動(dòng)作之前進(jìn)行
END語句輸出統(tǒng)計(jì)結(jié)果氓英,在完成動(dòng)作之后執(zhí)行
?
通過上面我們可以知道;AWK它工作通過三個(gè)步驟
1、讀:從文件鹦筹、管道或標(biāo)準(zhǔn)輸入中讀入一行然后把它存放到內(nèi)存中
2铝阐、執(zhí)行:對(duì)每一行數(shù)據(jù),根據(jù)AWK命令按順序執(zhí)行盛龄。默認(rèn)情況是處理每一行數(shù)據(jù)饰迹,也可以指定模式
3、重復(fù):一直重復(fù)上述兩個(gè)過程直到文件結(jié)束
AWK支持兩種不同類型的變量:內(nèi)建變量余舶,自定義變量
awk內(nèi)置變量(預(yù)定義變量)
[if !supportLists]ü? [endif]$n 當(dāng)前記錄的第n個(gè)字段,比如: $1表示第一個(gè)字段锹淌,$2表示第二個(gè)字段
[if !supportLists]ü? [endif]$0 這個(gè)變量包含執(zhí)行過程中當(dāng)前行的文本內(nèi)容
[if !supportLists]ü? [endif]FILENAME 當(dāng)前輸入文件的名
[if !supportLists]ü? [endif]FS 字段分隔符(默認(rèn)是空格)
[if !supportLists]ü? [endif]NF 表示字段數(shù)匿值,在執(zhí)行過程中對(duì)應(yīng)于當(dāng)前的字段數(shù),NF:列的個(gè)數(shù)
[if !supportLists]ü? [endif]FNR? 各文件分別計(jì)數(shù)的行號(hào)
[if !supportLists]ü? [endif]NR 表示記錄數(shù)赂摆,在執(zhí)行過程中對(duì)應(yīng)于當(dāng)前的行號(hào)
[if !supportLists]ü? [endif]OFS 輸出字段分隔符(默認(rèn)值是一個(gè)空格)
[if !supportLists]ü? [endif]ORS 輸出記錄分隔符(默認(rèn)值是一個(gè)換行符)
[if !supportLists]ü? [endif]RS 記錄分隔符(默認(rèn)是一個(gè)換行符)
24.2.2? 實(shí)例演示
常用的命令選項(xiàng):
???????? -F? fs指定分隔符
???????? -v賦值一個(gè)用戶自定義變量
???????? -f指定腳本文件,從腳本中讀取awk命令
(1)分隔符的使用
用法:-Ffs 其中fs是指定輸入分隔符挟憔,fs可以是字符串或正則表達(dá)式;分隔符默認(rèn)是空格
常見寫法:-F:?? -F,?-F[Aa]
例1:
[root@xuegod63 ~]# echo"AA BB CC DD"|awk '{print $2}'
BB
[root@xuegod63 ~]# echo"AA|BB|CC|DD"|awk -F"|" '{print $2}'
BB
[root@xuegod63 ~]# echo"AA,BB,CC,DD"|awk -F"," '{print $2}'
BB
[root@xuegod63 ~]# echo"AA,BB,CC,DD"|awk -F, '{print $2}'
BB
[root@xuegod63 ~]# awk-F: '{print $1}' /etc/passwd? #以:分隔钟些,打印第1列用戶名
例2:指定多個(gè)分隔符
[root@xuegod63 ~]# echo"12AxAbADXaAD52" | awk -F"[aA]" '{print $6}'
D52
例3:使用FS指定分隔符
[root@xuegod63 ~]# echo"12AxAbADXaAD52" | awk 'BEGIN {FS="aA"}{print $2}'
D52
?
例4:過濾出本系統(tǒng)的IP地址
[root@xuegod63 ~]#ifconfig ens33 | grep netmask
??????? inet 192.168.1.63? netmask 255.255.255.0? broadcast 192.168.1.255
[root@xuegod63 ~]#ifconfig ens33 | grep netmask | awk '{print $2}'
192.168.1.63
?
(2)關(guān)系運(yùn)算符的使用
例1:
[root@xuegod63 ~]# echo"3 2 3 4 5" > a.txt
[root@xuegod63 ~]# awk'{print $1+10}'? a.txt
13
例2:
[root@xuegod63 ~]# echo"one two three four" | awk '{print $4}'
four
[root@xuegod63 ~]# echo"one two three four" | awk '{print $NF}'
four
[root@xuegod63 ~]# echo"one two three four" | awk '{print $(NF-2)}'? #打印倒數(shù)第3列
two
[root@xuegod63 ~]# echo"one two three four" | awk '{print $(NF/2-1)}'
one
例2:打印出passwd文件中用戶UID小于10的用戶名和它登錄使用的shell
參數(shù):$NF 最后一列
[root@xuegod63 ~]# awk-F: '$3<10{print $1 $NF}' /etc/passwd?#直接輸出格式太亂
root/bin/bash
bin/sbin/nologin
daemon/sbin/nologin
adm/sbin/nologin
lp/sbin/nologin
sync/bin/sync
shutdown/sbin/shutdown
halt/sbin/halt
mail/sbin/nologin
[root@xuegod63 ~]# awk
-F: '$3<10{print $1 "<======>" $NF}' /etc/passwd #awk格式化輸出
root<======>/bin/bash
bin<======>/sbin/nologin
daemon<======>/sbin/nologin
在$1和$NF之間加一下\t tab
[root@xuegod63 ~]# awk-F: '$3<10{print $1"\t"$NF}'/etc/passwd?
注:awk 最外面使用了單引號(hào)'' ,里面都使用雙引號(hào)“”
?
.輸出多個(gè)列時(shí),可以加绊谭,分隔一下.
[root@xuegod63 ~]# awk-F: '$3<10{print $1,$NF}' /etc/passwd
?
例2:打印出系統(tǒng)中UID大于1000且登錄shell是/bin/bash的用戶
[root@xuegod63 ~]#? awk -F: '$3>=1000 &&$NF=="/bin/bash"{print $1"\t"$NF}' /etc/passwd
mk?? /bin/bash
?
(3)在腳本中的一些應(yīng)用
例:統(tǒng)計(jì)當(dāng)前內(nèi)存的使用率
[root@xuegod63 ~]#
[root@xuegod63 ~]# catuser_cache.sh
#!/bin/bash
echo "當(dāng)前系統(tǒng)內(nèi)存使用百分比為:"
USEFREE=`free -m | grep-i mem | awk '{print $3/$2*100"%"}'`
echo -e "內(nèi)存使用百分比:\e[31m${USEFREE}\e[0m"
?
[root@xuegod63 ~]# bashuser_cache.sh
?
24.3? awk高級(jí)應(yīng)用
命令格式:
awk?[-F | -f | -v ] ‘BEGIN {} / /{command1;command2} END {}’file
???????? -F????????????? 指定分隔符
???????? -f????????????? 調(diào)用腳本
???????? -v????????????? 定義變量
???????? ‘{}’?????? 引用代碼塊
? ???{…}?????????? 命令代碼塊政恍,包含一條或多條命令
???????? BEGIN???? 初始化代碼塊
???????? / str /??????????????? 匹配代碼塊,可以是字符串或正則表達(dá)式
???????? {print A达传;printB}?????????? 多條命令使用分號(hào)分隔
???????? END????????????????? 結(jié)尾代碼塊
在awk中篙耗,pattern有以下幾種:
[if !supportLists]1)? [endif]empty空模式,這個(gè)也是我們常用的
[if !supportLists]2)? [endif]/regular expression/? 僅處理能夠被這個(gè)模式匹配到的行
例:打印以root開頭的行
[root@xuegod63 ~]# awk-F: '/^root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
?
3) 行范圍匹配startline,endline
例1:輸出行號(hào)大于等于3且行號(hào)小于等于6的行
[root@xuegod63 ~]# awk-F: '(NR>=3&&NR<=6){print NR,$0}' /etc/passwd
3daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6sync:x:5:0:sync:/sbin:/bin/sync
內(nèi)置變量的特殊用法:
[if !supportLists]ü? [endif]$0? ? ? 表示整個(gè)當(dāng)前行
[if !supportLists]ü? [endif]NF? ? 字段數(shù)量??? NF(Number數(shù)量;? field字段)
[if !supportLists]ü? [endif]NR? ? ?每行的記錄號(hào)宪赶,多文件記錄遞增?? Record [?rek?:d]
[if !supportLists]ü? [endif]\t ?
? ? ?制表符
[if !supportLists]ü? [endif]\n? ? ?換行符
[if !supportLists]ü? [endif]~ ?
? ? ?匹配
[if !supportLists]ü? [endif]!~ ?
? ?不匹配
[if !supportLists]ü? [endif]-F'[:#/]+' ?定義三個(gè)分隔符
?
例1:使用NR行號(hào)來定位宗弯,然后提取IP地址
注:這個(gè)思路很好,之前都是通過過濾關(guān)鍵字來定位搂妻,這次是通過行號(hào)蒙保,多了一種思路
[root@xuegod63 ~]#ifconfig ens33 | awk -F " " 'NR==2{print $2} '
192.168.1.63
注:NR==2表示行號(hào)
例2:NR與FNR的區(qū)別
[root@xuegod63 ~]# awk'{printNR"\t" $0}' /etc/hosts/etc/hostname
1?????? 127.0.0.1?? localhost localhost.localdomain localhost4localhost4.localdomain4
2?????? ::1???????? localhost localhost.localdomainlocalhost6 localhost6.localdomain6
3?????? 192.168.1.63?? xuegod63.cn
4?????? 192.168.1.64?? xuegod64.cn
5?????? 192.168.1.64?? xuegod62.cn
6??????
7?????? xuegod63.cn
[root@xuegod63 ~]# awk'{print FNR"\t" $0}' /etc/hosts /etc/hostname
1?????? 127.0.0.1?? localhost localhost.localdomain localhost4localhost4.localdomain4
2?????? ::1???????? localhost localhost.localdomainlocalhost6 localhost6.localdomain6
3?????? 192.168.1.63?? xuegod63.cn
4?????? 192.168.1.64?? xuegod64.cn
5?????? 192.168.1.64?? xuegod62.cn
6??????
1?????? xuegod63.cn
注:對(duì)于NR來說,在讀取不同的文件時(shí)欲主,NR是一直加的 邓厕;
對(duì)于FNR來說,在讀取不同的文件時(shí)扁瓢,它讀取下一個(gè)文件時(shí)详恼,F(xiàn)NR會(huì)從1開始重新計(jì)算的
?
例3:使用3種方法去除首行
方法1:[root@xuegod63 ~]# route -n | grep -v ^Kernel
Destination???? Gateway???????? Genmask???????? Flags Metric Ref??? Use Iface
0.0.0.0???????? 192.168.1.1???? 0.0.0.0???????? UG???100??? 0??????? 0 ens33
192.168.1.0???? 0.0.0.0???????? 255.255.255.0?? U????100??? 0??????? 0 ens33
192.168.122.0??0.0.0.0???????? 255.255.255.0?? U????0????? 0??????? 0 virbr0
方法2:sed? 1d #刪除第1行的內(nèi)容
[root@xuegod63 ~]#route -n | sed 1d
方法3:awk
[root@xuegod63 ~]#route -n | awk 'NR!=1 {print $0}'
?
例4:匹配,使用awk查出以包括root字符的行 涤妒, 有以下3種方法
[root@xuegod63 ~]# awk-F: "/root/{print}" /etc/passwd
[root@xuegod63 ~]# awk-F: "/root/" /etc/passwd
[root@xuegod63 ~]# awk-F: '/root/{print $0}' /etc/passwd
做一個(gè)不匹配root行:
[root@xuegod63 ~]# awk-F: '!/root/{print $0}' /etc/passwd
以root開頭的行:
[root@xuegod63 ~]# awk-F: '/^root/{print $0}' /etc/passwd
以bash結(jié)尾的行:
[root@xuegod63 ~]# awk-F: '/bash$/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
mk:x:1000:1000:mk:/home/mk:/bin/bash
?
?
=====以下知識(shí)单雾,大家了解一下======
例5:條件表達(dá)式
表達(dá)式?if-true:if-false問號(hào)前面是條件,如果條件為真執(zhí)行if-true,為假執(zhí)行if-false
例1:如果passwd中UID小于10她紫,則給變量USER賦值成aaa硅堆,否則賦值成bbb
[root@xuegod63 ~]# awk-F: '{$3<10? USER="aaa":USER="bbb";print $1,USER}'/etc/passwd
root aaa
bin aaa
daemon aaa
adm aaa
lp aaa
sync aaa
shutdown aaa
halt aaa
mail aaa
operator bbb
。贿讹。渐逃。
?
用if(條件){命令1;命令2}elif(條件){命令民褂;}else{命令}中茄菊,在比較條件中用( )擴(kuò)起來,在AWK中赊堪,如果條件為1為真面殖,0為假
例:如果UID大于10 ,則輸出user=>用戶名哭廉,否則輸出pass=>用戶名
[root@xuegod63 ~]# awk-F: '{if($3<10){print "user=>"$1}else{print"pass=>"$1}}' /etc/passwd
user=>root
user=>bin
user=>daemon
user=>adm
user=>lp
user=>sync
user=>shutdown
user=>halt
user=>mail
pass=>operator
?
~ ? ? ? ?匹配
!~ ? ? ?不匹配
例:查出行號(hào)小于等于5且包括bin/bash的行
[root@xuegod63 ~]#? awk -F: '{if($3<=5 && $NF ~"bin/bash"){print $1,$NF}}' /etc/passwd
root /bin/bash
?
例6:變量
[if !supportLists]1)??[endif]用-v指定? var=value變量名區(qū)分大小寫的
[if !supportLists]2)??[endif]在程序中直接定義
[if !supportLists]3)??[endif]在awk里脊僚,使用變量不用加$符號(hào)。
[root@xuegod63 ~]#var="test"
[root@xuegod63 ~]# awk'BEGIN{print "'$var'"}'? #引用變量時(shí)遵绰,使用單引號(hào)+雙引號(hào)括起來
test
?
例7:格式化輸出
printf命令:格式化輸出? printf “FORMAT”,item1,item2.......
format使用注意事項(xiàng):
1辽幌、其與print命令的最大不同是增淹,printf需要指定format樣式
2、format用于指定后面的每個(gè)item的輸出格式
3乌企、printf語句不會(huì)自動(dòng)打印換行符虑润;\n
4、format格式的指示符都以%開頭加酵,后跟一個(gè)字符拳喻;如下:
%c: 顯示字符的ASCII碼
%d,
%i:十進(jìn)制整數(shù)
%e, %E:科學(xué)計(jì)數(shù)法顯示數(shù)值
%f:顯示浮點(diǎn)數(shù)
%g, %G: 以科學(xué)計(jì)數(shù)法的格式或浮點(diǎn)數(shù)的格式顯示數(shù)值;
%s: 顯示字符串
%u: 無符號(hào)整數(shù)
%%: 顯示%自身
例1:輸入passwd文件中的第1列內(nèi)容虽画,輸出時(shí)不會(huì)換行
[root@xuegod63 ~]#? awk -F: '{printf "%s",$1}'/etc/passwd? ##不會(huì)自動(dòng)換行
rootrootbindaemonadmlpsyncshutdownhaltmailoperatorgamesftpnobodysystemd-networkdbuspolkitdabrtlibstoragemgmtrpccolordsaslauthrtkitchronyqemutssusbmuxdgeocluerpcusernfsnobodyradvdsetroubleshootpulsegdmgnome-initial-setupsshdavahipostfixntptcpdumpmk[root@xuegod63 ~]#
例2:換行輸出
[root@xuegod63 ~]# awk-F: '{printf "%s\n",$1}' /etc/passwd
例3:在輸出的字母前面添加自定義字符串USERNAME:
[root@xuegod63 ~]# awk-F: '{printf "USERNAME: %s\n",$1}' /etc/passwd?
USERNAME: root
USERNAME: bin
USERNAME: daemon
USERNAME: adm
例4:對(duì)$1和$NF都做格式化輸出
[root@xuegod63 ~]# awk-F: '{printf "USERNAME: %s %s\n",$1,$NF}' /etc/passwd
USERNAME: root/bin/bash
USERNAME: bin/sbin/nologin
USERNAME: daemon/sbin/nologin
例5:對(duì)$1和$NF都做格式化輸出舞蔽,在$1和$NF兩者之間添加一串====字符進(jìn)行輸入
[root@xuegod63 ~]# awk-F: '{printf "USERNAME: %s=========%s\n",$1,$NF}'/etc/passwdUSERNAME: root=========/bin/bash
USERNAME:bin=========/sbin/nologin
?
awk修飾符:
N: 顯示寬度;
-: 左對(duì)齊码撰;
一個(gè)字母占一個(gè)寬度渗柿。默認(rèn)是右對(duì)齊
?
例1:顯示時(shí)用10個(gè)字符串右對(duì)齊顯示。如果要顯示的字符串不夠10個(gè)寬度脖岛,以字符串的左邊自動(dòng)添加朵栖。一個(gè)字母占一個(gè)寬度。默認(rèn)是右對(duì)齊
[root@xuegod63~]# awk -F":" '{printf "%10s\n",$1}'? /etc/passwd
例2:使用10個(gè)寬度柴梆,左對(duì)齊顯示
[root@xuegod63~]# awk -F":" '{printf "%-10s\n",$1}'? /etc/passwd
root?????
bin??????
daemon???
adm??????
lp??
?
例3:第1列使用15個(gè)字符寬度左對(duì)齊輸出陨溅,最后一列使用15個(gè)字符寬度右對(duì)齊輸出
[root@xuegod63 ~]# awk-F: '{printf "USERNAME: %-15s %15s\n",$1,$NF}' /etc/passwd
USERNAME: root????????????????? /bin/bash
USERNAME: bin?????????????? /sbin/nologin
?
例4:使用開始和結(jié)束模塊來格式化輸出
[root@xuegod63 ~]# cattest.awk
BEGIN{
???????? print "UserId\t\t\tShell"
???????? print "-------------------------------"
???????? FS=":"
???????? }
$3>=500 &&$NF=="/sbin/nologin"{
???????? printf "%-20s %-20s\n",$1,$NF?
???????? }
END{
???????? print "--------------------------------"
???????? }
[root@xuegod63 ~]# awk-f test.awk /etc/passwd
UserId?????????????????????? Shell
-------------------------------
polkitd????????????? /sbin/nologin??????
libstoragemgmt?????? /sbin/nologin??????
colord?????????????? /sbin/nologin??????
saslauth???????????? /sbin/nologin??????
chrony?????????????? /sbin/nologin??????
geoclue????????????? /sbin/nologin??????
nfsnobody??????????? /sbin/nologin??????
setroubleshoot?????? /sbin/nologin??????
gnome-initial-setup? /sbin/nologin??????
--------------------------------
?
?
?
24.4? 實(shí)戰(zhàn)-shell腳本實(shí)戰(zhàn)
24.4.1? 檢查服務(wù)器是否受到DDOS攻擊腳本
思路:通過:netstat? 查看網(wǎng)絡(luò)連接數(shù)。如果一個(gè)IP地址對(duì)服務(wù)器建立很多連接數(shù)(比如一分鐘產(chǎn)生了100個(gè)連接)绍在,就認(rèn)為發(fā)生了DDOS
搭建環(huán)境:
[root@xuegod63~]# yum install httpd -y?#安裝apache
[root@xuegod63~]# systemctl start httpd?#啟動(dòng)服務(wù)
[root@xuegod63~]# echo "xuegod" > /var/www/html/index.html?#創(chuàng)建apache默認(rèn)網(wǎng)站首頁
?
[root@xuegod63~]# vim?ddos-test.sh??#寫入以下內(nèi)容
#!/bin/bash
netstat-ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
?
注釋:
netstat-ntu | awk '{print $5}' | cut -d: -f1???| sort | uniq -c | sort -n
???????????
????????????? 截取外網(wǎng)IP和端口???? 截取外網(wǎng)的IP以:為分隔符?|排序 | 排除相同的記錄?| 排序并統(tǒng)計(jì)
?
測(cè)試门扇,模擬DDOS
ab命令:做壓力測(cè)試的工具和性能的監(jiān)控工具
語法:ab? -n要產(chǎn)生的鏈接數(shù)總和?? -c同時(shí)打開的客戶端數(shù)量? http://鏈接
安裝ab命令:
[root@xuegod63~]# rpm -qf `which? ab `? #這個(gè)安裝apache時(shí),會(huì)自動(dòng)安裝上
httpd-tools-2.2.15-15.el6.x86_64
模擬DDOS:?jiǎn)?dòng)10個(gè)客戶端對(duì)網(wǎng)站首頁發(fā)起1000次訪問
[root@xuegod64~]# ab -n 1000 -c 10 http://192.168.1.63/index.html?
互動(dòng): 如果你要對(duì)方發(fā)生DDOS攻擊偿渡,你會(huì)攻擊什么樣的頁面臼寄?
#訪問一個(gè)頁面比較大,頁面越大溜宽,消耗服務(wù)器帶寬就越大吉拳,攻擊效果越明顯
[root@xuegod63~]# ./ddos-test.sh???#檢查DDOS
????? 1 Address
????? 1 servers)
????? 2 192.168.1.6
?? 1003 192.168.1.63
?
總結(jié):
24.1? shell中的色彩處理
24.2? awk基本應(yīng)用
24.3? awk高級(jí)應(yīng)用
24.4? 實(shí)戰(zhàn)-shell腳本實(shí)戰(zhàn)
?
?