Explorando a pasta /proc no Linux

Veja os comandos que podem ser dados diretamente para os processos em execução num sistema Linux através dos arquivos especiais da pasta proc


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


Introdução

Para o sistema Linux, tudo é arquivo, conforme já informado aqui no site. E hoje vamos mostrar informações interessantes sobre o conteúdo dessa pasta que melhor justificam essa afirmação.

Além disso, o fato do kernel Linux ser “aberto” também te propicia liberdade, para tal existem muitos comandos que o usuário pode dar diretamente para os processos do sistema.

1. Definição

A pasta /proc (de PROCess) basicamente mapeia processos de sistema e de usuário e sua comunicação com o kernel Linux. Alguns arquivos contidos lá podem ou não gerenciar hardware.

Se estiver um pouco perdido quanto ao mapa do conteúdo de /proc, dê uma olhada nesta imagem:

Cada nome de rota nesta imagem representa um arquivo, alguns em /sys, outros em /proc, mas o kernel Linux está basicamente mapeado aí.

Por definição essa pasta não é um sistema de arquivos comum mas sim um “virtual file system”. Por ser virtual, ele não existe! E mais: Seu tamanho em disco é zero, pois sua existência é gerada no momento do boot e serve apenas para apontar rotas de comandos diretamente com o kernel Linux. Você sequer pode apagar algo lá dentro: Não se pode apagar o que não existe.

Caso tente ver o tamanho total em disco da pasta /proc, perceberá que ocupa zero bytes em disco; Porém virtualmente ocupa 140 TeraBytes! Isso ocorre porque ele representa a capacidade máxima do seu hardware naquele instante. No meu exemplo, meu computador saberia lidar com até 140 Tb sem problemas.

Como ja explicado aqui, o Linux é um Kernel, que funciona como a cola que une hardware e software. E o papel da pasta /proc é ser uma interface de controle sobre os processos: Ela te dará informações diretas sobre os processos de sistema que o kernel está gerenciando. Não apenas detalhes do quanto de memória RAM cada processo está consumindo, você verá detalhes do consumo da CPU e da GPU por cada processo, quais núcleos do processador possuem permissão (via cpulimits) para executar cada um dos processos em execução na máquina naquele instante, o que estão fazendo, enfim: Um grande status em tempo real.

No exemplo do Chrome inclusive, nota-se que a Google mitigou algumas falhas da Intel diretamente no navegador como visto em status, dentro da pasta da respectiva PID do processo:

Speculation_Store_Bypass: thread force mitigated

Todas essas informações e mais um pouco, estão disponíveis para quase todos os usuários em /proc. Lembrando que alguns dados ficam ocultos, visíveis somente para o usuário root, como por exemplo quais espaços de memória RAM determinado processo está usando naquele instante.

2. Verificando

Pois bem, o conteúdo de /proc são centenas de pastas com arquivos com zero bytes em disco. Como fazer a leitura deles?

Basta abrir o terminal, digitar “cat” e colar na frente o caminho do arquivo que deseja ver seu conteúdo.
Por exemplo, quero ver o conteúdo de /proc/meminfo. Para isso:

$ cat /proc/meminfo

Isso te dará informações sobre as memórias RAM em uso. A mesma sintaxe de comando vale para todos os demais supracitados na lista acima.

3. Funcionalidade

Cada arquivo em /proc tem uma função especifica. Se você soube o que cada um faz, terá total consciência de tudo que está acontecendo no seu computador naquele instante. A seguir uma tabela com as mais importantes (alguns requerem root):

  • /proc/cmdline – Informações detalhadas de como foi o boot do Kernel, exibindo os parâmetros definidos no GRUB.
  • /proc/cpuinfo – Informações detalhadas de flags suportadas e modelo do processador.
  • /proc/diskstats – Informações sobre os discos e outros dispositivos nas portas SATA, NVMe e IDE.
  • /proc/console – Informações do console atual, incluindo TTY.
  • /proc/devices – Informações de todos os dispositivos reconhecidos pelo Kernel durante o boot.
  • /proc/fb – Dispositivo de saída de vídeo em uso naquele instante.
  • /proc/filesystems – Todos os sistemas de arquivos atualmente suportados pelo kernel.
  • /proc/iomem – Mapa de uso de memória RAM pelos dispositivos.
  • /proc/ioports – Portas registradas de todos os dispositivos que fazem comunicação de entrada e saída.
  • /proc/loadavg – Média de carga de uso do sistema. – Mesma informação exibida com o comando “top”
  • /proc/locks – Arquivos atualmente bloqueados pelo kernel
  • /proc/meminfo – Informações detalhadas do mapa de memória RAM em uso (requer root).
  • /proc/misc – Dispositivos genéricos registrados com drivers genéricos.
  • /proc/modules – Todos os módulos atualmente carregados no kernel.
  • /proc/mounts – Todos os pontos de montagem atualmente em uso no sistema.
  • /proc/partitions – Informações detalhadas sobre as partições do sistema.
  • /proc/pci – Informações sobre todos os dispositivos PCI
  • /proc/stat – Gravações de logs do ultimo reboot.
  • /proc/dma – Informações sobre os canais de acesso á Memória RAM
  • /proc/interrupts – Informa todas as requisições de interrupção (IRQ) do processador, solicitadas pelos processos de sistema
  • /proc/swap – Informações sobre o espaço de swap disponível.
  • /proc/uptime – Tempo em que o sistema está ligado, exibido em segundos.
  • /proc/version – Versão do kernel, GCC e distro Linux instalada. – Mesmo do comando “uname -a”
  • /proc/sys – Permite alterar parâmetros do sistema e do kernel em tempo real, sem necessidade de reboot.
    Abordarei mais a respeito desse logo abaixo.
  • Entre outros…

