"lsof"コマンドの代替?

"lsof"コマンドの代替?

多くの場合、lsof私が使用する必要があるマシンにはインストールされていませんが、lsofその「パフォーマンス」は非常に必要です(例えば、AIX)。 :\

lsofWindows以外の世界にも同様のアプリケーションはありますか?

たとえば、どのプロセスがこのディレクトリを使用しているかを知る必要がありますか/home/username

答え1

わかりましたfuserシステムで利用可能であることを確認してください。

答え2

これUnix ロゼッタストーンは、このような質問に答えるための素晴らしいリソースです。いくつかの選択肢について言及します。ラソフ(下記参照)。しかし、lsofはその機能の事実上の標準的なアプリケーションです。

特定のファイルを開いたプロセスIDを見つけるには、次のようにします。fuserすべてのPOSIX互換システムで。

ディレクトリがあるオペレーティングシステムでは、を渡すことが/procできます。一部のオペレーティングシステムには、次のコマンドがあります。lsof/proc

答え3

Solarisを実行しているlsof場合pfiles

たとえば、

pfiles /proc/*

答え4

これはトリックを行う必要があります。以下を除くすべてのファイル記述子マッピングを提供します。

  • 表示する権限がない、または
  • 「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

関連情報