Cómo listar servicios en ejecución en Linux: Una guía completa para todos los sistemas init
Introducción
Los servicios de Linux son procesos en segundo plano que se ejecutan continuamente para realizar tareas del sistema, como gestionar redes, manejar inicios de sesión de usuarios o ejecutar servidores web. Estos servicios pueden ser gestionados a través de diversas herramientas, dependiendo de la distribución de Linux y el sistema init en uso.
Saber cómo listar los servicios en ejecución es esencial para los administradores de sistemas y desarrolladores. Ayuda con:
- Solución de problemas – Verificar si un servicio crítico está en ejecución o ha fallado.
- Monitoreo del rendimiento – Identificar servicios que consumen muchos recursos.
- Auditoría de seguridad – Asegurarse de que solo los servicios necesarios estén activos.
Usando systemctl (Para sistemas basados en Systemd)
La mayoría de las distribuciones modernas de Linux, incluyendo Ubuntu (16.04+), CentOS (7+), Fedora y Debian (8+), utilizan systemd como el sistema init. El comando systemctl
es la herramienta principal para gestionar y listar servicios en estos sistemas.
Comprobando el estado de un servicio específico
Para verificar si un servicio específico está en ejecución, usa:
systemctl status <nombre-del-servicio>
Por ejemplo, para comprobar si el servidor web nginx está en ejecución:
systemctl status nginx
La salida mostrará si el servicio está activo (en ejecución), inactivo o fallido, junto con registros para depuración.
Listando todos los servicios activos
Para listar todos los servicios en ejecución, usa:
systemctl list-units --type=service --state=running
Este comando muestra una tabla de todos los servicios actualmente en ejecución junto con su estado.
Listando todos los servicios (incluyendo los inactivos)
Si deseas ver todos los servicios, independientemente de si están en ejecución o no:
systemctl list-units --type=service
Esto incluirá servicios que están activos, inactivos, fallidos o en otros estados.
Filtrando servicios por estado
Puedes filtrar servicios según su estado usando:
systemctl list-units --type=service --state=failed
Esto listará solo los servicios fallidos, lo que puede ser útil para la solución de problemas.
Listando servicios habilitados al inicio
Para comprobar qué servicios están configurados para iniciarse automáticamente al arrancar:
systemctl list-unit-files --type=service | grep enabled
Ejemplo de salida
Una salida típica de systemctl list-units --type=service --state=running
podría verse así:
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
Resumen
- Usa
systemctl status <servicio>
para comprobar el estado de un servicio específico. - Usa
systemctl list-units --type=service --state=running
para listar servicios activos. - Usa
systemctl list-units --type=service
para ver todos los servicios. - Usa
systemctl list-unit-files --type=service
para ver servicios habilitados al inicio.
Usando ps y grep para procesos en ejecución
Si deseas listar servicios en ejecución sin depender de systemctl
u otras herramientas de gestión de servicios, puedes usar ps (estado de procesos) junto con grep para encontrar procesos específicos.
Este método es útil cuando:
- Estás trabajando en un sistema Linux mínimo que carece de comandos
systemctl
oservice
. - Quieres comprobar si un proceso específico está en ejecución, independientemente del sistema init.
Listando todos los procesos en ejecución
El comando ps aux
muestra todos los procesos en ejecución en el sistema:
ps aux
Esto producirá una lista extensa de todos los procesos en ejecución, incluyendo sus identificadores de proceso (PIDs), uso de CPU, uso de memoria y nombres de comandos.
Buscando un servicio específico
Para comprobar si un servicio particular está en ejecución, usa ps aux | grep <nombre-del-servicio>
:
ps aux | grep nginx
Esto mostrará líneas que incluyen "nginx", indicando si está en ejecución. La salida puede verse así:
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
Aquí:
- Las dos primeras líneas indican que el servicio nginx está en ejecución.
- La última línea (
grep --color=auto nginx
) es el propio comandogrep
. Puedes excluirlo usando:
ps aux | grep nginx | grep -v grep
Mostrando procesos en un formato jerárquico
Para una vista más estructurada, usa:
ps fax
Esto muestra una estructura de árbol de los procesos en ejecución, facilitando la identificación de qué servicios están en ejecución y sus procesos hijos.
Encontrando servicios por puerto
Si sospechas que un servicio está ejecutándose en un puerto específico pero no estás seguro del nombre del servicio, usa:
netstat -tulnp | grep :80
o, si netstat
no está disponible:
ss -tulnp | grep :80
Esto listará el proceso que utiliza el puerto 80 (comúnmente utilizado por servidores web como Nginx o Apache).
Resumen
- Usa
ps aux
para listar todos los procesos en ejecución. - Usa
ps aux | grep <nombre-del-servicio>
para comprobar un servicio específico. - Usa
ps fax
para una vista en árbol de los procesos. - Usa
netstat -tulnp
oss -tulnp
para encontrar servicios que se ejecutan en puertos específicos.

FAQ (Preguntas Frecuentes)
1. ¿Cómo puedo comprobar si un servicio está en ejecución en Linux?
Puedes usar diferentes métodos dependiendo de tu distribución de Linux:
- Para sistemas basados en systemd:
systemctl status <nombre-del-servicio>
- Para sistemas basados en SysVinit:
service <nombre-del-servicio> status
- Usando ps y grep:
ps aux | grep <nombre-del-servicio>
2. ¿Cómo puedo listar todos los servicios en ejecución?
- Para sistemas basados en systemd:
systemctl list-units --type=service --state=running
- Para sistemas basados en SysVinit:
service --status-all
- Usando el comando
ps
:ps aux
3. ¿Cómo puedo comprobar si un servicio se inicia al arrancar?
- Para systemd:
systemctl is-enabled <nombre-del-servicio>
- Para SysVinit (sistemas basados en RHEL):
chkconfig --list <nombre-del-servicio>
4. ¿Cómo reinicio un servicio?
- Para sistemas basados en systemd:
sudo systemctl restart <nombre-del-servicio>
- Para sistemas basados en SysVinit:
sudo service <nombre-del-servicio> restart
5. ¿Cómo detengo o deshabilito un servicio?
- Para detener un servicio temporalmente:
sudo systemctl stop <nombre-del-servicio>
- Para evitar que un servicio se inicie al arrancar:
sudo systemctl disable <nombre-del-servicio>
6. ¿Cómo puedo encontrar qué servicio está utilizando un puerto específico?
Puedes usar netstat
o ss
para encontrar servicios que se ejecutan en un puerto específico:
netstat -tulnp | grep :80
o
ss -tulnp | grep :80
7. ¿Qué pasa si systemctl
no se encuentra?
Si recibes un error como comando no encontrado: systemctl
, significa que tu sistema podría no estar utilizando systemd. Intenta usar:
service --status-all
o
ps aux | grep <nombre-del-servicio>
8. ¿Cómo puedo listar servicios fallidos?
Para sistemas basados en systemd, ejecuta:
systemctl list-units --type=service --state=failed
9. ¿Cómo habilito el registro para un servicio específico?
Para comprobar los registros de un servicio gestionado por systemd, usa:
journalctl -u <nombre-del-servicio>
Para ver los registros en tiempo real:
journalctl -u <nombre-del-servicio> -f
10. ¿Puedo usar top
o htop
para ver servicios en ejecución?
¡Sí! top
y htop
proporcionan una vista en vivo de los procesos en ejecución:
- Usa
top
:top
- Usa
htop
(interactivo y fácil de usar):
(Instala conhtop
sudo apt install htop
osudo yum install htop
si no está disponible.)