特定のディレクトリに書き込みを行っているプロセスを見つけます


19

ディレクトリ/ some / dirがあり、常に新しいファイルがそこに表示されることがわかります。これらのファイルを作成しているプロセスを確認するにはどうすればよいですか?

回答:


18

試してみてくださいlsof +r2 | grep '/some/dir'。これにより、/ some / dirにアクセスするプロセスが表示され、2秒ごとに更新されます。


2
Thaks、これは最初に開いているファイルのリスト全体を生成し、次に/ some / dirでフィルタリングするため、必要なものに非常に近いです。ただし、プロセスがファイルを非常に迅速に作成し、それらを開いたままにしない場合、上記の一部が見逃される場合があることを理解しています。その場合、唯一の選択肢は監査サブシステムだと思いますよね?
homer5439

あなたの仮定は正しいです。もう一つのアイデアはinotifywaitを使用することで、参照linux.die.net/man/1/inotifywait
weeheavy

おかげで、以前にinotifyツールを検討していましたが、それらは純粋にファイルシステムレベルで動作し、だれが何をしたかについての情報を提供できないようです。
homer5439

18

カーネルauditサブシステムを使用する

auditctl -w /some/dir/ -p war -k whatsgoingon

/ some / dir /の下で何かが起こるのを待つフックを設定します。

次に、auditdデーモンが実行されていることを確認します。その後、ファイルが表示さ/var/log/auditd.logれ、システム内のどこから、または何がどこで、どのプロセスによって書き込まれ、読み取られるかを待ちます。


おかげで、これはまさにそれを行うように見えますが、おそらくデフォルトではどこにもない監査ツールをインストールする必要があります。ただし、その情報が必要な場合は、いつでもインストールできます。
homer5439

これを見た人へのメモとして:トップレベルのディレクトリ(カーネルによって禁止されている)にウォッチを配置することはできません
トニーセピア

1
それは本当に効率的な方法です!どうもありがとう!!!ところで、完了したら、すべてのフックを削除して、監査ログが永遠に書き込まれないようにすることができますauditctl -Dauditctl -lすべてのフックをリストするために使用できます。
ロバート

0

lsof 助けられる:

# lsof -r1 /some/dir/*

1
ありがとう。上記のコマンドは、既存のファイルにアクセスしているユーザーのみを示し、新しく作成されたファイルには何も表示しないのは正しいですか?私の理解では、/ some / dir / *は、コマンドが呼び出されたときに存在するファイルのリストに展開されます。
homer5439
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.