はじめに
こんにちは!今回はlsofコマンドについて解説します。
lsofは、開いているファイルを一覧表示するコマンドです。“list open files"の略ですね。ポート競合の調査やプロセスが何のファイルを使っているか確認する場合に便利。サーバー管理やトラブルシューティングの現場で毎日使われるコマンドです。
「どのプロセスがどのファイルを開いているか調べる機」って感じです。
lsofコマンドとは
lsofは、Linuxシステムで開かれているすべてのファイル、ソケット、ディレクトリを一覧表示するコマンドです。
ファイルだけでなく、ネットワークソケット、パイプ、デバイスなど、Linuxの"ファイル"として扱われるすべてのものが対象。特定のプロセスが開いているファイル、特定のポートを使用しているプロセス、削除されたが開かれたままのファイルなど、様々な調査ができます。システムの状態を把握するのに欠かせないツールですね。
基本構文
|
|
オプションなしで実行すると、すべての開いているファイルが表示されます。
主なオプション
| オプション | 説明 |
|---|---|
-p PID |
指定したプロセスIDで開かれているファイル |
-u ユーザー |
指定したユーザーで開かれているファイル |
-c コマンド |
指定したコマンドで開かれているファイル |
-i |
ネットワークファイルのみ表示 |
-i :ポート番号 |
指定したポート番号を使用しているプロセス |
-d FD |
指定したファイルディスクリプタ |
+D ディレクトリ |
指定したディレクトリ配下のファイル |
-n |
ホスト名を表示しない(高速化) |
-a |
複数条件のAND(デフォルトはOR) |
-t |
PIDのみ表示 |
使用例
例1: すべてのオープンファイルを表示
|
|
実行結果:
|
|
全プロセスのオープンファイルを表示。数が多いため通常は制限します。
例2: 特定プロセスのオープンファイル
|
|
実行結果:
|
|
プロセスID 1234 が開いているファイル一覧。
例3: ユーザーが開いているファイル
|
|
実行結果:
|
|
www-dataユーザーが開いているファイル。Webサーバーのファイルアクセス確認に便利。
例4: 特定ポートを使用しているプロセス
|
|
実行結果:
|
|
ポート80 を開いているプロセス。ポート競合調査に最適。
例5: コマンド名で検索
|
|
実行結果:
|
|
nginxコマンドで実行されているプロセスのオープンファイル。
例6: ディレクトリ配下のオープンファイル
|
|
実行結果:
|
|
/var/logディレクトリ配下でオープンしているファイル。
例7: PIDのみ表示
|
|
実行結果:
|
|
ポート 3000 を使用しているプロセスのPIDのみ表示。スクリプトでの利用に便利。
例8: ネットワークファイルのみ表示
|
|
実行結果:
|
|
-iフラグでネットワークファイルのみ表示。
例9: TCP接続のみ表示
|
|
実行結果:
|
|
TCPソケットのみ表示。ネットワークサービスの確認。
例10: 削除されたがオープンなファイル
|
|
実行結果:
|
|
削除されたがプロセスが開いたままのファイル。ディスク容量の大きな削除ファイルを発見可能。
Tips・注意点
大量の出力を高速化
|
|
-nでホスト名解決を省略、-Pでポート番号を数値で表示。大幅に高速化。
複数条件の組み合わせ
|
|
デフォルトでOR条件。AND条件にするには-aを使用。
ファイアウォール等での確認
|
|
lsofでネットワーク情報を見るにはsudoが必要な場合があります。
実践的な使い方
ポート競合の解決
|
|
開発中のポート競合を調査・解決。
ディスク容量の確認
|
|
削除されたファイルの合計容量を確認。ディスク空き容量を確保。
プロセスの使用リソース確認
|
|
現在のシェルが開いているファイル数を表示。
まとめ
lsofコマンドのポイント:
- 開いているファイルとソケットを一覧表示
- -p: プロセスID で検索
- -u: ユーザーで検索
- -i: ネットワークファイル表示
- -i :ポート: ポート使用プロセス確認
- -c: コマンド名で検索
- +D: ディレクトリ配下を検索
- -t: PIDのみ表示(スクリプト用)
- よく使う組み合わせ:
lsof -i :ポート,lsof -p PID,lsof -u ユーザー
トラブルシューティングとシステム監視の強力なツール。ポート競合やファイルロック問題の調査に欠かせません!