
Registre quais arquivos são acessados por qualquer processo Linux
Whatfiles é um utilitário Linux que registra quais arquivos outro programa lê/escreve/cria/exclui no seu sistema. Ele também rastreia quaisquer novos processos e threads criados pelo processo alvo.
Há muito tempo estou frustrado com a falta de um utilitário simples para ver quais arquivos um processo toca desde main() até a saída. Seja por não confiar em um fornecedor de software ou por preocupação com malware, é importante saber o que um programa ou instalador faz no seu sistema. lsof só observa um momento no tempo e strace é grande e um tanto complexo.
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
uso básico, executa ls e escreve a saída em um arquivo de log no diretório atual:
$ whatfiles ls -lah ~/Documents
especificar local do arquivo de saída com -o:
$ whatfiles -o MyLogFile cd ..
incluir saída de depuração, imprimir no stdout em vez de arquivo de log:
$ whatfiles -d -s apt install zoom
anexar a um processo atualmente em execução (requer privilégios de root):
$ sudo whatfiles -p 1234
Binários prontos para uso estão na página de releases! Alguém também gentilmente adicionou ao repositório do Arch, e o letompouce configurou um pipeline no GitLab também.
gcc e make):$ cd whatfiles
$ make
$ sudo make install
Suporta arquiteturas x86, x86_64, ARM32 e ARM64.
Isso não é apenas uma reimplementação de strace -fe trace=creat,open,openat,unlink,unlinkat ./program?
Sim. Embora tenha como objetivo ser mais simples e mais amigável ao usuário.
Existem versões para Mac e Windows?
Não. Rastrear syscalls no Mac requer task_for_pid(), que exige code signing, algo que não consigo fazer funcionar e, além disso, não tenho interesse em pagar US$100/ano para a Apple para escrever software livre. dtruss no Mac pode ser usado para seguir um único processo e seus filhos, embora a flag -t pareça aceitar apenas uma única syscall para filtrar. fs_usage faz algo semelhante, mas não tenho certeza se segue processos/threads filhos. O Process Monitor para Windows é muito bom.
whatfiles é usado para iniciar o Firefox. (Anexar com -p [PID] depois que ele já está em execução funciona bem, assim como usar whatfiles para iniciar uma segunda janela do Firefox se uma já estiver aberta.)Obrigado pelo interesse e também confira Cloaker, Nestur e Flying Carpet!