多くの場合、「lsof」は、私が一緒に作業しなければならないマシンにインストールされていませんが、lsofの「機能」は非常に必要です(AIXなど)。 :\
Windows以外の世界で「lsof」のようなアプリケーションはありますか?
更新:例:「/ home/username」ディレクトリを使用するプロセスを知る必要がありますか?
fuser
を知っています。ご使用のシステムでが使用可能かどうかを確認してください。
nix Rosetta Stone は、この種の質問に適したリソースです。 lsof のいくつかの代替案について言及しています(以下を参照)。ただし、lsofはその機能の事実上の標準アプリケーションであることに注意してください。
特定のファイルを開いているプロセスIDを検索するだけの場合は、POSIX準拠のシステムで fuser
を使用できます。
/proc
ディレクトリのあるオペレーティングシステムでは、/proc
の情報を使用して、プロセスで開いているファイル(lsof
の最も一般的な操作モードの逆)にクエリを実行できます。一部のオペレーティングシステムには、そのためのコマンドがあります。
procfiles
はシステムに同梱されています(AIX 5.2以降)。 AIX 5.2パフォーマンスツールの更新 および lsof、pfiles、procfilesコマンドの使用法と例 も参照してください。pfiles
(既存 2.5以降 )。たまたまSolarisを実行している場合、lsof
の代わりにデフォルトでインストールされず、ZFSで窒息する可能性がありますが、pfiles
です。
例えば:
pfiles /proc/*
ユーティリティの実行が少し少ない私のバージョン:
for proc_pid in $(find /proc -maxdepth 1 -name "[0-9]*"); do \
ls -l ${proc_pid}/fd 2>/dev/null \
| grep -q "$search_term" \
&& echo "${proc_pid#/proc/}"; \
done
確かに、すべてのコーナーケースを処理できるわけではありませんが、私のユースケースでは機能しています。
これでうまくいくはずです。次のものを除くすべてのファイル記述子マッピングを提供します。
( find /proc -mindepth 1 -maxdepth 1 \
| grep -E [0-9]+ | xargs -n 1 -I% find %/fd \
| xargs ls -l \
| grep -v "Permission denied" ) 2>/dev/null \
| cut -d' ' -f12- | less
特定のプログラムのマッピングのみに関心があることをすでに知っている場合は、代わりに次のように何かを使用できます。
exec=sshd
pgrep "$exec" | xargs -n 1 ps -p
pgrep "$exec" | xargs -n 1 -I% find /proc/%/fd | xargs ls -l | cut -d' ' -f12- | less