メモの日々


2009年02月17日(火) [長年日記]

  • 昨日まで暑くて今日から寒い。

[howto][shell][net] ポートが開いているかをチェックするスクリプト (2)

先月考えたfuserコマンドを使うスクリプトが動作しない環境があった。その環境だと、ポート番号によってはfuserコマンドが出力結果を返してくれない。動かない環境が手元になくて詳しい調査ができず、原因不明。環境の違いは64ビットかどうかくらいだと思う。もしかしたらSELinuxの設定が違うのかもしれない。

仕方ないのでfuserを使わない方法を考えた。netstatコマンドがどうやって空きポートを取得しているのかをソースを読んで調べたところ、/proc/net にある tcp, tcp6, udp, udp6 などを読み込んでいるようだった。ふーん、ここでわかるのか。

しかしシェルスクリプトなら /proc から読み取るより netstat の出力結果から切り出した方が簡単だと思い直し、次のようにして実現した。

if [ -n "`/bin/netstat -ln --tcp | \
          /bin/awk '{print $4;}' | \
          /bin/grep '^.*:10000$'`" ] ; then
    echo port is opened.
else
    echo port is closed.
fi

これはTCPポート10000が開いているかを調べる例。awkを使うのは富豪的かなあ。

fuserのときのように実行ユーザを気にしたりしなくても大丈夫なはず。ただ、netstatの出力フォーマットに依存するので少し落ち着かない。

[book] ラッシュライフ (伊坂幸太郎)

ラッシュライフ(伊坂幸太郎/著) 読んだ。色々な登場人物の行動がだんだん繋がっていく話。面白いけど、だからどうしたとも思う。3.3点。