Módulo 1 — Operación de Sistemas Operativos GNU/Linux
Al finalizar vas a poder:
systemctl status ssh
systemctl is-enabled ssh
Qué corre en el servidor y con qué usuario.
Un programa es un archivo, por ejemplo /usr/bin/sleep. Un proceso es una ejecución de ese programa.
| Dato | Para qué sirve |
|---|---|
| PID | Identificar el proceso; se usa con kill |
| Usuario | Saber con qué identidad corre |
| Comando | Saber qué programa es |
El usuario del proceso decide a qué archivos puede acceder, como vimos en la clase 9.
Cada proceso tiene un padre (PPID). En la raíz está systemd, PID 1.
pstree -p # árbol completo con PID
pstree -sp $$ # camino desde PID 1 hasta mi shell
$$ es el PID de la shell actual.
Debian no trae pstree. Hay que instalar el paquete psmisc:
sudo apt install psmisc
systemd(1)───sshd(714)───sshd-session(890)───sshd-session(897)───bash(898)───pstree(…)
La conexión SSH aparece dos veces porque una parte corre como root y otra con tu usuario.
ps -ef # todos los procesos
ps -ef | grep python # los que tienen «python» en su línea
ps -u cristian # procesos de un usuario
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 22:39 ? 00:00:00 /sbin/init
root 714 1 0 22:39 ? 00:00:00 sshd: /usr/sbin/sshd -D …
cristian 810 788 0 22:39 ? 00:00:00 sshd-session: cristian@pts/0
cristian 812 810 0 22:39 pts/0 00:00:00 -bash
Las columnas que más usamos son UID (usuario), PID y CMD (comando).
ps saca una foto; top muestra una película.
top muestra arriba el estado general del equipo y debajo los procesos, ordenados por consumo de CPU. Se actualiza cada pocos segundos y se sale con q.

| Dato | Qué leer |
|---|---|
up 3:12 |
Tiempo encendido |
1 user |
Usuarios conectados |
load average |
Carga de 1, 5 y 15 minutos; se compara con la cantidad de CPU (nproc) |
Tareas |
Procesos por estado, incluidos los zombis |
%Cpu(s) |
us programas, sy kernel, id ocioso, wa espera de disco |
MiB Mem |
RAM total, libre, usada y en búfer/caché |
dispon Mem |
Memoria disponible: la que dice si falta memoria |
Con una CPU, una carga de 1 es ocupación plena. Si la carga es alta, la CPU está ociosa y wa es alto, el problema está en el disco.

