Comandos Linux

Como usar o Strace no Linux

Como usar o Strace no Linux
Ao trabalhar com sistemas Linux, você frequentemente precisará inspecionar e compreender as ações realizadas por processos e as chamadas de sistema realizadas por sua execução.

Quando se trata de realizar essas tarefas, o kernel Linux oferece recursos como ptrace para depurar e diagnosticar processos.

Este artigo descreve como usar a ferramenta strace para rastrear, monitorar e depurar processos que interagem 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 repassar o básico das chamadas do sistema Linux.

Uma chamada de 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 do Linux.

Sempre que um usuário executa um programa que faz uma leitura, gravação, eliminação, saída, vinculação, etc., pedido, eles estão fazendo uma chamada de sistema. Há uma ampla gama de chamadas de sistema usadas por programas para realizar várias tarefas, como rede, leitura e gravação em arquivos, inicialização e encerramento de processos e muito mais.

Pense nas chamadas do sistema como funções - elas se comportam de maneira semelhante - porque podem aceitar argumentos e valores de retorno. 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, este mecanismo está bem escondido dos usuários por bibliotecas como Glibc.

NOTA: Há muito mais para chamadas de sistema e interações de kernel do que discutimos neste tutorial. Por favor, consulte as páginas de manual para mais informações.

https: // linkfy.para / syscalls

https: // linkfy.para / trapmanual

Como instalar o strace no Linux

Embora as ferramentas strace não venham pré-instaladas por padrão nas principais distribuições Linux, elas estão disponíveis na maioria dos repositórios oficiais dessas distribuições; você pode instalá-lo facilmente usando gerenciadores de pacotes padrão.

NOTA: Embora não abordemos como instalar o strace em todos os sistemas, discutiremos como fazer isso com os principais gerenciadores de pacotes, como apt, dnf, pacman e yum

1: Instalação do Debian (apt)

Instale o strace usando o comando:

apt-get install strace -y

2: Família RedHat (dnf e yum)

Para instalar o strace usando o gerenciador de pacotes yum, digite o comando:

yum install strace

Para o gerenciador de pacotes dnf, digite o comando:

dnf install 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 o strace instalado e funcionando, podemos seguir em frente e aprender como usar

Uso básico do Strace: um guia prático

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

NOTA: A saída do Strace, como nomes de chamadas do sistema, argumentos correspondentes e valores de retorno, são tratados por o descritor de arquivo de erro padrão (stderr).

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

Aqui está um exemplo disso usando o comando ls:

Uau! Isso é uma grande quantidade de 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, notará os seguintes recursos.

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

https: // linkfy.para / execve

As chamadas de sistema execve executam o binário que queremos usar, neste caso, localizado em (/ bin / ls) e o array de argumentos sendo o caminho que queremos para listar o conteúdo.

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

/ * 13 vars * /

A saída acima indica o número de variáveis ​​adicionadas como resultado da chamada do processo. O ambiente dentro da função execv é acessado usando a variável externa de 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 do strace seguem um padrão semelhante ao que discutimos acima.

Como rastrear chamadas de sistema específicas

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

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

strace -e leia ls

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

A chamada de sistema de leitura aceita três argumentos: descritor de arquivo, buffer e o número de bytes. A chamada do sistema então lê até a contagem de bytes do argumento do descritor de arquivo passado para o buffer.

https: // linkfy.para / lê a escala

Resumo das chamadas do sistema

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

O comando filtra e organiza a saída de forma mais eficiente do que a saída normal do strace. Para obter a saída de resumo e strace normal, passe o argumento -C.

Como usar o Strace com processos em execução

Em outras ocasiões, você precisará de um traço de um processo em execução. Até este ponto, só usamos strace 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 strace a ele.

Você pode obter o PID de um processo em execução usando 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 -ax | grep -i apache2

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

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

Strace rastreará continuamente o processo anexado e mostrará a saída conforme o processo anexado executa chamadas de sistema. Para encerrar o traço, pressione CTRL + C, que separa o processo do traço.

Como salvar a saída do Strace em arquivos

Também podemos redirecionar a saída de strace para um arquivo como um argumento. Usando o sinalizador -o seguido pelo caminho do arquivo como um argumento, podemos salvar logs de strace.

Por exemplo:

strace -p 3514 -o ~ / Desktop / apache_trace

Assim que o arquivo for salvo, você pode monitorá-lo e analisá-lo posteriormente.

Conclusão

Neste guia, aprendemos como instalar e usar o strace nas principais distribuições do Linux. Agora que você entende as chamadas do sistema e como os processos funcionam, pode usar o strace para monitorar e depurar um processo do sistema 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.

Melhores emuladores de console de jogo para Linux
Este artigo irá listar software de emulação de console de jogo popular disponível para Linux. A emulação é uma camada de compatibilidade de software q...
Melhores distros Linux para jogos em 2021
O sistema operacional Linux percorreu um longo caminho desde sua aparência original, simples e baseada em servidor. Este sistema operacional melhorou ...
Como capturar e transmitir sua sessão de jogo no Linux
No passado, jogar era considerado apenas um hobby, mas com o tempo a indústria de jogos viu um grande crescimento em termos de tecnologia e número de ...