ファイルパスが与えられた場合、どのプロセスがそれを作成(および/または読み取り/書き込み)するかをどのように判断できますか?
lsofコマンド(すでにいくつかの回答で述べられています)は、実行時にどのプロセスがファイルを開いているかを通知します。 lsof
は、ほとんどすべてのUNIXバリアントで使用できます。
lsof /path/to/file
lsof
は、2マイクロ秒前に開かれ、1マイクロ秒前に閉じられたファイルについては通知しません。特定のファイルを監視し、アクセスしたときに反応する必要がある場合は、さまざまなツールが必要です。
少し前もって計画できる場合は、ファイルをLoggedFSファイルシステムに置くことができます。 LoggedFSは、階層内のファイルへのすべてのアクセスをログに記録する Fuse スタックファイルシステムです。ロギングパラメータは高度に設定可能です。ヒューズは すべての主要なunices で利用できます。ファイルが作成されたディレクトリへのアクセスをログに記録する必要があります。提供されているサンプル構成ファイルから始めて、 このガイド に従って微調整します。
loggedfs -l /path/to/log_file -c /path/to/config.xml /path/to/directory
tail -f /path/to/log_file
多くの労働組合が他の監視施設を提供している。 Linuxでは、比較的新しい 監査サブシステム を使用できます。それについての文献はあまりありません(しかし、loggedfsについてはそれ以上です)。 このチュートリアル または afewexamples または auditctl
manページ 。ここでは、デーモンが起動していることを確認してから、auditctl
を実行するだけで十分です。
auditctl -w /path/to/file
(古いシステムにはauditctl -a exit,always -w /path/to/file
)でログを監視します/var/log/audit/audit.log
。
まあ、lsof
を繰り返し実行することもできます。運が良ければ、犯人は表示するまでファイルを開いたままにしておきます。すなわち:
$ lsof -r1 /path/to/file
または多くのファイル
$ lsof -r1 /path/to/folder/*
これにより、特定の時点で、1秒に1回、指定されたパスへのすべてのアクセスがリストされます。これには、ファイルにアクセスするプロセスのPIDのリストが含まれます。
それがうまくいかない場合、つまり、ファイルが非常に速く開かれたり閉じられたりする場合(これはよくあることです)、より複雑なツールを探す必要があると思います。たぶん loggedfs 何かかもしれない?
ハックランド
毎秒1回のlsof
が機能しない場合は、もちろん、lsofをできるだけ速く繰り返し実行するwhileループをハックすることができます。お気に入り:
$ while true; do lsof /paht/to/file; done;
きれいではありませんが、知っている人はそれを行うだけかもしれません。
lsof
を使用できます:
$ lsof /tmp/file
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
less 4737 wena 4r REG 8,6 90700 1643536 /tmp/file
less
という名前のプロセスは、ファイル "/ tmp/file"を開いたままにしていると言います。
[〜#〜] note [〜#〜]:不思議なことに、geany
またはnano
を使用すると、動作しません。より良い提案を楽しみにしています。
ls
とgrep
を使用して、Chromeで使用されるファイルを見つけることができます
$ ls -l /proc/*/fd | grep "chrome"
lrwx------ 1 ba abc 64 Jul 16 22:19 104 -> /home/abc/.config/google-chrome/Default/Cookies
lr-x------ 1 abc abc 64 Jul 16 22:19 113 -> /opt/google/chrome/nacl_irt_x86_64.nexe
lrwx------ 1 abc abc 64 Jul 16 22:19 121 -> /home/abc/.cache/google-chrome/Default/Cache/data_0
lrwx------ 1 abc abc 64 Jul 16 22:19 122 -> /home/abc/.cache/google-chrome/Default/Cache/data_1
lrwx------ 1 abc abc 64 Jul 16 22:19 123 -> /home/abc/.cache/google-chrome/Default/Cache/data_2
lr-x------ 1 abc abc 64 Jul 16 22:19 125 -> /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic
もう1つの方法は、lsof
およびgrep
を使用することです
$ lsof | grep "chrome"
chrome 2204 abc cwd DIR 8,5 4096 1441794 /home/abc
chrome 2204 abc rtd DIR 8,5 4096 2 /
chrome 2204 abc txt REG 8,5 87345336 5111885 /opt/google/chrome/chrome
chrome 2204 abc mem REG 8,5 4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache/data_3
chrome 2204 abc mem REG 8,5 1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache/data_2
chrome 2204 abc mem REG 8,5 270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache/data_1
chrome 2204 abc mem REG 8,5 45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache/data_0
lsof |grep (filename)
これにより、現在ファイルを使用しているプロセスが表示されます。