Como Listar Serviços em Execução no Linux: Um Guia Completo para Todos os Sistemas Init

2025-02-12

Introdução

Os serviços do Linux são processos em segundo plano que executam continuamente tarefas do sistema, como gerenciar redes, lidar com logins de usuários ou executar servidores web. Esses serviços podem ser gerenciados através de várias ferramentas, dependendo da distribuição Linux e do sistema init em uso.

Saber como listar serviços em execução é essencial para administradores de sistema e desenvolvedores. Isso ajuda com:

  • Solução de problemas – Verificar se um serviço crítico está em execução ou falhou.
  • Monitoramento de desempenho – Identificar serviços que consomem muitos recursos.
  • Auditoria de segurança – Garantir que apenas serviços necessários estejam ativos.

Usando systemctl (Para Sistemas Baseados em Systemd)

A maioria das distribuições Linux modernas, incluindo Ubuntu (16.04+), CentOS (7+), Fedora e Debian (8+), usa systemd como o sistema init. O comando systemctl é a ferramenta principal para gerenciar e listar serviços nesses sistemas.

Verificando o Status de um Serviço Específico

Para verificar se um serviço específico está em execução, use:

systemctl status <service-name>

Por exemplo, para verificar se o servidor web nginx está em execução:

systemctl status nginx

A saída mostrará se o serviço está ativo (em execução), inativo ou falhou, juntamente com logs para depuração.

Listando Todos os Serviços Ativos

Para listar todos os serviços em execução, use:

systemctl list-units --type=service --state=running

Este comando exibe uma tabela de todos os serviços atualmente em execução, juntamente com seu status.

Listando Todos os Serviços (Incluindo os Inativos)

Se você quiser ver todos os serviços, independentemente de estarem em execução ou não:

systemctl list-units --type=service

Isso incluirá serviços que estão ativos, inativos, falhados ou em outros estados.

Filtrando Serviços por Estado

Você pode filtrar serviços com base em seu estado usando:

systemctl list-units --type=service --state=failed

Isso listará apenas os serviços falhados, o que pode ser útil para solução de problemas.

Listando Serviços Habilitados na Inicialização

Para verificar quais serviços estão configurados para iniciar automaticamente na inicialização:

systemctl list-unit-files --type=service | grep enabled

Exemplo de Saída

Uma saída típica de systemctl list-units --type=service --state=running pode parecer com isto:

UNIT                        LOAD   ACTIVE SUB     DESCRIPTION
cron.service                loaded active running Regular background program processing daemon
networking.service          loaded active running Raise network interfaces
ssh.service                 loaded active running OpenBSD Secure Shell server
systemd-logind.service      loaded active running Login Service

Resumo

  • Use systemctl status <service> para verificar o status de um único serviço.
  • Use systemctl list-units --type=service --state=running para listar serviços ativos.
  • Use systemctl list-units --type=service para ver todos os serviços.
  • Use systemctl list-unit-files --type=service para visualizar serviços habilitados na inicialização.

Usando ps e grep para Processos em Execução

Se você quiser listar serviços em execução sem depender do systemctl ou outras ferramentas de gerenciamento de serviços, pode usar ps (status do processo) junto com grep para encontrar processos específicos.

Esse método é útil quando:

  • Você está trabalhando em um sistema Linux minimalista que não possui os comandos systemctl ou service.
  • Você quer verificar se um processo específico está em execução, independentemente do sistema init.

Listando Todos os Processos em Execução

O comando ps aux exibe todos os processos em execução no sistema:

ps aux

Isso produzirá uma lista extensa de todos os processos em execução, incluindo seus IDs de processo (PIDs), uso de CPU, uso de memória e nomes de comando.

Buscando um Serviço Específico

Para verificar se um serviço específico está em execução, use ps aux | grep <service-name>:

ps aux | grep nginx

Isso exibirá linhas que incluem "nginx", mostrando se está em execução. A saída pode parecer com isto:

