wykryć, który program tworzy plik

2

Tytuł mówi wszystko - jestem na Mac OS X i chcę wykryć, który program tworzy to irytujące awefawef2log plik w moim katalogu domowym co kilka godzin.

Dan
źródło
To nie jest pytanie programistyczne i nie jest tematem dla StackOverflow. The Centrum pomocy ma więcej informacji na temat typów pytań, które należą do tej grupy. Twoje pytanie jest lepiej dopasowane Superużytkownik , który dotyczy ogólnych pytań dotyczących komputera, oprogramowania i systemu operacyjnego. Głosowanie, aby się tam przenieść. Powodzenia.
Ken White
@KenWhite Chciałbym to zrobić za pomocą DTrace, narzędzia do programowania profilerów / debugerów jądra. Stąd tag „dtrace”.
Dan
Dobrze. :-) Zmieniłbym moje głosowanie na „Off topic”, ponieważ sam nie pokazuje żadnego wysiłku, aby rozwiązać (a nawet zbadać) ten problem. Po „Chcę wykryć” powinno nastąpić „Oto, co próbowałem zrobić do tej pory, ale oto co się stało”. Niestety nie mam możliwości zmiany powodu zamknięcia głosowania po jego oddaniu; jedyną opcją jest całkowite usunięcie go i całkowity brak możliwości głosowania. Zostawię to innym czytelnikom, aby użyć przyczyny „poza tematem”. Jeśli ty edytować pytanie o wykonanie prób, z których chętnie wycofam głosowanie.
Ken White
1
Prawdopodobnie fs_usage jest lepszym narzędziem niż DTrace. fs_usage -w -f pathname | grep awefawef2log

Odpowiedzi:

1

Trudno jest odpowiedzieć na dokładne pytanie, ponieważ próba utworzenia pliku, który już istnieje, nie musi być błędem. Powiedziawszy to, myślę, że możesz rozwiązać swój bezpośredni problem

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#

Bez wątpienia są pewne przypadki, w których nie będzie to możliwe, np. plik, który został otwarty, a następnie zmieniono jego nazwę.

Jeśli ważne jest znalezienie tylko pierwszego open() następnie możesz poeksperymentować z dostawcą fbt, aby wyszukać wywołanie funkcji obecne tylko wtedy, gdy plik docelowy jeszcze nie istnieje. Zazwyczaj byłby to przydział inode (ale nie vnode). Jednak myślę, że ciężko byłoby napisać coś solidnego i oczywiście nie byłoby stabilne w odniesieniu do zmian w systemie operacyjnym.


źródło
1

Możesz także użyć opensnoop:

sudo opensnoop -f /path/to/file
Lri
źródło
0

Po pierwsze możesz sprawdzić, czy plik jest otwierany przez jakąś aplikację

$ lsof | grep awefawef2log


źródło
Dziękuję, powinienem wspomnieć - niezależnie od tego, jaki program go utworzy, nie działa.
Dan