Tudo o que acontece num sistema Linux acontece dentro de um processo: o servidor web, a base de dados, a sessão SSH de um administrador — e também o minerador de criptomoedas que um atacante deixou a correr após comprometer uma aplicação. Saber listar, filtrar e interpretar processos é, por isso, uma das competências mais básicas e mais poderosas de quem administra sistemas ou trabalha em cibersegurança. As ferramentas centrais são duas e complementam-se: o ps tira uma fotografia dos processos num instante preciso; o top filma-os em contínuo.
Percorremos aqui as variantes do ps que realmente se usam, o essencial do top, e uma caça completa a um processo suspeito — para praticar no simulador interativo mais abaixo.
O que faz o ps
O ps (process status) lê a informação dos processos a partir do /proc e apresenta-a em tabela: quem é o dono, quanto CPU e memória consome, quando arrancou, em que estado está e que comando o lançou. É um instantâneo — o que aparece é o estado do sistema no momento exato em que o comando correu.
Há uma particularidade histórica importante: o ps aceita duas famílias de sintaxe. A sintaxe BSD usa opções sem hífen (ps aux); a sintaxe UNIX/System V usa hífen (ps -ef). Ambas funcionam no GNU/Linux e produzem colunas diferentes, e é útil dominar as duas:
ps [opções] # sem opções: só os processos do seu utilizador neste terminal
ps aux # BSD: todos os processos, formato detalhado
ps -ef # System V: todos os processos, com a coluna PPID
Um detalhe que surpreende quem começa: sem opções, o ps mostra apenas os processos do seu utilizador associados ao terminal atual — tipicamente a shell e o próprio ps. Para ver a máquina inteira é preciso pedir.
As opções que interessam
Selecionar processos
aux— o clássico BSD:amostra os processos de todos os utilizadores,uativa o formato detalhado (com%CPU,%MEMeSTAT) exinclui os processos sem terminal — ou seja, todos os serviços.-e— todos os processos, em sintaxe System V; quase sempre aparece combinado com-f(formato completo) no famosops -ef.-u utilizador— só os processos de um utilizador concreto. Excelente para responder a «o que anda owww-dataa correr?».-p PID— só o processo com aquele identificador; o zoom natural depois de encontrar um suspeito.-C nome— seleciona pelo nome do executável, por exemplops -C sshd.
Escolher colunas e ordenar
-o colunas— define exatamente as colunas a mostrar:pid,ppid,user,%cpu,%mem,stat,etime(há quanto tempo corre),cmd, entre muitas outras. É a opção dos scripts e dos relatórios.--sort— ordena pelo campo indicado; o sinal-inverte a ordem.--sort=-%cpupõe os processos mais gulosos no topo;--sort=-rssfaz o mesmo para a memória.--forest— desenha a árvore pai→filho na coluna do comando, com cada processo pendurado no processo que o criou.
# Os cinco processos que mais CPU consomem, com as colunas essenciais
ps -eo pid,ppid,user,%cpu,%mem,etime,cmd --sort=-%cpu | head -6
# A árvore completa de processos, com donos e PPID
ps -ef --forest
Ler a coluna STAT
No formato BSD, a coluna STAT resume o estado de cada processo: R a correr, S a dormir, D em espera de I/O ininterrompível, T parado e Z zombie — terminou, mas o pai ainda não recolheu o estado de saída. As letras adicionais afinam o retrato: s líder de sessão, l multithread, + em primeiro plano. Um serviço saudável passa a vida em S; um processo permanentemente em R com CPU alta merece um segundo olhar.
E o top?
O top mostra o mesmo universo, mas em contínuo: carga do sistema (load average), distribuição do CPU entre user space e kernel, memória, e a lista de processos atualizada a cada poucos segundos. Dentro do top, as teclas fazem o trabalho das opções: P ordena por CPU, M por memória, 1 mostra cada core individualmente e k envia um sinal a um processo. Para usar em scripts ou guardar registos há o modo batch:
top -b -n 1 > snapshot.txt # um instantâneo completo, sem interatividade
ps e top em cibersegurança
Deteção de processos mascarados. Qualquer programa pode dar a si próprio um nome inocente — incluindo imitar kernel threads como [kworker/0:1]. Mas há uma verdade que o atacante não controla: a genealogia. Os kernel threads verdadeiros são todos filhos do kthreadd (PID 2). Um «kworker» cujo PPID aponta para uma shell, visível num ps -ef ou num ps aux --forest, é um impostor. Confirma-se com ls -l /proc/PID/exe, que revela o binário real — mesmo que já tenha sido apagado do disco.
Caça a mineradores e abuso de recursos. Um servidor comprometido para minerar criptomoedas denuncia-se pelo consumo: ps aux --sort=-%cpu ou um top mostram de imediato um processo desconhecido a ocupar quase todo o CPU. O load average persistentemente alto num servidor que devia estar folgado é muitas vezes o primeiro sintoma.
Árvore de processos em análise forense. Depois de uma intrusão, a pergunta central é «como é que isto foi lançado?». A cadeia worker do servidor web → sh -c → binário desconhecido é a assinatura clássica de execução remota de código através de uma aplicação web vulnerável: servidores web não lançam shells por iniciativa própria. O ps -ef --forest torna estas cadeias evidentes e deve ser recolhido logo no início da resposta ao incidente, antes de qualquer contenção.
Auditoria de privilégios. ps -u root responde a «o que corre como root nesta máquina?» — e cada linha dessa lista é superfície de ataque com privilégios máximos. Serviços que não precisam de root não devem lá estar; é o princípio do menor privilégio aplicado a processos.
Experimente no simulador interativo
A simulação abaixo recria uma máquina com um intruso escondido: um falso kernel thread a minerar com 97% de CPU, lançado através do servidor web. À esquerda vê todos os processos do sistema; à direita, um terminal que executa cada variante do ps (e um snapshot do top) sobre esses processos. Clique nas opções para as combinar — a lista da esquerda ilumina o que cada comando seleciona — ou use Demonstrar tudo para seguir a caça ao processo suspeito passo a passo, do primeiro ps aux até à identificação completa da cadeia de compromisso.
Erros comuns e boas práticas
- Confundir
ps auxcomps -aux. Com hífen, opspode tentar interpretarxcomo um nome de utilizador. A sintaxe BSD é sem hífen; se preferir hífen, useps -ef. - Confiar no nome do processo. O nome é escolhido por quem lança o processo e é trivial de falsificar. Em caso de dúvida, valide o
PPID, a árvore e o/proc/PID/exe. ps | grepa apanhar o próprio grep. O velhops aux | grep nginxdevolve também a linha do própriogrep. Prefirapgrep -a nginxoups -C nginx, que não têm esse problema.- Matar antes de recolher. Num incidente, um
kill -9imediato destrói evidência valiosa. Primeiro registe:ps -ef --forest,ls -l /proc/PID/exe, ficheiros e ligações abertas. A contenção vem depois. - Usar o
topinterativo em scripts. Em automação, usetop -b -n 1ou, melhor ainda,ps -eocom as colunas exatas — a saída é estável e fácil de processar. - Ignorar processos zombie. Um
Zocasional é inofensivo; dezenas de zombies do mesmo pai indicam um serviço defeituoso a esgotar a tabela de processos.
Conclusão
O ps e o top são o par de olhos de quem administra sistemas: um fotografa, o outro filma, e juntos respondem às perguntas que importam — o que está a correr, quem o lançou e quanto custa. Em segurança, são frequentemente a diferença entre detetar um compromisso em minutos ou descobri-lo meses depois na fatura de eletricidade. Se quer levar estas competências mais longe, com formação prática em administração de sistemas e cibersegurança, conheça o catálogo de serviços da HJFR — e veja também o artigo sobre o useradd, onde a gestão de utilizadores encontra a gestão de processos.
Este artigo faz parte da série “Comandos Linux, um a um” do blog HJFR — fique atento aos próximos comandos.
