web-dev-qa-db-ja.com

「lsof」コマンドの代替?

多くの場合、「lsof」は、私が一緒に作業しなければならないマシンにインストールされていませんが、lsofの「機能」は非常に必要です(AIXなど)。 :\

Windows以外の世界で「lsof」のようなアプリケーションはありますか?

更新:例:「/ home/username」ディレクトリを使用するプロセスを知る必要がありますか?

21
LanceBaynes

fuser を知っています。ご使用のシステムでが使用可能かどうかを確認してください。

21
enzotib

nix Rosetta Stone は、この種の質問に適したリソースです。 lsof のいくつかの代替案について言及しています(以下を参照)。ただし、lsofはその機能の事実上の標準アプリケーションであることに注意してください。

特定のファイルを開いているプロセスIDを検索するだけの場合は、POSIX準拠のシステムで fuser を使用できます。

/procディレクトリのあるオペレーティングシステムでは、/procの情報を使用して、プロセスで開いているファイル(lsofの最も一般的な操作モードの逆)にクエリを実行できます。一部のオペレーティングシステムには、そのためのコマンドがあります。

たまたまSolarisを実行している場合、lsofの代わりにデフォルトでインストールされず、ZFSで窒息する可能性がありますが、pfilesです。

例えば:

pfiles /proc/*

8
jlliagre

ユーティリティの実行が少し少ない私のバージョン:

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

確かに、すべてのコーナーケースを処理できるわけではありませんが、私のユースケースでは機能しています。

2
Bryce Schober

これでうまくいくはずです。次のものを除くすべてのファイル記述子マッピングを提供します。

  • 表示する権限がない、または
  • 文字列「Permission denied」を含むファイル用です
( 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
0
Parthian Shot