Jak ustalić, który proces tworzy plik?

6

W moim katalogu domowym nagle pojawiły się dwa pliki o nazwach „aa” i „err”. Są puste. Zastanawiam się, jak się tam dostali. Usunąłem pliki i są one tworzone ponownie po kilku sekundach.

Czy istnieje sposób monitorowania katalogu domowego w celu tworzenia plików, aby dowiedzieć się, skąd pochodzą?

Wspominam, że lsofto nie może pomóc w tym przypadku (otrzymałem pusty wynik przy użyciu lsof aa)

Kwadz
źródło
Wyglądają na to. resztki próby programowania w Node.js. Zobacz, jak nazywane są zmienne w tym wątku przepełnienia stosu .
JakeGould
@JakeGould, dzięki, ale twój link pokazuje niestandardowy kod. To nie jest powiązane.
Kwadz

Odpowiedzi:

10

fs_usage jest twoim narzędziem do tego.

Narzędzie użytkowania systemu plików jest idealne, ponieważ wykorzystuje zdarzenia systemu plików w czasie rzeczywistym i zrzuca aktywność do pliku lub ekranu. Ponieważ znasz dokładną ścieżkę do pliku, możesz odfiltrować wszystkie tysiące nieistotnych (w tym przypadku) zmian w systemie plików i dość szybko zobaczyć, co czyta / zapisuje do tego pliku.

Jeśli twój katalog domowy to /Users/me, możesz filtrować według/Users/me/aa

mac:~ me$ sudo fs_usage | grep /Users/me/aa
09:35:21  stat64            /Users/me/aa      0.000033   touch       
09:35:21  utimes            /Users/me/aa      0.000104   touch       
09:35:21  fsgetpath         /Users/me/aa      0.000119   Finder      
09:35:22  lstat64           /Users/me/aa      0.000039   fseventsd   
09:35:22  fsgetpath         /Users/me/aa      0.000027   mds         
09:35:22  getattrlist       /Users/me/aa      0.000064   mds         
09:35:22  listxattr         /Users/me/aa      0.000012   mds         
09:35:22  getattrlist       /Users/me/aa      0.000130   mds         
09:35:22  getattrlist       /Users/me/aa      0.000033   mds         
09:35:22  open              /Users/me/aa      0.000071   mdworker_sha
09:35:22    RdData[AT2]     /Users/me/aa      0.000331 W mdworker_sha
09:35:22  getattrlist       /Users/me/aa      0.000042   mds         
09:35:24  lstat64           /Users/me/aa      0.000114   rm          
09:35:24  access            /Users/me/aa      0.000209   rm          
09:35:24  unlink            /Users/me/aa      0.000909   rm          
09:35:25  lstat64           /Users/me/aa      0.000042   fseventsd   
09:35:25  lstat64           /Users/me/aa      0.000006   rm          

(uwaga: usunąłem dużo białych spacji powyżej - polecenie fs_usage wyświetla dużą ilość pustego miejsca, więc nie można łatwo zobaczyć polecenia touch po prawej stronie, jeśli skopiuję / wkleję dokładne dane wyjściowe.)

Tutaj używam touchpolecenia do utworzenia pliku, dołączam do niego ciąg, a następnie rmz wiersza poleceń.

mac:~ me$ touch ~/aa
mac:~ me$ echo foo >> ~/aa
mac:~ me$ rm ~/aa

Będzie mnóstwo innych aplikacji, które będą czytać, więc możesz filtrować operacje stat64 i lstat74 , jeśli po utworzeniu pliku jest zbyt wiele odczytów atrybutów i działania reflektorów.

Strona podręcznika dla tego polecenia jest dość gęsta (a nie „poradnikiem”), co jest typowe, ale lepsze niż brak dokumentacji od Apple na temat korzystania z niego.

bmike
źródło
Wow dzięki. świetna odpowiedź. Wierzę, że komenda fs_usage opiera się na narzędziu FSEvents MacOS. Czy wiesz, czy z tego narzędzia można korzystać również w aplikacji na iOS?
Motti Shneor
@bike, podczas korzystania touchmożemy zobaczyć stat64i openpolecenia. Zastanawiam się, które polecenie tworzy plik. W moim przypadku otrzymuję bezpośrednio następujące informacje fsgetpathz Findera: imgur.com/a/AsA9O5s
Kwadz
To by było dobrym przykładem na pytanie. W moim przypadku stat64 utworzył plik. Wątpię, aby Finder i mds tworzyli plik w twoim przypadku, więc musiałbym zobaczyć więcej dzienników, aby pomóc. @Kwadz Kiedy usuwasz plik, jaki jest pierwszy wpis w fs_usage?
bmike
@bike, po usunięciu pliku z Findera otrzymuję
Kwadz
Wspaniały. Czy to pozostało? Jeśli nie, może być konieczne utworzenie nowego konta i ponowne uruchomienie na nowym koncie oraz zawężenie, jeśli jest tworzone przez proces użytkownika lub proces systemowy. Drugi użytkownik mógł następnie ustawić pułapkę, zanim użytkownik, który utworzy plik, zaloguje się, umożliwiając przechwycenie pierwszego śladu, a nie tych po jego utworzeniu lub usunięciu.
bmike