Lsof

lsof（エルエスオーエフ）コマンドは"list open files"の意味であり、多くのUnix系オペレーティングシステムで、オープン中のファイルやそのファイルをオープンしているプロセスのリストを出力するコマンドである。このオープンソースのユーティリティは、パデュー大学コンピューティングセンターの元アソシエートディレクター、ビクター・A・アベルによって開発・サポートされた。lsofはいくつかのUnix系OSで動作し、サポートされている。

例 
オープン中のファイルには、すべてのプロセスがオープンしているディスク上のファイル、名前付きパイプ、ネットワークソケット、デバイスが含まれる。使用例の1つとしては、（特定できない何らかの）ファイルが使用中のであるために、ディスクがアンマウントできない時である。オープン中のファイルの一覧を確認することで（必要に応じてフィルタをかけることで）ファイルを使用しているプロセスを特定することができる。# lsof /var
COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
syslogd     350     root    5w  VREG  222,5        0 440818 /var/adm/messages
syslogd     350     root    6w  VREG  222,5   339098   6248 /var/log/syslog
cron        353     root  cwd   VDIR  222,5      512 254550 /var -- atjobs特定のデーモンに関連づけられているポートを確認するには、次のようにする。# lsof -i -n -P | grep sendmail
sendmail  31649    root    4u  IPv4 521738       TCP *:25 (LISTEN)上のコマンドの実行結果より、「sendmail」が標準ポート "25" 版をlistenしていることが確認できる。

 -i
 IPソケットをリストする。
 -n
 ホスト名の解決を行わない。（つまり、DNSを使用しない）
 -P
 ポート名の解決を行わない。（つまり、ポート名の代わりにポート番号をリストする）

他には、lsof -Uを使用すれば、Unixソケットを一覧することもできる。

lsofの出力 
lsofの出力は以下の内容を表している。

 そのファイルをオープンしているプロセスのID（PID）
 そのプロセスのグループID（PGID）（オプション）
 親プロセスのプロセスID（PPID）（オプション）
 プロセスが実行しているコマンド
 プロセスのオーナー
 プロセスが使用している、実行中のテキストファイルおよび共有ライブラリを含む、すべてのファイルのそれぞれに対して以下の項目を表示する
 可能なら、そのファイルのファイル記述子の数
 ファイルのアクセスモード
 ファイルのロック状態
 ファイルのデバイス数
 ファイルのinode数
 ファイルのサイズまたはオフセット
 ファイルが格納されているファイルシステムの名前
 ファイルのパス名の利用可能なすべてのコンポーネント
 ファイルのストリームコンポーネントの名前
 ファイルのローカルおよびリモートのネットワークアドレス
 ファイルのTLIネットワーク（主にUDP）の状態
 ファイルのTCPの状態、読み込みキューの長さ、および、書き込みキューの長さ
 ファイルのTCPウィンドウの読み込みおよび書き込みの長さ（Solarisのみ）
 その他のファイルまたはファイルタイプ固有の値

関連項目 

 fuser
 stat (Unix)
 netstat
 strace
 UNIXユーティリティの一覧
 SysinternalsのProcess Explorer  - Windows向けの同等コマンド (Find menu -> Find Handle or DLL)

脚注

外部リンク 

  

 lsof-lメーリングリスト
 sourcesのミラー
 
 
 Using lsof
 Lsof FAQ
 Sam NelsonのPCPスクリプト - Solarisでの"lsof -i"の代替となるツール
 Glsof - lsofを元に作られた2種類のユーティリティ（クエリとファイルモニタ）
 Sloth - macOS用のlsofのグラフィカルインターフェイス
 LSOFのmanページ

UNIXのソフトウェア