Command-Line

列出帶有限制的摘要

  • January 12, 2018

我正在嘗試使用一行命令列出一些有問題的 IP,但不知道如何做最後一點,也許有人可以指出我正確的方向。

cat /var/log/syslog* | grep "SRC=" | cut -d " " -f 14 | sort | uniq -c | sort -n -r

在英語中……這應該列印所有系統日誌文件(也包括那些旋轉的),搜尋防火牆條目並獲取 SRC 值(IP),對它​​們進行計數並從高到低列出它們。我現在想要的只是將它限制在前 5 名……有人知道可以做到這一點的命令嗎?

syslog 中的範例條目:

1 月 11 日 12:01:52 xxxx 核心:

$$ 47261.722647 $$INPUT 數據包死亡:IN=eth0 OUT= MAC=44:8a:5b:a0:24:eb:00:31:46:0d:21:e8:08:00 SRC=xx.xx.xx.xx DST=xx .xx.xx.xx LEN=40 TOS=0x00 PREC=0x00 TTL=239 ID=33840 PROTO=TCP SPT=1024 DPT=22151 WINDOW=1024 RES=0x00 SYN URGP=0

這些條目是由我的自定義防火牆製作的,不是這個問題的一部分

命令的範例輸出:

 47 SRC=13.82.59.79
  2 SRC=77.72.82.145
  2 SRC=213.157.51.11
  2 SRC=159.203.72.216
  1 SRC=77.72.85.15
  1 SRC=77.72.85.10
  1 SRC=77.72.83.238
  1 SRC=77.221.1.237
  1 SRC=222.186.172.43
  1 SRC=216.170.126.109
  1 SRC=191.101.167.253
  1 SRC=190.198.183.234
  1 SRC=173.254.247.206
  1 SRC=164.52.13.58
  1 SRC=141.212.122.145
  1 SRC=125.78.165.42
  1 SRC=118.139.177.119
  1 SRC=111.75.222.141
  1 SRC=103.30.40.9
awk '/SRC=/ { print $13 }' /var/log/syslog* | sort | uniq -c | sort -n -r | head -n 5

這消除了原始管道中的 catting、grepping 和切割,並用awk. 最後head -n 5的 將為您提供前五名的結果。

使用單個 GNU awk“魔法”:

awk 'BEGIN{ 
        PROCINFO["sorted_in"]="@val_num_desc" 
    }
    /SRC=/{ src[$13]++ }
    END{ 
        for (k in src) { 
            print src[k], k; 
            if (++c > 4) break 
        } 
    }' /var/log/syslog*

引用自:https://unix.stackexchange.com/questions/416326