「lsof」コマンドの代替手段?


20

多くの場合、「lsof」は作業する必要のあるマシンにはインストールされませんが、lsofの「機能」が非常に必要になります(AIXなど)。:\

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

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


1
もっと具体的にお願いします。AIX(lsofで確実にサポートされています)以外のシステムを念頭に置いていますか?または、念頭に置いているlsofの特定の使用方法は1つだけですか?一般的に:なぜlsofではありませんか?
rozcietrzewiacz

Linux 2.6.18-92.el5 GNUを使用していますが、lsofがありません。また、lsofを使用する機能もありません:(
SSH This

回答:


20

私は知っていfuserます、あなたのシステムで利用可能かどうかを確認してください。


システムで開いているすべてのファイルを一覧表示するためのパラメーターとしてfuserを指定する必要があるのは何ですか?:O ty!
ランスベインズ

2
このコマンドsudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | lessは、にマウントされたファイルシステムで開いているファイルを持つすべてのプロセスを表示できます/。特定のヘルプについては、manページを参照してください。
-enzotib

TY!次のような出力が得られます:pastebin.com/raw.php ?i=2z19g6Rk-私はそれをグーグルで検索しましたが、たとえば「gnome-screensav」ではなく「gnome-screensaver」を出力する方法が見つかりません。ワイドコマンド名でどのように出力できますか?:O
ランスベインズ

:それがために同じ出力を与えるpastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes

このようなもの:sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | while read user pid flags rest; do printf '%10s %10s %10s %s\n' $user $pid $flags "$(</proc/$pid/cmdline)"; done | less
enzotib

15

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

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

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


8

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

例えば:

pfiles /proc/*


2

私のバージョンでは、ユーティリティの実行が少し少なくなっています。

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

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


0

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

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

-2

時々lsofインストールされます/usr/sbin

/usr/sbinがの一部ではない場合$PATH、インストールされたコマンドを見逃す可能性があります。

で確認してください

whereis lsof
lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz

OPは、lsofがインストールされておらず、代替手段を求めていると述べました...
ジェフシャラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.