lsof(エルエスオーエフ)コマンドは、
Unix系オペレーティングシステムにおいて、開かれているファイルとそれらのファイルを操作しているプロセスをリストアップするためのコマンドです。 "list open files" の略称であり、システム管理者がシステムの状態を把握し、問題解決を行う上で非常に重要なツールとなっています。このユーティリティは、元
パデュー大学コンピューティングセンターのアソシエートディレクターであったビクター・A・アベル氏によって開発され、現在もオープンソースとして広く利用されています。
lsofの主な機能
lsofコマンドは、ディスク上のファイルだけでなく、名前付きパイプ、ネットワークソケット、デバイスなど、システム内でオープンされているあらゆる種類のファイルを監視対象としています。具体的には、以下のような情報を出力することが可能です。
プロセス情報
プロセスID (PID): ファイルをオープンしているプロセスの識別番号。
プロセスグループID (PGID): プロセスが属するグループの識別番号 (オプション)。
親プロセスID (PPID): プロセスの親プロセスの識別番号 (オプション)。
コマンド: プロセスが実行しているコマンド名。
オーナー: プロセスを実行しているユーザー。
ファイル情報
ファイル記述子: ファイルに割り当てられた番号。
アクセスモード: ファイルの読み取り、書き込み権限など。
ロック状態: ファイルがロックされているかどうか。
デバイス数: ファイルが存在するデバイスの識別番号。
inode数: ファイルシステムのinode番号。
サイズ/オフセット: ファイルのサイズまたはオフセット。
ファイルシステム: ファイルが存在するファイルシステムの名前。
パス名: ファイルの完全なパス。
ストリームコンポーネント: ファイルのストリームコンポーネントの名前。
ネットワークアドレス: ファイルのローカルおよびリモートのネットワークアドレス。
TLIネットワーク状態: TLIネットワーク(主にUDP)の状態。
TCP状態: TCP接続の状態、読み込みキュー、書き込みキューの長さ。
TCPウィンドウ: TCPウィンドウの読み込みおよび書き込みの長さ (Solarisのみ)。
その他: ファイルタイプ固有の情報。
lsofの活用例
ディスクアンマウント時のトラブルシューティング: ディスクが使用中のためアンマウントできない場合、lsofを使ってどのプロセスがファイルを使用しているかを特定できます。これにより、アンマウントを妨げているプロセスを停止させることができます。
ネットワークポートの監視: 特定のデーモンがどのポートをリッスンしているかを確認できます。例えば、`lsof -i :25` を実行することで、ポート25を使用しているプロセスを特定できます。
Unixソケットの確認: `lsof -U` コマンドを使用することで、Unixソケットの一覧を表示できます。
ファイルシステムの監視: どのプロセスが特定のファイルやディレクトリにアクセスしているかを監視できます。
lsofのオプション
lsofコマンドには、様々なオプションが用意されており、目的に応じて出力をカスタマイズできます。
`-i` : IPソケットをリスト表示します。
`-n` : ホスト名の解決を行いません。(DNSを使用しません)
`-P` : ポート名の解決を行いません。(ポート番号を表示します)
`-U` : Unixソケットを一覧表示します。
他の関連ツール
fuser: ファイルやファイルシステムを使用しているプロセスを特定するためのコマンドです。
stat (Unix): ファイルやファイルシステムの情報を表示するコマンドです。
netstat: ネットワーク接続やルーティングテーブルを表示するコマンドです。
strace: システムコールのトレースを行うコマンドです。
Sysinternals Process Explorer: Windows向けの同等ツールで、開かれているハンドルやDLLを検索できます。
まとめ
lsofコマンドは、システム管理者がオープン中のファイルとそれを利用しているプロセスを把握するための強力なツールです。ディスクのアンマウント、ネットワークポートの監視、ファイルシステムの監視など、様々な場面で活用できます。lsofの豊富なオプションを使いこなすことで、システムのトラブルシューティングやパフォーマンス分析に役立てることができます。