awk高級進階

第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         是用戶登錄失敗,連續屢次的登錄失敗,就是在暴力破解密碼。html

/Failed/        關鍵詞查找linux

$ (NF-3)       表示倒數第四列面試

fa[$(NF-3)]++ 使用數組,對不一樣的ip分類累加shell

for(pol in fa)    for循環 使用pol 變量,逐個的取出fa[$(NF-3)] 數組中的內容。windows

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進行統計ssh

與第一題相似,這裏只是統計的位置改變,變爲$1.tcp

[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<條件>:列出符合條件的進程。(46、協議、:端口、 @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  linuxwindows文件相互傳遞

       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  是物理內存
相關文章
相關標籤/搜索