はじめに
サーバ構築中とっさに「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しています」と言うことにします。