【エルエスオーエフ】

lsof とは?

💡 「今どのファイルを誰が開いてる?」に答えてくれるシステムの見張り番
📌 このページのポイント
lsof の調査パターン lsof List Open Files ポート調査 lsof -i :8080 「誰がこのポート使ってる?」 プロセス調査 lsof -p PID 「このプロセスは何を開いてる?」 ファイル調査 lsof +D /var/log 「このファイルは誰が使ってる?」 Unix の「すべてはファイル」→ lsof で全部見える 通常ファイル ソケット パイプ デバイス 削除済みファイル
lsof の主な調査パターン
ひよこ ひよこ

lsofって何をするコマンドなの?

ペンギン先生 ペンギン先生

「今、どのプロセスがどのファイルを開いているか」を一覧表示するコマンドだよ。名前はList Open Filesの略。Unixでは「すべてがファイル」という思想があるから、通常のファイルだけでなく、ネットワーク接続やパイプも調べられるんだ

ひよこ ひよこ

どういうときに便利なの?

ペンギン先生 ペンギン先生

一番よく使うのは「このポートを使っているのは誰?」を調べるときだね。たとえば lsof -i :8080 と実行すると、ポート8080を使っているプロセスがわかる。「ポートが既に使用中でサーバーが起動できない!」ときの犯人捜しに最適だよ

ひよこ ひよこ

特定のプロセスが開いているファイルを見ることもできるの?

ペンギン先生 ペンギン先生

lsof -p PID でそのプロセスが開いている全ファイルが見えるよ。設定ファイル、ログファイル、ライブラリソケット…全部一覧で出るから、「このプロセスは何にアクセスしているのか」が丸わかりになるんだ

ひよこ ひよこ

ファイルを削除したのにディスクが空かないことがあるって聞いたんだけど?

ペンギン先生 ペンギン先生

まさにlsofの出番だね!Linuxではファイルを削除しても、それを開いているプロセスがいる限りディスク領域は解放されないんだ。lsof | grep deleted で削除済みなのに掴まれているファイルを見つけられる。巨大なログファイルを消したのにディスクが空かないトラブルは、サーバー運用あるあるだよ

ひよこ ひよこ

lsof以外にポートを調べる方法ってあるの?

ペンギン先生 ペンギン先生

ss -tlnp や netstat -tlnp でもポートとプロセスの対応は調べられるよ。でもlsofの強みは「ファイル起点」でも「プロセス起点」でも「ネットワーク起点」でも調査できる汎用性だね。lsof +D /var/log で特定ディレクトリ内のファイルを開いているプロセスを一覧したり、lsof -u username でユーザーが開いているファイルを見たり、切り口が多いのが便利なんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「lsof」って出てきたら「開いているファイルやポートを調べるコマンド」と思えればだいたいOK!
📖 おまけ:英語の意味
「list open files」 = 開いているファイルの一覧
💬 list(一覧表示)open(開いている)files(ファイル)の頭文字を取った名前だよ
← 用語集にもどる