Название говорит само за себя - я нахожусь на Mac OS X, и я хочу определить, какая программа создает этот раздражающий файл awefawef2log
в моем домашнем каталоге каждые несколько часов.
3 ответа
Трудно ответить на ваш точный вопрос, потому что попытка создать файл, который уже существует, не обязательно является ошибкой. Тем не менее, я думаю, что вы могли бы решить вашу непосредственную проблему с
bash-3.2# cat who.d
#include <fcntl.h>
syscall::open:entry
/arg1 & O_CREAT/
{
/* arg0 might not be paged-in yet */
self->pathp = arg0;
}
syscall::open:return
/self->pathp && basename(copyinstr(self->pathp)) == $$1/
{
printf("%s opened %s\n", execname, copyinstr(self->pathp));
/* free the thread-local storage */
self->pathp = NULL;
}
bash-3.2# dtrace -Cqs who.d testFile
touch opened testFile
^C
bash-3.2#
Несомненно, есть некоторые крайние случаи, которые это пропустит, например, файл, который был открыт и затем переименован.
Если важно найти только первый open()
вы можете поэкспериментировать с провайдером fbt, чтобы найти вызов функции, который присутствует, только если целевой файл еще не существует. Обычно это будет распределение inode (но не vnode). Тем не менее, я думаю, что было бы тяжело написать что-то надежное и, конечно, оно не было бы стабильным в отношении изменений ОС.
Вы также можете использовать opensnoop:
sudo opensnoop -f /path/to/file
Прежде всего вы можете проверить, открыт ли файл каким-либо приложением
$ lsof | grep awefawef2log