Odpowiednik SysInternals FileMon dla systemu Linux?

13

Próbuję debugować aplikację na Ubuntu - muszę wysłuchać prób otwarcia plików (nawet w przypadku plików, które nie istnieją).

Process Monitor (wcześniej znany jako FileMon ) jest dostępny w systemie Windows - co jest na pasku narzędzi Ubuntu?

Dzięki!

Ashley

Ciastko Z Kurczaka
źródło

Odpowiedzi:

7

Szukasz strace. Zajrzyj tutaj: https://wiki.ubuntu.com/Strace

Evan Anderson
źródło
2
Jak rozumiem, uruchomienie filemona pozwala użytkownikowi zobaczyć wszystkie dostępy do plików. Z drugiej strony, musisz określić, która aplikacja ma zostać otwarta jako pierwsza. Wymaga to wcześniejszej znajomości aplikacji, która uzyskuje dostęp do tych plików. Co zrobić, jeśli nie wiesz, która aplikacja uzyskuje dostęp do plików, które chcesz obejrzeć?
chuacw,
8

To zależy od tego, czego chcesz:

  • Na ogół chcesz spojrzeć na inotify, aby zobaczyć wszystkie dostępy do plików dokonywane przez dowolny proces.

  • W małej, strace pozwoli ci obserwować wywołania systemowe wywołane przez określony proces. Strace jest niesamowity. Możesz na przykład śledzić wywołania procesu w celu „otwarcia” strace -f -eopen $cmd. Strona człowiek ma pełne szczegóły dotyczące składni, oczywiście.

pjz
źródło
Dzięki pjz. Mówiąc konkretnie - mam problem z uruchomieniem Ogre3d na Ubuntu. Wygląda na to, że moja aplikacja testowa szuka plików .cfg podczas uruchamiania. Chcę słuchać wszystkich prób otwierania plików, aby zapewnić, że prawidłowe pliki są dostępne i mają odpowiednie uprawnienia.
chickeninabiscuit
strace -e open ./app
Justin
2

straceprzed aplikacją startową dobrze jest obserwować, co robi aplikacja.
lsofdobrze jest zobaczyć, z jakich plików korzysta już uruchomiona aplikacja.

BTW:
lsof -ni:22 pokazuje, który proces używa portu 22.

ThorstenS
źródło
2

SGI ma narzędzie, które możesz wypróbować: http://oss.sgi.com/projects/fam/

użytkownik10103
źródło
2
pod Linuksem fam jest historią. Naprawdę używaj inotify w dzisiejszych czasach
ThorstenS
1

Oto przykład użycia strace do śledzenia zmian plików:

strace -f -e trace=file -p7546 -o /tmp/outputfile

-fzapewnia przechwytywanie zdarzeń z procesów potomnych.
-e trace=filemówi, że powinniśmy uchwycić wywołań systemowych związanych plikach (np stat, open, futexitd.)
-pjest identyfikator procesu (pobierane z ps -auxlub innych środków) -ookreślono OutPutFile (może być wiele danych i można zamiast tego użyć grep jako filtr.

waitinforatrain
źródło
1

Wypróbuj sysdig . Na przykład:

sysdig -A -c echo_fds

Podkoszulek
źródło
0

To stare, ale myślę, że dobrym pomysłem jest zaktualizowanie go do dzisiejszej rzeczywistości.

Do debugowania tylko jednego procesu i ich dzieci, strace jest nadal najlepszym sposobem. Może z łatwością wyświetlać dostęp do wszystkich plików, nawet w przypadku brakujących plików.

W przypadku ogólnego debugowania systemu funkcja kontroli w jądrze może to zrobić i jest to zalecany sposób. Nie potrzebuje żadnej łaty na najnowsze jądra, wystarczy zainstalować pakiet audytu

Oto proste GUI do korzystania z niego:

audyt-gui

To replikuje filemona systemu Windows, monitoruje dostęp do pliku dla wszystkich miejsc, procesów itp

sprawdź także ten post

higuita
źródło
0

Oto, co działało dla mnie dobrze (Linux Mint 19.1):

sudo lsof 2>&1 | grep programnamehere

Nie jestem pewien, dlaczego 2>&1był potrzebny, ale nie filtrował, chyba że go użyłem.

Andrzej
źródło