lsofの実務的な使い方まとめ|Linux障害調査で必須の活用パターン

  • URLをコピーしました!

lsof(List Open Files)は、Linux障害対応において

  • 原因特定のスピード
  • 再現性のある調査
  • 「なぜ起きているか」の説明力

を一気に引き上げてくれる必須コマンドです。

本記事では、マニュアルには載らない実務で本当に使うlsofの使い方を、 障害シナリオ別に整理します。

目次

lsofとは何をするコマンドか

lsof は「プロセスがどのファイル(ソケット含む)を掴んでいるか」を一覧表示します。

Linuxでは、

  • ファイル
  • ディレクトリ
  • デバイス
  • ソケット(TCP/UDP)

すべてが「ファイル」として扱われます。

つまり lsof は、

「何が、何を、なぜ離さないのか」

を可視化するコマンドです。

まず覚えるべき基本形

すべて表示(基本)

lsof

※ 出力量が膨大なため、実務ではほぼ使いません。

特定ユーザーのプロセス

lsof -u apache

特定PID

lsof -p 1234

【最重要】削除したのに空かないディスク調査

df と du が一致しない場合、真っ先に確認すべきです。

削除済みだが解放されていないファイル

lsof | grep deleted

または推奨:

lsof +L1

意味:

  • リンク数が 0
  • = ファイルは削除済み
  • = しかしプロセスが保持中

dfに反映され続ける原因です。

対処方法

systemctl restart <service>

もしくは:

kill <PID>

ポート競合・LISTEN調査

特定ポートを使用しているプロセス

lsof -i :80

LISTEN状態のみ表示

lsof -iTCP -sTCP:LISTEN

「ポートが使われていてサービスが起動しない」時の定番です。

プロトコル指定

lsof -iTCP
lsof -iUDP

ネットワークトラブル調査

特定IPとの通信状況

lsof -i @192.168.1.10

特定ポート+IP

lsof -i @192.168.1.10:443

アプリケーション視点で通信を追えるのが強みです。

NFS・マウント解除できない問題

「umountできない」「device is busy」と出る場合:

lsof +D /mnt/nfs

どのプロセスが掴んでいるか一発で分かります。

ディレクトリ配下を掴んでいるプロセス

特定ディレクトリ配下

lsof +D /var/log

※ 大規模ディレクトリでは負荷が高いので注意

よく使う実務オプションまとめ

オプション意味
-pPID指定
-uユーザー指定
-iネットワーク関連
+L1削除済みファイル検出
+Dディレクトリ配下検索

実務での鉄板調査フロー

  1. df / du で異常検知
  2. lsof +L1 で削除済み確認
  3. lsof -i でポート確認
  4. 必要に応じてPID・ユーザー絞り込み

この流れを覚えておけば、ディスク・NW系障害の8割は即解決できます。

よくある失敗

  • lsof を実行せず再起動
  • 原因不明のまま rm -rf
  • プロセスを理解せず kill -9

「なぜ掴んでいるのか」を確認することが重要です。

まとめ

lsof は単なる調査コマンドではなく、

「Linuxが今何に困っているかを教えてくれる通訳」

です。

障害対応が速い人ほど、

  • lsof +L1
  • lsof -i

反射的に叩いています

ぜひ本記事を、現場で即使えるlsof辞書として活用してください。

目次