Linuxでトラブルシューティングやリソース管理をしていると、「どのプロセスがファイルを使っているのか」「特定のポートを使用しているのはどのプログラムか」といった情報を確認したくなることがあります。
そんなときに便利なのが「lsof(List Open Files)」コマンドです。
このコマンドを使えば、システム上で開かれているすべてのファイルやソケット、パイプ、デバイスとの関連情報を一覧で確認できます。
この記事では、lsofの基本的な使い方から、便利なオプション、活用例までわかりやすく解説します。
lsof
は「List Open Files」の略で、LinuxやUNIX系システムで開いているファイルの一覧を表示するコマンドです。
Linuxでは、すべてがファイルとして扱われるため、通常のファイルに限らず、ディレクトリ、ネットワークソケット、デバイスファイルなども「ファイル」として表示されます。
たとえば、特定のプロセスがどのファイルを開いているか、あるいは特定のポートを使っているのはどのプログラムかなどを把握したいときに使われます。
インストールされていない場合は、以下のようにしてインストールできます:
# Debian系(Ubuntuなど)
sudo apt install lsof
# Red Hat系(CentOS、Rocky Linuxなど)
sudo yum install lsof
まずは最も基本的な使い方から見てみましょう。
lsof
このコマンドを実行すると、現在開かれているすべてのファイル情報が表示されます。
表示される情報は非常に多いため、通常はオプションをつけて絞り込みながら使用します。
指定したユーザーが開いているファイルを表示します。
lsof -u username
例:現在ログインしているユーザーのファイルを確認
lsof -u $(whoami)
特定のPID(プロセスID)で開いているファイルを表示します。
lsof -p 1234
複数のPIDをカンマで区切って指定も可能です。
コマンド名の頭文字で一致するプロセスを対象にします。
lsof -c ssh
これにより、ssh
という名前のコマンドが開いているファイルを確認できます。
特定のポート番号やプロトコルに関連する接続を表示します。
lsof -i
例:TCPの80番ポートを使っているプロセスを探す
lsof -i :80
プロトコルを指定したい場合は、次のようにします:
lsof -iTCP:22
指定したディレクトリ内のファイルを開いているプロセスを調べたいときに使います。
lsof +D /var/log
このオプションは便利ですが、検索が再帰的に行われるため、処理に時間がかかることがあります。
表示をPIDのみに絞ることで、スクリプトでの利用などに便利です。
lsof -t -i :8080
結果をkill
コマンドと組み合わせて使えば、特定のポートを使用中のプロセスを簡単に終了させることができます。
kill -9 $(lsof -t -i :8080)
ファイルやディレクトリを削除しようとしたときに、「使用中で削除できません」という状況に出会ったことはありませんか?
そんなときは、以下のようにして原因を調べます:
lsof /path/to/file
例:
lsof /var/log/syslog
これにより、どのプロセスがそのファイルを使用しているかが一目でわかります。
lsofは、システムの不調時にリソースを消費している正体不明のプロセスを探すのにも役立ちます。
たとえば、削除済みのファイルを開き続けているプロセスを見つけるには次のようにします:
lsof | grep deleted
このように「(deleted)」と表示されるファイルは、すでに削除されたにもかかわらず、プロセスが開き続けている状態です。メモリの無駄遣いやディスク使用量の増加の原因になることがあります。
lsofは他のコマンドと組み合わせることで、より高度な管理が可能になります。
lsof -i | grep LISTEN
LISTEN状態のソケットを表示して、どのポートが待ち受け状態なのか確認できます。
動的にファイルのオープン状況を監視するには以下のようにします:
watch -n 1 'lsof -i :80'
これにより、1秒ごとにポート80を使用しているプロセスの情報が更新表示されます。
lsof /path/to/file
で使用中のプロセスを確認lsof -i :ポート番号
で使用中のプロセスを調査lsof /dev/sdX
で開いているプロセスを特定lsof +D /path/to/dir
lsof
コマンドは、Linuxにおけるトラブルシューティングや日常的な管理において非常に強力なツールです。
開いているファイルを確認するだけでなく、ネットワークの状態確認、リソースの監視、不要なプロセスの特定など多岐にわたる用途に使えます。
何かおかしいと思ったとき、まず最初にlsof
で状況をチェックするという習慣をつけるだけでも、問題解決のスピードが格段に上がるはずです。
ぜひ、日常的に使ってみてください。