wivern ロゴ

サイバーセキュリティ研究所

サイバーセキュリティを中心に、軍事、防犯、サーバーの管理と監視、その他、最新技術を研究しています。


Linux コマンド辞典「uniq」

uniq : ソートされたファイルから重なった行を削除する

command: uniq

サーバー監視:Logwatch でお手軽ログ監視」でも紹介しましたが、私が管理するサーバーに対する不正アクセスを Logwatch から届くレポートメールで監視しており、悪質と思われるアクセス元の IP アドレスを iptables に追加してハジくようにしています。

ただ、この Logwatch から届くレポートメールの brute force attack(総当たり攻撃) の報告は、試行したアカウントが大量の場合、同じ IP アドレスがずらずらと続いて報告されます(上の画像参照)。

これが複数の IP アドレスからの報告として届いた場合、重複する IP アドレスの中から、重複したものを取り除くのに頭を悩ましていました。

そんなときに知ったのが、今回の uniq コマンドなんですが、任意のテキストから IP アドレスだけを重複せずに抜き出すなら、grep と sort の合わせ技で解決しちゃいました。

grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' input.txt | sort -u > output.txt
※以下に「man uniq」の内容を引用します。

名前
uniq - ソートされたファイルから重なった行を削除する

書式
uniq [<+|->N] [-ciduD] [-f N] [-s N] [-w N] [--all-repeated[={prepend,separate,none}]] [--check-chars=N] [--count] [--ignore-case] [--repeated] [--skip-chars=N] [--skip-fields=N] [--unique] [INFILE [OUTFILE]]
uniq [--help] [--version]

説明
uniq は指定された INFILE にあるユニークな(=他と内容の重ならない)行を標準出力(OUTFILE が指定されていたらそれ)に書き出す。
INFILE が与えられなかったり‘-’だった場合には、標準入力が用いられる。

デフォルトでは、uniq はソートされたファイルにあるユニークな行を表示する。
つまり複数の行が同一な内容を持つ場合は、1 行だけ表示して残りは捨てる。
オプションで指定すると、1 回しか現われない行だけを表示したり、複数回現われる行だけを表示することもできる。

uniq に与える入力はソートされていなければならない。
入力がソートされていない場合は、sort -u を使うのが良いだろう。

-N, -f N, --skip-fields=N
同一行かどうかの判断を行う前に N 個のフィールドをスキップする 。
フィールドとは空白とタブ以外の文字からなる文字列で、フィールド間は 1 つ以上の空白かタブで区切られる。
短いオプション形式 - は推奨されない。

+N, -s N, --skip-chars=N
同一行かどうかの判断を行う前に N 個の文字をスキップする。
フィールドスキップと文字スキップのオプションを両方指定した場合は、フィールドスキップが先に行われる。
短いオプション形式 + は推奨されない。

-c, --count
それぞれの行が何回現われたかを行の内容とともに表示する。

-i, --ignore-case
比較の際に英大文字小文字の違いを無視する。

-d, --repeated
同じ内容が 2 行以上あるものだけを出力する。

-u, --unique
1 回しか現われない行だけを出力する。

-w N, --check-chars=N
行を比較するとき、各行の N 個の文字だけを使う。
これはフィールドや文字のスキップを行った後の数である。
デフォルトでは、スキップ後残った文字すべてが比較の対象にされる。

-D, --all-repeated[={prepend,separate,none}]
重複行をすべて表示し、重複しなかった行は表示しない。
prepend が指定された場合、重複した行のグループの前に改行を出力する。
separate は、最初のグループの前に改行を出力しない以外は、prepend と同じである。
このオプションは、主に他のオプションと組み合わせて使う。
例えば大文字小文字を無視して比較したり、特定のフィールドだけで比較するような場合である。
このオプションは GNU による拡張である。

--help
標準出力に使用方法のメッセージを出力して正常終了する。

--version
標準出力にバージョン情報を出力して正常終了する。

記述に際しては、細心の注意をしたつもりですが、間違いやご指摘がありましたら、こちらからお知らせいただけると幸いです。


→「Linux コマンド辞典「arch」」
←「Linux コマンド辞典「col」」


« 戻る