はじめに
サーバーで特定のポート番号を待ち受けているかどうか、指定ファイルは誰が読み込んでいるのかを調べたいときがあります。その際に役立つlsofコマンドについて調べてみました。
lsofコマンドとは
プロセスが開いているファイルを表示するコマンドです。
オプション
| オプション | 意味 |
|---|---|
| -P | ポート番号をサービス名に変換しない |
| -c | プロセス名を指定する |
| -i | ネットワークソケットファイルを指定する |
| -n | IPアドレスを表示する(名前解決しない) |
| -p | プロセスIDを指定する |
| -u | ユーザー名を指定する |
出力されている情報
| 項目 | 意味 |
|---|---|
| COMMAND | 実行されているコマンド |
| PID | プロセスID |
| USER | 実行ユーザー |
| FD | ファイルディスクリプタ |
| TYPE | タイプ |
| DEVICE | デバイス |
| SIZE/OFF | ファイルサイズ |
| NODE | プロトコル |
| NAME | ファイル又はポート |
NAME
- (LISTEN): 待ち受け状態
利用方法
全プロセスを表示する
オプションを付与しないと全てのプロセスについて表示する
$ lsof
特定のポート番号で実行中のプロセスを調べる
$ lsof -i:80 -P
特定のファイルを開いているプロセスを特定する
$ lsof /var/log/httpd/access_log
コマンドを指定する
$ lsof -c httpd
ユーザーを指定する
$ lsof -u nginx
ネットワークコネクションを出力する
$ lsof -i
ポート番号を指定する
$ lsof -i:80
複数ポート番号を指定できる
$ lsof -i:80,8080
まとめ
lsofコマンドは多機能なので全てを使いこなすのは難しそうですが、普段の運用で利用するのはほんの一握りの機能でも十分です。まずは基礎を覚えるだけでも、調査と原因究明が捗るようになるので、是非今後も利用していきたいです。