| Columna | Qué indica |
|---|---|
| PID | Número del proceso |
| USUARIO | Con qué usuario corre |
| PR, NI | Prioridad del proceso |
| VIRT | Memoria que el proceso tiene reservada |
| RES | Memoria RAM que usa de verdad |
| SHR | Parte de RES compartida con otros procesos |
| S | Estado |
| %CPU | Porcentaje de CPU que usó en el último intervalo |
| %MEM | RES como porcentaje de la RAM total |
| HORA+ | Tiempo de CPU acumulado, no la hora del día |
| ORDEN | Comando |
Para ver quién consume memoria se mira RES o %MEM. VIRT suele ser mucho más grande y no indica un problema.
La prioridad se ve en NI y va de -20 a 19:
| NI | Prioridad |
|---|---|
| -20 | La más alta: cuando varios compiten, recibe más CPU |
| 0 | La normal; casi todos los procesos tienen 0 |
| 19 | La más baja: cuando varios compiten, recibe menos CPU |
La columna S muestra el estado:
| Estado | Lectura |
|---|---|
| R, S | Normal: ejecutando o esperando |
| Z | Zombi: ya terminó; mirar el proceso padre |
| D | Esperando disco: muchos, con carga alta, indican un problema de disco |
| Tecla | Acción |
|---|---|
P |
Ordenar por CPU |
M |
Ordenar por memoria |
u |
Mostrar un usuario |
1 |
Una línea por CPU |
q |
Salir |
Un proceso que ocupa una CPU entera muestra cerca de 100 % en %CPU.
top, con barras, colores y desplazamiento.F3 busca, F4 filtra, F5 muestra el árbol, F6 ordena, y q o F10 salen.sudo apt install htop.Otra alternativa es btop, que se instala con sudo apt install btop.
Primero se le pide que termine; forzarlo es el último recurso.
Antes de terminar un proceso hay que saber su PID.
pgrep -a python # PID y comando de los procesos «python»
ps -ef | grep python # lo mismo, con usuario y más columnas
jobs -l # trabajos lanzados desde esta shell
En top y htop está en la columna PID. En htop, F3 busca por nombre.
$ pgrep -a sleep
951 sleep 200
952 sleep 201
$ kill 951
$ pgrep -a sleep
952 sleep 201
kill 1234 # pedir al proceso 1234 que termine
kill -9 1234 # forzarlo: último recurso
killall sleep # terminar todos los procesos llamados sleep
kill usa el PID que sacamos de ps, top o htop.-9, el programa no puede cerrar ordenadamente.killall actúa por nombre, así que conviene revisar antes con pgrep -a sleep.killall viene en el paquete psmisc, igual que pstree, y hay que instalarlo.Después hay que comprobar que terminó: ps -p 1234.
| Proceso | Sin sudo | Con sudo |
|---|---|---|
| Propio | Sí | Sí |
| De otro usuario o de root | No: «Operación no permitida» | Sí |
Un servicio se detiene con systemctl stop.
Para terminar un proceso: identificarlo, usar kill, comprobar, y usar kill -9 solo si sigue vivo.
Cómo recuperar la terminal sin cortar lo que está corriendo.
sleep 300 & # segundo plano: [1] 1234
jobs # trabajos de esta shell
fg %1 # traer al primer plano
| Acción | Efecto |
|---|---|
comando & |
Arranca en segundo plano |
Ctrl+C |
Interrumpe el de primer plano |
Ctrl+Z |
Suspende el de primer plano, sin terminarlo |
bg %1 |
Hace que el trabajo suspendido siga corriendo en segundo plano |
fg %1 |
Lo trae al primer plano |
[1] es el número de trabajo; 1234, el PID.
Ctrl+Z y Ctrl+C?kill antes que kill -9?Procesos que systemd arranca, vigila y detiene.
Un servicio es una unidad .service, así que ssh equivale a ssh.service.
| Pregunta | Consulta | Se cambia con |
|---|---|---|
| ¿Corre ahora? | systemctl is-active X |
start, stop, restart |
| ¿Arranca con el sistema? | systemctl is-enabled X |
enable, disable |
Las dos respuestas son independientes. Un servicio detenido con stop vuelve a arrancar al reiniciar si está habilitado, y enable no lo inicia en el momento.
systemctl status X # consultar: sin sudo
sudo systemctl start X
sudo systemctl stop X
sudo systemctl restart X
sudo systemctl reload X # si el servicio lo admite
sudo systemctl enable X
sudo systemctl disable X
sudo systemctl enable --now X # habilitar e iniciar
Para consultar no hace falta sudo; para cambiar, sí.
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
Active: active (running) since Sun 2026-09-27 22:39:23 -03; 9min ago
Main PID: 304 (systemd-timesyn)
Status: "Contacted time server 170.210.222.2:123 (2.debian.pool.ntp.org)."
CGroup: /system.slice/systemd-timesyncd.service
└─304 /usr/lib/systemd/systemd-timesyncd
| Línea | Qué leer |
|---|---|
| Loaded | Dónde está la unidad y si está habilitada |
| Active | Si corre ahora y desde cuándo |
| Main PID | Proceso principal |
| CGroup | Procesos del servicio |
Al final aparecen las últimas líneas de su registro. Si se abre el paginador, se sale con q.
systemctl list-units --type=service --state=running
systemctl --failed
systemctl cat systemd-timesyncd
De systemctl cat nos interesan dos líneas. ExecStart= es el programa que ejecuta y User= es la cuenta con la que corre. Si User= no figura, en general corre como root.
inactive y enabled. ¿Qué pasará al reiniciar?systemctl status no necesita sudo y systemctl stop sí?El mensaje de error ya indica qué comandos usar.
Job for demo-falla.service failed because the control process exited with error
code.
See "systemctl status demo-falla.service" and "journalctl -xeu demo-falla.service"
for details.
systemctl status X: ver si dice failed y leer las últimas líneas.sudo journalctl -xeu X: el registro del servicio, desde el final.sudo systemctl restart X y volver a consultar.sudo journalctl -u X -n 20 # últimas 20 líneas
sudo journalctl -u X -f # seguir en vivo; salir con Ctrl+C
En la clase 14 vamos a profundizar en los registros.
Cómo apagar el servidor sin dañar lo que está corriendo.
sudo systemctl poweroff
sudo systemctl reboot
sudo shutdown -r +5 "Reinicio por mantenimiento"
sudo shutdown -c
poweroff, reboot y shutdown hacen lo mismo que las órdenes de systemctl.shutdown con un tiempo avisa a los usuarios conectados, y -c lo cancela.| En VirtualBox | Qué ocurre |
|---|---|
| Enviar señal de apagado | El sistema hace un apagado ordenado |
| Apagar la máquina | Equivale a cortar la alimentación |
Por SSH, poweroff deja el servidor sin acceso hasta que alguien lo encienda. Antes de apagar o reiniciar, confirmá el equipo con hostname.
systemctl list-units --type=service --state=running
systemctl --failed
top
sudo ss -tlnp
top? ¿Con qué usuario corre cada servicio?Es mejor que un servicio corra con su propia cuenta y no como root. Si un servicio no se usa, se detiene y deshabilita con sudo systemctl disable --now X.
Objetivo: encontrar y terminar un proceso que consume CPU, y administrar un servicio real.
htop y psmisc, detectar un consumo de CPU y terminarlo con kill.killall.systemd-timesyncd.man ps, man pstree, man top, help kill, man killall, help jobs.