root      1034  0.0  0.3  49536  3412 ?        Ss   12:34   0:00 nginx: master process /usr/sbin/nginx
www-data  1035  0.0  0.2  49536  2824 ?        S    12:34   0:00 nginx: worker process
user      2045  0.0  0.0  14856   900 pts/0    S+   12:35   0:00 grep --color=auto nginx

Aqui:

  • As duas primeiras linhas indicam que o serviço nginx está em execução.
  • A última linha (grep --color=auto nginx) é o próprio comando grep. Você pode excluí-lo usando:
ps aux | grep nginx | grep -v grep

Exibindo Processos em um Formato Hierárquico

Para uma visualização mais estruturada, use:

ps fax

Isso mostra uma estrutura em árvore dos processos em execução, facilitando a identificação de quais serviços estão em execução e seus processos filhos.

Encontrando Serviços por Porta

Se você suspeitar que um serviço está em execução em uma porta específica, mas não tem certeza do nome do serviço, use:

netstat -tulnp | grep :80

ou, se netstat não estiver disponível:

ss -tulnp | grep :80

Isso listará o processo que está usando a porta 80 (comumente usada por servidores web como Nginx ou Apache).

Resumo

  • Use ps aux para listar todos os processos em execução.
  • Use ps aux | grep <service-name> para verificar um serviço específico.
  • Use ps fax para uma visualização em árvore dos processos.
  • Use netstat -tulnp ou ss -tulnp para encontrar serviços em execução em portas específicas.
Como Listar Serviços em Execução no Linux

FAQ (Perguntas Frequentes)

1. Como faço para verificar se um serviço está em execução no Linux?

Você pode usar diferentes métodos dependendo da sua distribuição Linux:

  • Para sistemas baseados em systemd:
    systemctl status <service-name>
    
  • Para sistemas baseados em SysVinit:
    service <service-name> status
    
  • Usando ps e grep:
    ps aux | grep <service-name>
    

2. Como faço para listar todos os serviços em execução?

  • Para sistemas baseados em systemd:
    systemctl list-units --type=service --state=running
    
  • Para sistemas baseados em SysVinit:
    service --status-all
    
  • Usando o comando ps:
    ps aux
    

3. Como posso verificar se um serviço inicia na inicialização?

  • Para systemd:
    systemctl is-enabled <service-name>
    
  • Para SysVinit (sistemas baseados em RHEL):
    chkconfig --list <service-name>
    

4. Como reiniciar um serviço?

  • Para sistemas baseados em systemd:
    sudo systemctl restart <service-name>
    
  • Para sistemas baseados em SysVinit:
    sudo service <service-name> restart
    

5. Como parar ou desabilitar um serviço?

  • Para parar um serviço temporariamente:
    sudo systemctl stop <service-name>
    
  • Para impedir que um serviço inicie na inicialização:
    sudo systemctl disable <service-name>
    

6. Como posso encontrar qual serviço está usando uma porta específica?

Você pode usar netstat ou ss para encontrar serviços em execução em uma porta específica:

netstat -tulnp | grep :80

ou

ss -tulnp | grep :80

7. E se systemctl não for encontrado?

Se você receber um erro como comando não encontrado: systemctl, isso significa que seu sistema pode não estar usando systemd. Tente usar:

service --status-all

ou

ps aux | grep <service-name>

8. Como listar serviços falhados?

Para sistemas baseados em systemd, execute:

systemctl list-units --type=service --state=failed

9. Como habilitar logs para um serviço específico?

Para verificar logs de um serviço gerenciado pelo systemd, use:

journalctl -u <service-name>

Para visualizar logs em tempo real:

journalctl -u <service-name> -f

10. Posso usar top ou htop para ver serviços em execução?

Sim! top e htop fornecem uma visualização ao vivo dos processos em execução:

  • Use top:
    top
    
  • Use htop (interativo e amigável ao usuário):
    htop
    
    (Instale com sudo apt install htop ou sudo yum install htop se não estiver disponível.)