質問: 頻繁なipのログファイルの解析 そのため、ddos攻撃を受けている間にこれを一緒にハッキングして、ログからいたずら ipsを引き出しました。誰かがそれをより良くするための改善や他の提案がありますか?一般的な考え方は次のとおりです。 ログファイルからipのみをプルする それらを並べ替えます uniqとそれらを数える もう一度並べ替えます そして文字列o 'パイプ: cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt
回答: marco ceppiは、awkがこのための優れたツールであることについて正しいですが、awkはsortやuniqよりも優れたツールです。これは、そのロジックをawk。 1000行をテーリングするだけの場合は大きな違いはありませんが、巨大なマルチギグログファイルを確認する場合は、それをawkに移動する方が桁違いに速くなる可能性があります。cat /var/log/apache_access | awk '{freq[$1]++} end {for (x in freq) {print freq[x], x}}' | sort -nは必要なことを実行しますが、大きなファイルの場合ははるかに高速です。 ipアドレスをキーとして使用し、ipが発生する回数を値として使用して、awkにipの配列を作成します。awkがデータを1回受け渡し、最終出力のソートを除いてほとんどの作業を行うため、スピードアップが実現します。他の方法を使用すると、転送ログに1,000,000行ある場合、awkは1,000,000 ipを吐き出す1,000,000行を読み取り、ソートは1,000,000 ip全体を処理し、ソートされた1,000,000 ipをuniqに送信します。これにより、はるかに小さい値に削減されます。ソートする前のデータ量。 1,000,000 ipで複数のパスをパイプする/実行する代わりに、awkは1つのパスでほとんどすべてを実行します。ラップトップで5,513,132行のapacheログ(1.1ギグ)を使用して、速度を比較します。 2分45秒_cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1_ 0分40秒cat ./apache_access | awk '{freq[$1]++} end {for (x in freq) {print freq[x], x}}' | sort -n