僕と先輩と時々lsofコマンド

はじめに

サーバ構築中とっさに「80番ポートは開いてる?」と聞かれたとき貴方はそれをどうやって証明しますか。firewallの設定を見せますでしょうか。それともサービスのステータスでしょうか。はたまたログか。方法は幾つか有るかと思います。

先日先輩から上の質問をされた時にあぱぁーあぱぁーしてしまい、lsofコマンドでのやり方を教えてもらったので備忘録を残しておきたいと思います。

lsofコマンドの概要

プロセスが開いているファイルを表示する。そのファイルを開いているプロセスも表示できる。

lsofコマンドの使い方

例えばsshdプロセスが開いているファイルを表示する場合は次のlsofコマンドを入力します。

$ lsof -c sshd
COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
sshd    14058   root  cwd    DIR              202,1      224     64 /
sshd    14058   root  rtd    DIR              202,1      224     64 /
sshd    14058   root  txt    REG              202,1   852856 599403 /usr/sbin/sshd
~ 以下略 ~

逆にファイルを開いているプロセスを確認する場合。

$ lsof /usr/sbin/sshd
COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
sshd    14058   root txt    REG  202,1   852856 599403 /usr/sbin/sshd
sshd    14061 centos txt    REG  202,1   852856 599403 /usr/sbin/sshd
sshd    17805   root txt    REG  202,1   852856 599403 /usr/sbin/sshd

lsofコマンドには他にも色々なオプションがあります。

  • -P
    • ポート番号をサービス名に解決しない
  • -c
    • プロセス名を指定
  • -i
    • ネットワークソケットファイルを指定
  • -n
    • 名前解決せずIPアドレスを表示
  • -p
    • プロセスIDを指定
  • -u
    • ユーザ名を指定

今回聞かれた80番ポートが開いていることの確認は次のlsofコマンドになります。

$ lsof -Pi:80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   14491   root    4u  IPv6 336922      0t0  TCP *:80 (LISTEN)
httpd   14492 apache    4u  IPv6 336922      0t0  TCP *:80 (LISTEN)
httpd   14493 apache    4u  IPv6 336922      0t0  TCP *:80 (LISTEN)
httpd   14494 apache    4u  IPv6 336922      0t0  TCP *:80 (LISTEN)
httpd   14495 apache    4u  IPv6 336922      0t0  TCP *:80 (LISTEN)
httpd   14496 apache    4u  IPv6 336922      0t0  TCP *:80 (LISTEN)

次からはこれを先輩に見せながら「80番ポートでLISTENしています」と言うことにします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA