Linuxコマンド:使用中のファイル(ポート)を確認する(lsof)

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

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

動作環境

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

cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

lsofコマンド

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

構文

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

主なオプション

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

出力項目

出力項目 説明
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より)

スポンサーリンク