Cómo listar servicios en ejecución en Linux: Una guía completa para todos los sistemas init
Respuesta rápida: Cómo listar servicios en ejecución en Linux
Para listar los servicios en ejecución en Linux, utilice uno de estos comandos según su sistema init:
- systemd (Ubuntu 24.04, Debian 12, CentOS/RHEL 9, Fedora 40+ y la mayoría de las distribuciones modernas en 2026):
O, para listar todas las unidades de servicio sea cual sea su estado:systemctl list-units --type=service --state=runningsystemctl --type=service - SysVinit / sistemas más antiguos (o para incluir scripts init heredados):
service --status-all
systemd es el sistema init predeterminado en prácticamente todas las distribuciones de Linux principales de hoy en día, por lo que systemctl list-units --type=service --state=running es la respuesta en la gran mayoría de los casos. Muestra una tabla de los servicios actualmente activos con sus estados LOAD, ACTIVE y SUB. Si no se encuentra systemctl, su sistema no está ejecutando systemd; recurra a service --status-all (SysVinit) o rc-status (OpenRC).
El resto de esta guía explica cada método en detalle, incluidos el filtrado por estado, la comprobación de los servicios que se inician con el sistema y la búsqueda de servicios por puerto.
Introducción
Los servicios de Linux son procesos en segundo plano que se ejecutan de forma continua para realizar tareas del sistema, como gestionar las redes, administrar los inicios de sesión de los usuarios o ejecutar servidores web. Estos servicios pueden administrarse mediante diversas herramientas, según la distribución de Linux y el sistema init en uso. En 2026, systemd es el sistema init estándar en casi todas las distribuciones principales, por lo que la mayor parte de esta guía se centra en el comando systemctl.
Saber cómo listar los servicios en ejecución es esencial para los administradores de sistemas y los desarrolladores. Resulta útil para:
- Resolver problemas – Comprobar si un servicio crítico está en ejecución o ha fallado.
- Supervisar el rendimiento – Identificar los servicios que consumen muchos recursos.
- Auditar la seguridad – Asegurarse de que solo estén activos los servicios necesarios.
Uso de systemctl (para sistemas basados en systemd)
La mayoría de las distribuciones modernas de Linux utilizan systemd como sistema init. Esto incluye las versiones actuales de 2026, como Ubuntu (de la 16.04 a la 24.04 LTS y posteriores), Debian (de la 8 a la 12 "Bookworm" y posteriores), Fedora (40 y posteriores), CentOS Stream / RHEL / Rocky Linux / AlmaLinux (de la 7 a la 9 y posteriores) y openSUSE. El comando systemctl es la herramienta principal para gestionar y listar servicios en todos estos sistemas.
Comprobar el estado de un servicio concreto
Para comprobar si un servicio concreto está en ejecución, utilice:
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 los registros para su depuración.
Listar todos los servicios activos
Para listar todos los servicios en ejecución, utilice:
systemctl list-units --type=service --state=running
Este comando muestra una tabla de todos los servicios que están en ejecución en ese momento, junto con su estado.
Listar todos los servicios (incluidos los inactivos)
Si desea ver todos los servicios, independientemente de si están en ejecución o no:
systemctl list-units --type=service
Esto incluirá los servicios que están activos, inactivos, fallidos o en otros estados.
Filtrar los servicios por estado
Puede filtrar los servicios según su estado con:
systemctl list-units --type=service --state=failed
Esto listará solo los servicios fallidos, lo cual puede resultar útil para la resolución de problemas.
Listar los servicios habilitados en el arranque
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 tener este aspecto:
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
- Use
systemctl status <servicio>para comprobar el estado de un servicio concreto. - Use
systemctl list-units --type=service --state=runningpara listar los servicios activos. - Use
systemctl list-units --type=servicepara ver todos los servicios. - Use
systemctl list-unit-files --type=servicepara ver los servicios habilitados en el arranque.
Uso de ps y grep para los procesos en ejecución
Si desea listar los servicios en ejecución sin depender de systemctl ni de otras herramientas de gestión de servicios, puede usar ps (estado de los procesos) junto con grep para localizar procesos concretos.
Este método es útil cuando:
- Trabaja en un sistema Linux mínimo que carece de los comandos
systemctloservice. - Desea comprobar si un proceso concreto está en ejecución, independientemente del sistema init.
Listar todos los procesos en ejecución
El comando ps aux muestra todos los procesos en ejecución del sistema:
ps aux
Esto genera una lista extensa de todos los procesos en ejecución, con sus identificadores de proceso (PID), el uso de CPU, el uso de memoria y los nombres de los comandos.
Buscar un servicio concreto
Para comprobar si un servicio determinado está en ejecución, utilice ps aux | grep <nombre-del-servicio>:
ps aux | grep nginx
Esto mostrará las líneas que contienen "nginx", lo que indica si está en ejecución. La salida puede tener este aspecto:
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. Puede excluirla con:
ps aux | grep nginx | grep -v grep
Mostrar los procesos en formato jerárquico
Para obtener una vista más estructurada, utilice:
ps fax
Esto muestra una estructura en árbol de los procesos en ejecución, lo que facilita identificar qué servicios se están ejecutando y sus procesos hijos.
Encontrar servicios por puerto
Si sospecha que un servicio se está ejecutando en un puerto concreto, pero no está seguro del nombre del servicio, utilice:
netstat -tulnp | grep :80
o, si netstat no está disponible:
ss -tulnp | grep :80
Esto listará el proceso que utiliza el puerto 80 (habitualmente usado por servidores web como Nginx o Apache).
Resumen
- Use
ps auxpara listar todos los procesos en ejecución. - Use
ps aux | grep <nombre-del-servicio>para comprobar un servicio concreto. - Use
ps faxpara obtener una vista en árbol de los procesos. - Use
netstat -tulnposs -tulnppara encontrar los servicios que se ejecutan en puertos concretos.
FAQ (Preguntas Frecuentes)
1. ¿Cómo compruebo si un servicio está en ejecución en Linux?
Puede usar distintos métodos según su distribución de Linux:
- Para sistemas basados en systemd:
systemctl status <nombre-del-servicio> - Para sistemas basados en SysVinit:
service <nombre-del-servicio> status - Con ps y grep:
ps aux | grep <nombre-del-servicio>
2. ¿Cómo listo 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 - Con el comando
ps:ps aux
3. ¿Cómo puedo comprobar si un servicio se inicia en el arranque?
- 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 en el arranque:
sudo systemctl disable <nombre-del-servicio>
6. ¿Cómo puedo saber qué servicio está usando un puerto concreto?
Puede usar netstat o ss para encontrar los servicios que se ejecutan en un puerto concreto:
netstat -tulnp | grep :80
o
ss -tulnp | grep :80
7. ¿Qué ocurre si no se encuentra systemctl?
Si obtiene un error como command not found: systemctl, significa que es posible que su sistema no esté usando systemd. Pruebe con:
service --status-all
o
ps aux | grep <nombre-del-servicio>
8. ¿Cómo listo los servicios fallidos?
En los sistemas basados en systemd, ejecute:
systemctl list-units --type=service --state=failed
9. ¿Cómo habilito el registro de un servicio concreto?
Para consultar los registros de un servicio gestionado por systemd, utilice:
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 los servicios en ejecución?
¡Sí! top y htop ofrecen una vista en vivo de los procesos en ejecución:
- Use
top:top - Use
htop(interactivo y fácil de usar):
(Instálelo conhtopsudo apt install htoposudo yum install htopsi no está disponible.)
