Linuxで使用中のファイル(ポート)を確認する方法(lsof)

Linuxで使用中のファイル(ポート)を確認する方法(lsof)

Linuxでは、一般的なファイルだけでなく、ネットワークソケット・デバイスドライバー・プロセスなども「ファイル」として扱われるため、lsofコマンドで開いているファイルを調べることで、どのプロセスがファイルやネットワークソケットを開いていかを確認することができます。

そこでここでは、lsofコマンドの基本的な使用方法を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.4.1708

lsofコマンドの使い方

最小構成でインストールしたCentOS 7にはlsofコマンドはないので、yumでインストールする必要があります。

構文

lsof [オプション[:[ポート番号|サービス]] [ファイル|プロセス]

主なオプション

オプション説明
-Pポート番号をサービス名に変換しません。
-cプロセス名を指定します。
-iネットワークソケットファイルを表示します。
-n名前解決せずにIPアドレスで表示します。
-pプロセスIDを指定します。
-aAND条件で絞り込みます。

出力項目

出力項目説明
COMMAND実行中のプログラム
PIDプロセス番号
USER実行ユーザー
FDファイルディスクリプタ
TYPEファイル種別
DEVICEデバイス番号
SIZE/OFFファイルサイズ
NODEプロトコル
NAMEファイルまたはポート

使用例

lsofコマンドで表示できるファイルやポートは、lsofコマンドを実行するユーザーに対し読み取り権限が与えられているものに限られるため、管理者権限での実行をおすすめします。

すべての使用中ファイルを表示するには

# lsof

特定のプロセスIDが使用中のファイルを調べるには

# lsof -p 12345

特定のプロセス名が使用中のファイルを調べるには

# lsof -c httpd

特定のユーザが使用中のファイルを調べるには

# lsof -u hoge

特定のファイルを開いているプロセスを調べるには

# lsof /root/sample.txt

特定のファイルを開いているプロセスに、HUPシグナルを送るには

# kill -HUP `lsof -t /root/sample.txt`

特定のプロセスIDが開いているIPv4ソケットファイルを調べるには

# lsof -i 4 -a -p 1234

次のいずれかの条件に一致するプロセス、もしくはユーザーによってい開かれているファイルを調べるには

  • プロセスIDが456、123、789のいずれか
  • ユーザー名がhoge
  • ユーザーIDが1234
# lsof -p 456,123,789 -u 1234,hoge

開いている(待受けている)ポートを調べるには

# lsof -i -sTCP:LISTEN -P

あとがき

 lsofコマンドは「list open files」という言葉に由来しているようです。(manより)