第1章 awk數組練習題
1.1 文件內容(僅第一行)
[root@znix test]# head -1 secure-20161219 access.log ==> secure-20161219 <== Dec 11 03:49:25 localhost sshd[27087]: Failed password for invalid user support from 123.31.34.190 port 55493 ssh2 ==> access.log <== 101.226.61.184 - - [22/Nov/2015:11:02:00 +0800] "GET /mobile/sea-modules/gallery/zepto/1.1.3/zepto.js HTTP/1.1" 200 24662 "http://m.oldboyedu.com.cn/mobile/theme/oldboy/home/index.html" "Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; HUAWEI CRR-UL00 Build/HUAWEICRR-UL00) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025478 Mobile Safari/533.1 MicroMessenger/6.3.7.51_rbb7fa12.660 NetType/3gnet Language/zh_CN"
1.2 統計secure文件中誰在破解你的密碼(統計出破解你密碼的ip地址出現的次數)
1.2.1 方法一
Failed 是用戶登陸失敗,連續多次的登陸失敗,就是在暴力破解密碼。
/Failed/ 關鍵詞查找
$ (NF-3) 表示倒數第四列
fa[$(NF-3)]++ 使用數組,對不同的ip分類累加
for(pol in fa) for循環 使用pol 變量,逐個的取出fa[$(NF-3)] 數組中的內容。
print pol,fa[pol] 顯示數組的內容,以及pol的次數,即統計.
[root@znix test]# awk '/Failed/{fa[$(NF-3)]++}END{for(pol in fa)print pol,fa[pol]}' secure-20161219|column -t 218.65.30.126 17163 218.65.30.61 17163 125.16.71.175 4 169.46.38.74 9 183.136.238.78 30 218.2.0.16 10 122.228.238.66 1 ……
1.2.2 方法二
sort排序,把一樣的都放在一起,uniq去重經常合並 -c 參數是計數.
[root@znix test]# awk '/Failed/{print $(NF-3)}' secure-20161219 |sort|uniq -c|sort -n
1.2.3 結果統計
[root@znix test]# awk '/Failed/{fa[$(NF-3)]++}END{for(pol in fa)print pol,fa[pol]}' secure-20161219|column -t|wc -l 88
1.3 統計access.log文件中對ip地址去重並統計重復數
使用數組對不同的ip進行統計
與第一題類似,這里只是統計的位置改變,變為$1.
[root@znix test]# awk '{hotel[$1]++}END{for(pol in hotel)print pol,hotel[pol]}' access.log |head -3 101.226.125.115 284 180.154.137.177 516 101.226.125.116 127
1.4 統計access.log文件中網站一共使用了多少流量
統計總數較為簡單
i=i+$10可以寫為 i+=$10
i累計相加,然后再輸出最后一個i的值即可。
[root@znix test]# awk '{i=i+$10}END{print i}' access.log 2478496663
1.5 統計access.log文件中每個ip地址使用了多少流量(一個栗子)
統計ip使用的流量,將每個ip歸類,與上一題不同的是,上一題是統計次數,這是統計他的流量
hotel[$1]+=$10 可以寫為 hotel[$1]=hotel[$1]+$10 讓循環的時候相加的不是1,而是$10的數字,進而就可以得出每個ip使用的流量.
[root@znix test]# awk '{hotel[$1]+=$10}END{for(pol in hotel)print pol,hotel[pol]}' access.log |sort -rnk2|head 114.83.184.139 31362956 117.136.66.10 22431302 116.216.30.47 21466000 223.104.5.197 21464856 116.216.0.60 19145329 114.141.164.180 17219553 114.111.166.22 17121524 223.104.5.202 16911512 116.228.21.187 15969887 112.64.171.98 15255013
1.6 統計access.log文件中,同一個ip的出現次數以及他使用的流量總數。
查看數組元素里面的內容 數組的名字+數組元素的下標
下標相同的數組,能夠一起使用.
兩個有關的數組,只要有一個共同使用的元素,可以在一個循環中使用.
awk '{count[$1]++;sum[$1]+=$10}END{for(pol in sum)print pol,count[pol],sum[pol]}' access.log
[root@znix test]# awk '{count[$1]++;sum[$1]=sum[$1]+$10}END{for(pol in sum)print pol,count[pol],sum[pol]}' access.log |sort -nrk2 |column -t |head 114.83.184.139 1982 31362956 117.136.66.10 1662 22431302 116.216.30.47 506 21466000 223.104.5.197 961 21464856 116.216.0.60 957 19145329 114.141.164.180 695 17219553 114.111.166.22 753 17121524 223.104.5.202 871 16911512 116.228.21.187 596 15969887 112.64.171.98 10856 15255013
1.6.1 [優化]讓顯示的結果更好看
[root@znix test]# awk '{count[$1]++;sum[$1]+=$10}END{for(pol in sum)print "ip:"pol,"次數:"count[pol],"流量:"sum[pol]}' access.log |sort -rnk3|head |column -t ip:70.39.157.199 次數:1 流量:16049 ip:70.39.157.198 次數:1 流量:15965 ip:70.39.157.195 次數:1 流量:1569 ip:68.180.230.250 次數:5 流量:40644 ip:66.249.82.96 次數:30 流量:40254 ip:66.249.82.93 次數:36 流量:358729 ip:66.249.82.90 次數:61 流量:1640266 ip:66.249.82.185 次數:1 流量:1569 ip:66.249.82.181 次數:3 流量:258284 ip:66.249.82.177 次數:6 流量:374716
1.7 sort命令
1.7.1 sort默認是按照字母的順序排序。
對與數字來說,sort命令將他一視同仁,按照順序進行排序
[root@znix test]# seq 20|sort 1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9
1.7.2 sort命令的其他參數
-n 表示,將內容視為數字,能按照數字順序進行排列
-r 表示逆序排列
-k 指定按照哪一列的順序進行排列。
[root@znix test]# seq 20|sort -rnk1 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
1.8 對於統計IP使用的流量的一個栗子.
假如現在有個文本,格式如下:
a 1 b 3 c 2 d 7 b 5 a 3 g 2 f 6 d 9
即左邊是隨機字母,右邊是隨機數字,要求寫個腳本使其輸出格式為:
a 4 b 8 c 2 d 16 f 6 g 2
即將相同的字母后面的數字加在一起,按字母的順序輸出。
1.8.1 使用數組進行統計
數組會進行分類計數,顯示的時候可以顯示數據統計的結果,與數組的名字,即結果.
[root@znix files]# awk '{a[$1]=a[$1]+$2}END{for(i in a)print i,a[i]}' w.txt a 4 b 8 c 2 d 16 f 6 g 2
1.8.2 變量的不同形式
這里將變量寫為數組而已.
{i=i+$2}
{hotel[$1]=hotel[$1]+$2}
一些式子的簡寫:
i++ ====>> i=i+1 i+=2 ====>> i=i+2 i+=$1 ====>> i=i+$1
1.9 awk中一些其他的命令
再awk里面使用 |" " 里面加上命令即可
sort 命令放在后面進行排序會將BEGIN的內容也會排序
在awk循環中進行排序,就不會貴BEGIN 的內容產生影響
[root@znix test]# awk 'BEGIN{print "ip","count"}{count[$1]++}END{for(pol in count)print pol,count[pol]|"sort -rnk2"}' access.log |head |column -t ip count 58.220.223.62 12049 112.64.171.98 10856 114.83.184.139 1982 117.136.66.10 1662 115.29.245.13 1318 223.104.5.197 961 116.216.0.60 957 180.111.48.14 939 223.104.5.202 871
2.1 遠程連接連不上了之檢查端口
2.1.1 方法一telnet
使用方法 telnet [ip] [port]
[f:\~]$ telnet 10.0.0.201 22 Connecting to 10.0.0.201:22... Connection established. To escape to local shell, press 'Ctrl+Alt+]'. SSH-2.0-OpenSSH_5.3
2.1.2 方法二 ss -lntup
[root@znix ~]# ss -lntup|grep 22 tcp LISTEN 0 128 :::22 :::* users:(("sshd",1140,4)) tcp LISTEN 0 128 *:22 *:* users:(("sshd",1140,3))
2.1.3 方法三 強大的nmap
[root@znix test]# nmap -p22 10.0.0.201 Starting Nmap 5.51 ( http://nmap.org ) at 2017-09-22 11:10 CST Nmap scan report for 10.0.0.201 Host is up (0.000072s latency). PORT STATE SERVICE 22/tcp open ssh Nmap done: 1 IP address (1 host up) scanned in 0.30 seconds
2.1.4 方法四 lsof -i:22
-i<條件>:列出符合條件的進程。(4、6、協議、:端口、 @ip )
[root@znix ~]# lsof -i:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1140 root 3u IPv4 10300 0t0 TCP *:ssh (LISTEN) sshd 1140 root 4u IPv6 10302 0t0 TCP *:ssh (LISTEN) sshd 1334 root 3u IPv4 11050 0t0 TCP 10.0.0.201:ssh->10.0.0.1:42256 (ESTABLISHED) sshd 1700 root 3u IPv4 12198 0t0 TCP 10.0.0.201:ssh->10.0.0.1:42772 (ESTABLISHED)
2.1.5 方法五 nc
使用方法: nc ip port
[root@znix ~]# nc 10.0.0.201 22 SSH-2.0-OpenSSH_5.3
2.2 linux中要安裝的一些軟件
[root@clsn6 ~]# yum install telnet tree lrzsz nmap nc dos2unix -y [root@clsn6 ~]# yum install htop iotop iftop atop nethogs -y
telnet 遠程連接服務,可以進行測試
tree 讓文件,目錄以樹的形式顯示
lrzsz linux與windows文件相互傳遞
nmap 強大的掃描工具
nc 網絡探測工具
dos2unix 將dos格式的文本轉換為unix格式
2.3 查看系統網關的方法 ip命令
2.3.1 查看系統的網關
ip r 與ip route 相同
[root@znix test]# ip r 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.201 169.254.0.0/16 dev eth0 scope link metric 1002 default via 10.0.0.2 dev eth0
2.3.2 參看網卡的詳細-IP地址
ip address show eth0 與 ip a s eth0 相同。
[root@znix test]# ip address show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:a8:e4:14 brd ff:ff:ff:ff:ff:ff inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0 inet6 fe80::20c:29ff:fea8:e414/64 scope link valid_lft forever preferred_lft forever
2.4 【面試題】 ps aux 里面的vsz rss 區別
vsz 虛擬內存(物理+swap)
rss 是物理內存