Linuxで開いているファイルを確認するなら「lsof」コマンド!基本から活用例まで徹底解説

Linuxでトラブルシューティングやリソース管理をしていると、「どのプロセスがファイルを使っているのか」「特定のポートを使用しているのはどのプログラムか」といった情報を確認したくなることがあります。
そんなときに便利なのが「lsof(List Open Files)」コマンドです。
このコマンドを使えば、システム上で開かれているすべてのファイルやソケット、パイプ、デバイスとの関連情報を一覧で確認できます。
この記事では、lsofの基本的な使い方から、便利なオプション、活用例までわかりやすく解説します。


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 オプション(ユーザーで絞り込み)

指定したユーザーが開いているファイルを表示します。

lsof -u username

例:現在ログインしているユーザーのファイルを確認

lsof -u $(whoami)

-p オプション(プロセスIDで絞り込み)

特定のPID(プロセスID)で開いているファイルを表示します。

lsof -p 1234

複数のPIDをカンマで区切って指定も可能です。


-c オプション(コマンド名で絞り込み)

コマンド名の頭文字で一致するプロセスを対象にします。

lsof -c ssh

これにより、sshという名前のコマンドが開いているファイルを確認できます。


-i オプション(ネットワーク関連の確認)

特定のポート番号やプロトコルに関連する接続を表示します。

lsof -i

例:TCPの80番ポートを使っているプロセスを探す

lsof -i :80

プロトコルを指定したい場合は、次のようにします:

lsof -iTCP:22

+D オプション(特定ディレクトリ配下のファイル)

指定したディレクトリ内のファイルを開いているプロセスを調べたいときに使います。

lsof +D /var/log

このオプションは便利ですが、検索が再帰的に行われるため、処理に時間がかかることがあります。


-t オプション(PIDのみ表示)

表示をPIDのみに絞ることで、スクリプトでの利用などに便利です。

lsof -t -i :8080

結果をkillコマンドと組み合わせて使えば、特定のポートを使用中のプロセスを簡単に終了させることができます。

kill -9 $(lsof -t -i :8080)

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

ファイルやディレクトリを削除しようとしたときに、「使用中で削除できません」という状況に出会ったことはありませんか?
そんなときは、以下のようにして原因を調べます:

lsof /path/to/file

例:

lsof /var/log/syslog

これにより、どのプロセスがそのファイルを使用しているかが一目でわかります。


lsofでゾンビプロセスやリソースリークを見つける

lsofは、システムの不調時にリソースを消費している正体不明のプロセスを探すのにも役立ちます。

たとえば、削除済みのファイルを開き続けているプロセスを見つけるには次のようにします:

lsof | grep deleted

このように「(deleted)」と表示されるファイルは、すでに削除されたにもかかわらず、プロセスが開き続けている状態です。メモリの無駄遣いやディスク使用量の増加の原因になることがあります。


lsofと組み合わせて使う便利なコマンド

lsofは他のコマンドと組み合わせることで、より高度な管理が可能になります。

lsofとgrepの組み合わせ

lsof -i | grep LISTEN

LISTEN状態のソケットを表示して、どのポートが待ち受け状態なのか確認できます。

lsofとwatchの組み合わせ

動的にファイルのオープン状況を監視するには以下のようにします:

watch -n 1 'lsof -i :80'

これにより、1秒ごとにポート80を使用しているプロセスの情報が更新表示されます。


トラブル対応で役立つlsofの活用例

  • ファイルが削除できない → lsof /path/to/file で使用中のプロセスを確認
  • ポートが競合している → lsof -i :ポート番号 で使用中のプロセスを調査
  • デバイスが取り外せない → lsof /dev/sdX で開いているプロセスを特定
  • 特定ディレクトリを大量に開いているプロセスを特定 → lsof +D /path/to/dir

まとめ

lsofコマンドは、Linuxにおけるトラブルシューティングや日常的な管理において非常に強力なツールです。
開いているファイルを確認するだけでなく、ネットワークの状態確認、リソースの監視、不要なプロセスの特定など多岐にわたる用途に使えます。

何かおかしいと思ったとき、まず最初にlsofで状況をチェックするという習慣をつけるだけでも、問題解決のスピードが格段に上がるはずです。
ぜひ、日常的に使ってみてください。

タイトルとURLをコピーしました