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

/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<條件>:列出符合條件的進程。(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  是物理內存


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM