Узнайте, какой процесс записывает в определенный каталог


19

У меня есть каталог / some / dir, и я вижу, что новые файлы появляются там все время. Как мне узнать, какой процесс создает эти файлы?

Ответы:


18

Попробуй lsof +r2 | grep '/some/dir'. Это покажет процессы, обращающиеся к / some / dir, и обновится каждые 2 секунды.


2
Спасибо, это довольно близко к тому, что мне нужно, так как сначала создается полный список открытых файлов, а затем фильтры по / some / dir. Однако, если процессы создают файлы очень быстро и не держат их открытыми, я понимаю, что выше может даже не хватать некоторых. Я думаю, что в этом случае единственным вариантом является подсистема аудита, верно?
homer5439

Ваше предположение верно. Другая идея заключается в использовании inotifywait, см. Linux.die.net/man/1/inotifywait
субботу,

спасибо, я раньше рассматривал инструменты inotify, однако обнаружил, что они работают исключительно на уровне файловой системы и, похоже, не могут предоставить информацию о том, кто что сделал.
homer5439

18

Использовать auditподсистему ядра

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

Это устанавливает ловушку в ожидании того, что что-то происходит в / some / dir /.

Затем убедитесь, что у вас auditdзапущен демон. После этого просто подождите, пока появятся файлы, и посмотрите, откуда /var/log/auditd.logи куда они пишут в вашей системе, и прочитайте, что произошло и каким процессом.


Спасибо, похоже, это именно так, хотя для этого требуются установленные инструменты аудита, которые, вероятно, не везде по умолчанию. Но хорошо, если вам нужна эта информация, они всегда могут быть установлены.
homer5439

Как примечание для людей, видящих это: вы не можете помещать часы в каталоги верхнего уровня (запрещено ядром)
Тони Сепия

1
Это действительно эффективный способ! Большое спасибо!!! Кстати, когда вы закончите, вы можете удалить все хуки, чтобы избежать записи журнала аудита навсегда auditctl -D. Вы можете использовать auditctl -lдля перечисления всех хуков.
Роберт

0

lsof может помочь:

# lsof -r1 /some/dir/*

1
Благодарю. Правильно ли, что приведенная выше команда только сообщает мне, кто обращается к существующим файлам, но ничего не показывает для вновь созданных файлов? Насколько я понимаю, / some / dir / * расширяется до списка файлов, присутствующих во время вызова команды.
homer5439
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.