I
- Intro
Continuando con el hilo de la publicación anterior sobre el inicio de un sistema GNU/Linux, en esta oportunidad te cuento sobre los servicios.
¡Cuántas veces habré luchado con el servicio de “la cola de impresión” en Windows! Si trabajaste en IT comenzando en puestos de Help Desk, Service Desk o similares en entornos corporativos…lo habrás padecido también -_-
En cuanto a Linux…bueno, el concepto es similar pero por supuesto tiene sus diferencias.
¡Advertencia! Si seguís leyendo, vas a continuar aprendiendo ;)
¿Servicios, Systemd, Systemctl, Sysvinit? ¡Adelante!
II
/sbin/init
Una vez montado el sistema de archivos (filesystem
) real, el kernel ejecuta el binario ubicado en /sbin/init
(típicamente hoy en día es un enlace a systemd
), este proceso /sbin/init
tendrá siempre el ID=1
. Es el primer proceso de usuario del sistema e inicia otros subprocesos.
El proceso init
determina y lanza los servicios y procesos necesarios para completar el arranque del sistema. Tradicionalmente se utilizaba System V Unix
(SysVinit
). Tenía diferentes runlevels
(“niveles de corrida/ejecución”) donde cada uno contenía conjuntos de scripts para inciar y detener servicios. Su par moderno y contemporáneo systemd
tiene retrocompatibilidad en este aspecto y soporta los runlevels
a través de runlevel targets
. Se emula el programa telinit
para trabajar con runlevels
, por lo que si estás leyendo esto desde alguna distro GNU/Linux con systemd
, podrás probarlos para alimentar tu curiosidad:
La mayoría de los procesos non-kernel
en el OS tienen su raíz en este proceso, excepto aquellos procesos iniciados directamente por el Kernel para manejar detalles internos del mismo Kernel.
init
es responsable de mantener el sistema ejecutándose y apagarlo de forma limpia y también de gestionar los servicios de login
cuando los usuarios se conectan y desconectan.
El init
puede variar según la versión y distro de Linux, como mencioné antes, el más moderno y utilizado hoy en día es systemd
.
Es posible ejecutar otro init
especificándolo en la configuración del sistema o desde el bootloader
.
¿Cómo saber qué init
utilizo? Con el siguiente comando. Observar que /usr/sbin/init
apunta a systemd
.
ls -l $(which init)
proyectoleeti@fedora42:~$ ls -l $(which init)
lrwxrwxrwx. 1 root root 22 sep 6 21:00 /usr/sbin/init -> ../lib/systemd/systemd
III
Servicios
Un servicio es un programa o proceso que se ejecuta en segundo plano (como un demonio
).
El init
systemd
es más moderno que SysVinit
y es el más utilizado actualmente. Es el responsable de cargar e iniciar procesos además de iniciar y detener servicios durante la ejecución del SO propiamente dicho. Algunos ejemplos:
Servidor web Apache httpd
.
Administrar impresoras con CUPS cupsd
.
Es usual administrar un servicio a través del comando systemctl
, por ejemplo, para habilitar o deshabilitar servicios al inicio del SO:
-
systemctl enable httpd
-
systemctl disable httpd
Para iniciarlo o detenerlo:
-
systemctl start httpd
-
systemctl stop httpd
IV
Systemd
Systemd
utiliza archivos .service
a diferencia de SysVinit
que usa scripts en bash.
Características de systemd
:
-
Ordena todos los
demonios
en su propiocgroups
(control groups), contribuyendo a una mejor trazabilidad de los procesos. -
Carga (bootea) más rápido que los sistemas
init
anteriores. -
Tiene enfoque en la paralelización.
-
Para iniciar servicios utiliza
socket
y activacionesD-Bus
. -
Ofrece inicio de demonios bajo demanda (on-demand).
-
Mantiene puntos de montaje y automontaje.
-
Puede reemplazar a
SysVinit
sin perder compatibilidad con sus scripts. -
Compatibilidad con comandos de
SysVinit
.
Revisar documentación oficial siempre se considera una buena práctica y es una herramienta que cada día es menos valorada (frente a “googlear” y preguntarle a la IA). Por ejemplo, la documentación oficial de Fedora pone a disposición una tabla equivalencias de comandos entre SystemD y SysVinit y mucho más:
-
SysVinit to Systemd
Fedora cheatsheet -
Systemd
Understanding and administering systemd :: Fedora Docs)
Ejemplo de convivencia con los comandos de SysVinit
aún en un sistema con Systemd
, en Fedora 42
:
Observar que la misma acción es ejecutable con systemctl
(systemd
) y con service
(sysVinit
), primero para consultar el estado del servicio con sshd
y luego para iniciarlo/detenerlo con start
y stop
:
systemctl status sshd
proyectoleeti@fedora42:~$ systemctl status sshd
○ sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: inactive (dead)
Docs: man:sshd(8)
man:sshd_config(5)
sudo systemctl start sshd
systemctl status sshd
proyectoleeti@fedora42:~$ sudo systemctl start sshd
proyectoleeti@fedora42:~$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Mon 2025-09-15 12:04:20 CEST; 4s ago
Invocation: 5d416aa670044ec4a863c36ee1fb69d3
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 40530 (sshd)
Tasks: 1 (limit: 15357)
Memory: 1M (peak: 1.5M)
CPU: 17ms
CGroup: /system.slice/sshd.service
└─40530 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
sudo service sshd stop
systemctl status sshd
service sshd status
proyectoleeti@fedora42:~$ sudo service sshd stop
Redirecting to /bin/systemctl stop sshd.service
proyectoleeti@fedora42:~$ systemctl status sshd
○ sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: inactive (dead)
Docs: man:sshd(8)
man:sshd_config(5)
proyectoleeti@fedora42:~$ service sshd status
Redirecting to /bin/systemctl status sshd.service
○ sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: inactive (dead)
Docs: man:sshd(8)
man:sshd_config(5)
V
systemctl
System Control
o systemctl
es un comando para administrar units
/ unidades
.
Un unit
es un archivo de configuración que sirve a systemd
para saber cómo gestionar un recurso del sistema. Describe cómo iniciar, detener, recargar o supervisar un componente del sistema.
Estos archivos usualmente están ubicados en /etc/systemd/system
o /usr/lib/systemd/system
.
Representan una tarea o componente del sistema, entre otros: Servicios
,Timers
,Sockets
,Montajes
, etc, los más comunes son servicios y sockets:
-
Un
.service
es un servicio tradicional que se ejecuta en segundo plano, comosshd
,bluetooth
, etc. -
Un
socket
define un socket de red o UNIX. Por ejemplo unsocket de red
(ip + puerto).
Systemd puede escuchar ese socket y, sólo cuando hay una conexión, inicia el servicio asociado. Útil para ahorrar recursos del sistema. A esto se lo llama socket activation
.
Algunos comandos requieren sudo
(privilegios elevados de usuario), otros no, dependiendo del alcance.
La estructura del comando es la siguiente:
systemctl [options] command [name]
A continuación algunos comandos de ejemplos muy comunes en el día a día.
-
Ver el estado de todos los procesos que controla
systemd
:-
systemctl
-
-
Mostrar todos los servicios disponibles:
-
systemctl list-units -t service -all
-
-
Listar sólo los servicios activos:
-
systemctl list-units -t service
-
-
Varias formas de iniciar un servicio:
-
systemctl start bluetooth
-
systemctl start bluetooth.service
-
systemctl start /usr/lib/systemd/system/bluetooth.service
-
-
Para detenerlo:
-
systemctl stop bluetooth
-
-
Para habilitar/deshabilitar un servicio al inicio del sistema (system boot):
-
systemctl enable sshd.service
-
systemctl disable sshd.service
-
Observar algunos de los comandos en acción, esta vez en un entorno Ubuntu 22.04:


🐧 Habrás notado que este post contiene más contenido de comandos que el anterior. No es un accidente: en el próximo complementamos con un hands-on
, es decir, un laboratorio
para practicar todo en tu propio sistema.
Hasta el siguiente post! 🐧