detecta qual programa está criando um arquivo

2

O título diz tudo - estou no Mac OS X e quero detectar qual programa está criando esse arquivo awefawef2log chato em meu diretório pessoal a cada duas horas.

    
por Dan 09.11.2013 / 00:41

3 respostas

1

É difícil responder à sua pergunta exata porque não é necessariamente um erro tentar criar um arquivo que já existe. Dito isto, acho que você poderia resolver seu problema imediato com

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#

Não há dúvidas de que alguns casos de limite serão perdidos, por exemplo, um arquivo que foi aberto e depois renomeado.

Se for importante encontrar apenas o primeiro open() , experimente o provedor fbt para procurar uma chamada de função que esteja presente apenas se o arquivo de destino ainda não existir. Normalmente, isso seria uma alocação inode (mas não um vnode). No entanto, acho que seria um trabalho difícil escrever algo robusto e, claro, não seria estável no que diz respeito às alterações do SO.

    
por 09.11.2013 / 10:28
1

Você também pode usar o opensnoop:

sudo opensnoop -f /path/to/file
    
por 09.11.2013 / 13:49
0

Primeiro de tudo, você pode verificar se o arquivo é aberto por algum aplicativo

$ lsof | grep awefawef2log

    
por 09.11.2013 / 00:46

Tags