
모든 Linux 프로세스가 접근하는 파일을 기록합니다.
whatfiles는 Linux 유틸리티로, 다른 프로그램이 시스템에서 읽고/쓰고/생성하고/삭제하는 파일을 기록합니다. 대상 프로세스에 의해 생성된 모든 새로운 프로세스와 스레드도 추적합니다.
main()부터 종료까지 프로세스가 어떤 파일을 건드리는지 확인할 수 있는 간단한 유틸리티가 없다는 점에 오랫동안 불만을 느꼈습니다. 소프트웨어 공급업체를 신뢰하지 못하거나 멀웨어가 걱정되더라도 프로그램이나 설치 프로그램이 시스템에 무엇을 하는지 알 수 있는 것은 중요합니다. lsof는 특정 시점만 관찰하고, strace는 크고 다소 복잡합니다.
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-clone-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-heal-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-perspective-clone-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-convolve-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-smudge-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-dodge-burn-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-desaturate-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/plug-ins, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /usr/lib/gimp/2.0/plug-ins, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/pluginrc, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /usr/share/locale/en_US/LC_MESSAGES/gimp20-std-plug-ins.mo, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /usr/lib/gimp/2.0/plug-ins/script-fu, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /etc/ld.so.cache, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /etc/ld.so.cache, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpui-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpwidgets-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpwidgets-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimp-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpcolor-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
기본 사용법: ls를 실행하고 현재 디렉터리에 로그 파일로 출력합니다.
$ whatfiles ls -lah ~/Documents
-o로 출력 파일 위치 지정:
$ whatfiles -o MyLogFile cd ..
디버그 출력 포함, 로그 파일 대신 stdout으로 출력:
$ whatfiles -d -s apt install zoom
현재 실행 중인 프로세스에 연결 (루트 권한 필요):
$ sudo whatfiles -p 1234
바로 사용 가능한 바이너리는 릴리즈 페이지에 있습니다! 또한 누군가 친절하게 Arch 저장소에 추가했으며, letompouce가 GitLab 파이프라인도 설정했습니다.
gcc와 make 필요):$ cd whatfiles
$ make
$ sudo make install
x86, x86_64, ARM32, ARM64 아키텍처를 지원합니다.
이건 그냥 strace -fe trace=creat,open,openat,unlink,unlinkat ./program을 재구현한 것 아닌가요?
네. 하지만 더 간단하고 사용자 친화적이도록 만든 것입니다.
Mac과 Windows 버전도 있나요?
없습니다. Mac에서 시스템 호출을 추적하려면 task_for_pid()가 필요한데, 이는 코드 서명이 필요하고 작동하게 만들 수 없었습니다. 게다가 무료 소프트웨어를 작성하기 위해 Apple에 연간 $100를 지불할 의사가 없습니다. Mac의 dtruss는 단일 프로세스와 그 자식들을 추적할 수 있지만, -t 플래그는 필터링할 시스템 호출을 하나만 허용하는 것 같습니다. fs_usage도 비슷한 작업을 하지만 자식 프로세스/스레드를 추적하는지는 확실하지 않습니다. Windows의 Process Monitor는 상당히 훌륭합니다.
whatfiles로 Firefox를 실행할 때 탭이 충돌합니다. (실행 중인 Firefox에 -p [PID]로 연결하는 것은 정상 작동하며, 이미 열려 있는 Firefox 창이 있을 때 whatfiles로 두 번째 Firefox 창을 실행하는 것도 정상입니다.)관심 가져주셔서 감사합니다. Cloaker, Nestur, Flying Carpet도 확인해 보세요!