Como usar o Strace no Linux

Como usar o Strace no Linux
Ao trabalhar com sistemas Linux, você geralmente precisa inspecionar e entender as ações executadas pelos processos e as chamadas do sistema realizadas por sua execução.

Quando se trata de executar essas tarefas, o kernel Linux fornece recursos como PTRACE para depurar e diagnosticar processos.

Este artigo discute como usar a ferramenta Strace para rastrear processos de rastreamento, monitor e depuração interagindo com o kernel.

O que são chamadas de sistema?

Antes de discutirmos como usar o STRACE, você precisa entender o que estamos procurando e como eles funcionam. Isso significa que devemos examinar o básico das chamadas do sistema Linux.

Uma chamada do sistema é Um método programático através do qual um programa pode solicitar um serviço do kernel do sistema. Esse é o processo que usaremos para inspecionar as ações entre os processos do usuário e o kernel Linux.

Sempre que um usuário executa um programa que faz uma leitura, escreva, matar, sair, vincular, etc., solicitação, eles estão fazendo uma chamada de sistema. Existe uma ampla gama de chamadas de sistema usadas por programas para executar várias tarefas, como redes, leitura e gravação de arquivos, inicialização e rescisão de processos e muito mais.

Pense nas chamadas do sistema como as funções-elas se comportam de maneira semelhante, porque podem aceitar argumentos e devolver valores. A principal diferença entre as chamadas do sistema e a operação normal é que as chamadas do sistema podem interagir diretamente com o kernel. As chamadas do sistema usam um mecanismo de armadilha para navegar entre o espaço do usuário e o kernel.

No sistema Linux, esse mecanismo está bem oculto dos usuários por bibliotecas como Glibc.

OBSERVAÇÃO: Há muito mais nas chamadas do sistema e interações do kernel do que o que discutimos neste tutorial. Consulte as páginas manuais para obter mais informações.

https: // linkfy.para/syscalls

https: // linkfy.para/trapmanual

Como instalar o Strace no Linux

Embora as ferramentas Strace não sejam pré-instaladas por padrão nas principais distribuições do Linux, ela está disponível na maioria dos repositórios oficiais dessas distribuições; Você pode instalá -lo facilmente usando gerentes de pacotes padrão.

OBSERVAÇÃO: Embora não abranguemos como instalar o STRACE em todos os sistemas, discutiremos como fazê -lo com os principais gerentes de pacotes, como APT, DNF, Pacman e Yum

1: Instalação Debian (APT)

Instale o STRACE usando o comando:

instalação apt -get strace -y

2: Família Redhat (DNF e YUM)

Para instalar o STRACE usando o Yum Package Manager, digite o comando:

yum install strace

Para o DNF Package Manager, digite o comando:

DNF Instale Strace

3: Arch Linux (Pacman)

Para usuários do Arch Linux, você pode instalar o STRACE com o comando:

Pacman -s Strace

Agora que você tem Strace instalado e executando, podemos seguir em frente e aprender a usar

Uso básico da Strace: um guia de instruções

Vamos discutir o uso básico de strace e entender a saída básica do comando e como podemos usá -lo.

OBSERVAÇÃO: Saída do Strace, como nomes de chamadas do sistema, argumentos correspondentes e valores de retorno, são tratados pelo Descritor de Arquivo de Erro Padrão (STDERR).

A maneira básica de usar Strace é chamando o utilitário strace seguido pelo nome do programa, cujo comportamento queremos entender.

Aqui está um exemplo disso usando o comando ls:

Uau! Isso é muita saída para um comando simples, como LS.

Embora não possamos discutir toda a saída do comando strace, podemos destilar e entender seu significado.

Se você considerar a primeira linha na saída acima, você notará os seguintes recursos.

  • O nome da chamada do sistema
  • Os argumentos passados ​​para a chamada do sistema fechada entre parênteses.
  • O valor de retorno da chamada do sistema

