netstat | grep が遅いなぁと思ったときにはgrep -m

サーバ間の通信を調査したいときに、netstatはよく使うと思います。たとえば、あるポートを使ってるプロセスを探したい時。

# netstat -taopn | grep :29324
tcp        0      0 192.168.11.11:29324          192.168.11.12:3306           ESTABLISHED 10726/perl          off (0.00/0/0)

ただ、すごいたくさん通信してるサーバだと、netstat自身がすごい遅くて、上記コマンドが終了するのに時間がかかります。手で見てる時はまぁどうでもいいんですが、自動化したい時とかにずっと待ってると微妙ですよね。

見つけたいのは1行だけだなぁと思ったので| head -1とかしてみたんですがあんまうまくいってない。

# time netstat -taopn | grep :29324 | head -1
tcp        0      0 192.168.11.11:29324          192.168.11.12:3306           ESTABLISHED 10726/perl          off (0.00/0/0)

real    0m23.908s
user    0m0.773s
sys     0m23.140s

というところで神降臨。

grep -mはマッチする最大行数を指定できるオプション。これを使ってみたら爆速で結果を得ることができました!

# time netstat -taopn | grep -m 1 :29324
tcp        0      0 192.168.11.11:29324          192.168.11.12:3306           ESTABLISHED 10726/perl          off (0.00/0/0)

real    0m0.054s
user    0m0.006s
sys     0m0.050s

grep -mは覚えておいて損のないオプションですね!@hide_o_55 ++