lsof-出力を物理ファイルのみに制限する-方法


30

lsofに物理ファイル(ソケットではなく、TCP / IP接続ではなく、物理ファイルのみ)のみをリストする必要があることを通知するにはどうすればよいですか?


まず、必要なものを決定する必要があります。「物理ファイル」と言うのは一般的すぎます。lsofは、ファイル記述子で開かれたファイルを提供します。スレッドによってメモリマップファイルとして開かれたファイルを提供します。プロセスによって開かれたライブラリファイルが提供されます。これらはすべて物理ファイルですが、使用方法は異なります。
マイケルマルティネス

回答:


37

いくつかのマニュアルページを見てみると、次のコマンドを使用しているようです:

sudo lsof /

これにより、/ディレクトリ内のすべての開いているファイルが一覧表示されます。これはLinuxファイルシステム上のすべてです。テストしたばかりで、REGとDIRのみが表示されます。

その他の例:

lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /

0-999は、ファイル記述子番号を持つファイルに制限します。


2
FIFOも含まれます。
カイルブラント

1
素敵でシンプル。最後の列だけが必要な場合は、追加できます| awk {'print $ 9'}興味深い。出力にもfifoが表示されません。Fedora 12およびCentOS 5.3
エゴリー

CentOS 5.2とUbuntu 9.04はfifoを返しますが、変更される可能性がありますが、fifoが存在しますか?私は最初にそれをgrepし、そこにあることを確認します/
カイルブラント

また、私はただピクピクしていました、彼はただノイズを望んでいないように聞こえます、そしておそらくあまり多くのFIFOはないでしょう。
カイルブラント

4
lsof /には、ルートファイルシステム上のファイルのみが含まれます。複数のファイルシステムがマウントされている場合、それらは出力に表示されません。最善の方法は、grepを使用することです。
ジェームズ

9

スイッチがあるかもしれませんが、grepでフィルタリングすることを気にしない場合はsudo lsof | egrep 'REG|DIR'、「物理ファイル」が通常のファイルとディレクトリを意味すると仮定して、できます。

man lsofその列にある可能性のあるすべてのタイプについては、manページのOUTPUT :: TYPEセクションを参照してください。


24
スイッチがあるかもしれませんが、マンページは誰かの博士論文のように
見え

1
うん... lsof男は非常に読みにくいです
;;

そのコメントに+1。:)
エゴリー

十分なクライアントとVPNサーバーで、lsofのは私のためのオプションではありませんのでgreping、戻りません
オハッドコーエン

@OhadCohen lsofは、探しているものを制限すると返されます。マニュアルページ(MEM、CWD、PDなど)で"FD"を参照してください
マイケル・マルティネス

2

これは私にとって完璧で、私がやったことです:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

-F nオプションは、lsofそれだけでプリントアウトするようになります名前開いているファイルのを。開いているファイルの名前を持つ各出力行は、1文字nで始まり、すぐに名前が続きます。通常のファイルは常に、ファイルの完全な完全修飾名になります。grep ^n/始まる名前を持つ行だけを選択します/(絶対、完全修飾ファイル名を意味します)。したがって、開いているポート、ソケット、パイプ(FIFOなど)などcut -c2-を削除nします。最初の文字を削除すると、ファイル名のみが残ります。そして最後に、sort -u重複エントリを削除します。

注意点として、これには、名前がで始まる限り、通常ではないファイルが含まれます/。たとえば、次で始まるすべてのファイルが含まれます。

  • / dev
  • / proc
  • / sys

また、OSによっては他のものもあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.