4. Processos

Em /proc você deve ter notado que existem várias pastas com nomes que são apenas números. Elas representam cada processo aberto no computador no espaço de usuário! As demais pastas que não são números, são processos de sistema.

Por exemplo, a pasta “1” representa o principal daemon pai-de-todos: SystemD. E os arquivos ali dentro dão informações sobre diversos aspectos do mesmo. Inclusive, um exemplo curioso, se você ver o conteúdo de “/proc/1/status”, verá uma linha que diz:

Speculation_Store_Bypass: thread vulnerable

Ela informa se as mitigações da Intel estão habilitadas e se o sistema está ou não vulnerável. No meu exemplo está vulnerável porque eu desabilitei as correções da Intel, conforme mencionei aqui.

Todos os processos abertos no computador estarão listados nessas pastas, com detalhes sobre tudo: desde o uso de rede, processador,  espaço de memória RAM alocado, etc, etc. Lembrando que alguns arquivos só podem ser lidos como root.

DICA:
Para se situar melhor quanto aos processos abertos, pelo terminal use o comando:

$ pstree

Ele mostrará de maneira hierárquica cada processo aberto, quem o criou e quem são seus filhos, conforme abordado nesta publicação.

5. Controle

Fundamentalmente, o que é importante para o sistema poderá ser controlado indiretamente através dos processos em /proc. O que for menos importante, periféricos e outros drivers, poderão ser controlados diretamente via /sys.

Por exemplo, reiniciar o sistema? Você mandará o comando para /proc/sys/kernel/sysrq, como verá no Exemplo 1 abaixo. Esse comando comunicará com um daemon de sistema, que fará a comunicação indireta com o kernel, pedindo o reinicio do sistema. Já a /sys, a nível de comparação, vai permitir controle direto: Enviando o comando certo por exemplo, você terá controle direto do hardware, por exemplo, acender a luz do LED do CapsLock.

Todos os comandos mencionados abaixo funcionam sob a seguinte sintaxe:
$ echo 1 > comando

Ou seja, você vai “injetar” um dígito, seja ele zero (desativado) ou 1 (ativo), ou outro valor conforme o comando. Isso aciona os gatilhos do kernel Linux de imediato.

Nota: Todos os comandos abaixo devem ser feitos como ROOT.

5.1 Exemplo 1:

O comando REISUB permite que você reinicie o sistema num momento de panico, travamento total. Normalmente para ativá-lo você deve editar o arquivo /etc/sysctl.conf, e reiniciar o PC. Com o /proc/sys, você pode ativar o gatilho sem reiniciar:

$ echo 1 > /proc/sys/kernel/sysrq 

Assim, toda a sequência de teclas do REISUB deverá funcionar de imediato caso as faça!
Maiores detalhes sobre esse comando especifiquei aqui.

Lembrando que esse tipo de modificação só fica válida até o próximo reboot, não é permanente.

5.2 Exemplo 2:

Você pode mudar o tempo em segundos que o sistema demorará até reiniciar em caso de kernel Panic com:

# echo 5 > /proc/sys/kernel/panic

Sendo “5” o tempo em segundos. Zero desativa o timer.

5.3 O poderoso /proc/sysrq-trigger

O gatilho sysrq-trigger fica em:

  • /proc/sysrq-trigger

Esse é o gatilho do kernel mais importante, permitindo fazer uma série de coisas. Curiosamente, apesar de você poder enviar comandos para ele, ele não pode ser lido, nem mesmo pelo usuário root.
Exemplos de uso do /proc/sysrq-trigger:

  • Retomada do controle do teclado, mudando seu modo de RAW para XLATE:
# echo r > /proc/sysrq-trigger
  • Envia um sinal SIGTERM para todos os processos, exceto o de PID 1 (SystemD):
# echo e > /proc/sysrq-trigger
  • Envia um sinal SIGKILL para todos os processos, exceto o de PID 1 (SystemD):
# echo i > /proc/sysrq-trigger
  • Sincroniza os discos e todas as partições montadas:
# echo s > /proc/sysrq-trigger
  • Remontar todos os sistemas de arquivos em modo somente leitura:
# echo u > /proc/sysrq-trigger
  • Reboot imediato:
# echo b > /proc/sysrq-trigger
  • Desligamento imediato:
# echo o > /proc/sysrq-trigger

Ou seja, todos os comandos do REISUB podem ser feitos manualmente via /proc/sysrq-trigger.

  • Provocando um Kernel Panic:
# echo c > /proc/sysrq-trigger

Esse comando provoca um kernel panic imediato no sistema, congelando ele totalmente!

  • Modificação Global de Processos:
# echo n > /proc/sysrq-trigger

Redefine o nível Nice de todas as tarefas de alta prioridade e em tempo real

6. Conclusão

Dominar o diretório de arquivos virtuais /proc é uma boa maneira de dominar os processos em execução no seu sistema Linux. Você terá um controle maior de tudo que acontece nele, enquanto poderá verificar dados e informações importantes sobre processos e sobre o consumo de hardware por eles.

#UrbanCompassPony

Fonte:
tldp.org

Deixe um comentário