Não estou procurando ferramentas complicadas, como o modo de reclamação do AppArmor, preciso de ferramentas fáceis para me dizer quais arquivos são acessados por um programa específico.
linux
files
process
open-files
Boll19
fonte
fonte
fstat()
ou obterlstat()
informações, etc.Respostas:
Por Chris Down, você pode usar
strace -p
para examinar um processo já em execução , para ver quais arquivos ele abre a partir de agora até o momento em que você encerra o rastreio ou o processo em si termina.Se você deseja ver os arquivos abertos por toda a duração de um processo, use desde o início
strace
com o nome do executável. A adição-f
garante que qualquer subprocesso bifurcado também seja relatado. ExemploUsando
lsof
para ver quais arquivos um processo está aberto no momentoSe você possui o SystemTap, pode monitorar o host inteiro em busca de arquivos que estão sendo abertos.
fonte
open
não é a única chamada de sistema relevante. Por exemplo, é possível passar descritores de arquivo entre processos em um soquete unix, e há aopenat
chamada do sistema que também pode abrir um arquivo.strace
, consulte as linhas ENOENT no exemplo.Você pode usar o
opensnoop
BCC, que usa o eBPF sob o capô:Isso tem um bom desempenho, pois usa o kprobes em vez de ter que reiniciar o syscalls, como
strace
faz.Você também pode fazer isso com
strace
(potencialmente com-f
para seguir os filhos do processo rastreado), mas sua maneira de operar, envolvendo a reinicialização de syscalls como parte do ptrace , torna o aplicativo um pouco mais lento:Você também pode iniciar seu aplicativo dessa maneira, se desejar, usando
strace [executable]
oustrace -f [executable]
.fonte
Minha ferramenta favorita para monitorar quais arquivos um aplicativo abre é a poderosa estrutura de monitoramento
sysdig
.Para monitorar todos os arquivos abertos abertos por um programa chamado
exe_file
:Monitorando todos os arquivos abertos no servidor:
Criando um arquivo de rastreamento que conterá apenas eventos de gravação em diretórios pessoais (com os quais podemos inspecionar posteriormente
sysdig -r writetrace.scap.gz
):Vendo tudo no nível do syscall, um processo chamado
exe_file
:O Sysdig tem muitos cinzéis, veja para coisas mais interessantes que ele pode fazer:
Exemplos Sysdig
Como monitorar e solucionar problemas de um servidor Linux usando sysdig
Você também percebeu
dtrace
que não é muito usado no Linux, mas ainda é muito usado nos sistemas operacionais * BSD:Além disso
sysdig
,strace
edtrace
você também temltrace
quais registros / intercepta sinais / bibliotecas dinâmicas / chamadas de sistema que são chamadas / recebidas por um processo:Se o programa for pequeno, considere também desmontá-lo
objdump -d exe_file
ou desmontá-lo / descompilá-loHopper
, para ver todos os arquivos com os quais lida.Para obter mais detalhes, consulte: Entendendo o que um binário Linux está fazendo
Como primeira abordagem, eu também faria:
É uma abordagem de baixo custo e, com sorte, alguns nomes de arquivos podem estar presentes no modo ASCII no arquivo binário com sorte.
Veja também a resposta relacionada Por que o verdadeiro e o falso são tão grandes?
Se os binários / arquivos que acompanham a distribuição, você também pode buscar as fontes nos repositórios de fontes da distribuição ou nos repositórios oficiais do utilitário real.
Como último recurso, você sempre pode usar ferramentas como gdb ou rr para depurar o binário em tempo real.
fonte
sysdig
bug (você está usando o ARM?), Poste uma nova pergunta para ele.