Além de pós-processar a strace
de saída, não há nada disponível para ignorar chamadas de sistema com falha em strace
. Não seria muito difícil adicionar, consulte a função syscall_exiting_trace
em syscall.c
.
Se você preferir seguir o ângulo de pós-processamento, Ole Tange já cuidou de que para você de uma forma mais abrangente do que você provavelmente chegará aqui: o tracefile
A ferramenta executará strace
e filtrará as informações que você procura de uma maneira legível. Consulte Listar os arquivos acessados por um programa para obter detalhes. Outra resposta para essa pergunta lista outras abordagens possíveis, incluindo LoggedFS que eu acho muito útil.
Outra opção é usar SystemTap ; por exemplo
#!/usr/bin/env stap
global stored_filename, stored_path
probe syscall.open {
stored_filename = filename
}
probe syscall.open.return {
if (execname() == "cat" && $return >= 0) {
printf("opened %s\n", stored_filename)
}
}
probe syscall.openat {
stored_filename = filename
stored_path = dfd_str
}
probe syscall.openat.return {
if (execname() == "cat" && $return >= 0) {
printf("opened %s in %s\n", stored_filename, stored_path)
}
}
mostrará o nome de qualquer arquivo aberto com sucesso por qualquer processo cat
.