Portanto, na primeira linha, a chamada do sistema é executada (programa executado usando a matriz especificada de argumentos), os argumentos da chamada do sistema são ("/bin/ls", ["ls", "/"], 0x7fffc4b277a8/ * 13 vars */) e um valor de retorno de 0.

https: // linkfy.para/executar

O sistema Execve Chamadas executa o binário que queremos usar, neste caso, localizado em (/bin/ls) e a matriz de argumentos sendo o caminho que queremos listar o conteúdo.

Você também notará uma notação fechada com uma barra para frente e um asterisco. Para o nosso exemplo:

/ * 13 vars */

A saída acima indica o número de variáveis ​​adicionadas como resultado de chamar o processo. O ambiente dentro da função EXECV é acessado usando a variável externa do ambiente definida como:

int main (int argc, char *argv [], char *Envp [])

A saída final é o valor de retorno, que é 0 neste caso.

Você também notará que a maioria das linhas da saída da Strace segue um padrão semelhante que discutimos acima.

Como rastrear chamadas específicas do sistema

Embora a Strace forneça muitas informações sobre as chamadas do sistema de programas, a maioria das instâncias o chamará para filtrar chamadas específicas do sistema. Para fazer isso, passamos a bandeira -e para o comando strace seguido pelo nome da chamada do sistema que precisamos.

Que tal olhar para o sistema de leitura exige o comando ls. Por exemplo:

strace -e leia ls

Você notará que isso exibe apenas chamadas de sistema de leitura.

A chamada do sistema de leitura aceita três argumentos: descritor de arquivos, buffer e o número de bytes. A chamada do sistema é então lê os bytes da contagem do argumento do descritor de arquivos passados ​​para o buffer.

https: // linkfy.para/readsysCall

Resumo das chamadas do sistema

Strace também nos permite obter um resumo das chamadas do sistema feitas por um processo. Ao passar no argumento -c ou -summaryly, podemos obter uma saída como a mostrada abaixo:

O comando filtra e organiza a saída com mais eficiência do que a saída normal da Strace. Para obter o resumo e a saída normal da Strace, passe o argumento -c.

Como usar o Strace com processos de corrida

Em outros momentos, você precisará de um processo de execução. Até este ponto, usamos apenas um único comando. Para rastrear um processo em execução, podemos usar o argumento -p seguido pelo processo de ID do processo (PID) para anexar a Strace a ele.

Você pode obter o PID de um processo em execução usando as ferramentas de Monitoramento de Top e Grep, PS, HTOP, PIDOF ou outras ferramentas de monitoramento do sistema.

Por exemplo, para obter o PID do processo Apache, podemos usar:

ps -x | grep -i apache2

Isso deve dar a você o PID do processo Apache2 (PID 3514 neste caso), e podemos usá -lo para anexá -lo para atrapalhar.

Que deve exibir uma saída semelhante à mostrada abaixo.

Strace rastreará continuamente o processo em anexo e mostrará a saída como o processo anexado executa as chamadas do sistema. Para rescindir o rastreamento, pressione Ctrl + C, que desafia o processo da Strace.

Como salvar a saída Strace em arquivos

Também podemos redirecionar a saída de Strace para um arquivo como argumento. Usando a bandeira -o seguida pelo caminho do arquivo como argumento, podemos salvar toras de strace.

Por exemplo:

Strace -P 3514 -O ~/Desktop/apache_trace

Depois que o arquivo for salvo, você pode monitorar e analisá -lo mais tarde.

Conclusão

Neste guia, aprendemos a instalar e usar o STRACE nas principais distribuições Linux. Agora que você entende as chamadas do sistema e como os processos funcionam, você pode usar o STRACE para monitorar e depurar um processo de sistema em execução em execução.

Os conceitos aprendidos neste tutorial são muito úteis, principalmente porque você pode usar o que aprendeu para monitorar se alguém está adulterando os processos do sistema.