← Terminal y Línea de Comandos en Linux Bloque 8 · Paquetes y estado del sistema · Tema 37 de 43

Tema 37

Consultar el estado del sistema

«El servidor está lento.» «¿Esta máquina tiene memoria suficiente?» «¿Qué versión del kernel corre aquí?» «¿Cuántos núcleos tiene?» Son las primeras preguntas que se le hacen a un sistema, propio o ajeno, y en una terminal cada una se responde con un comando de una palabra. La dificultad no está en escribirlos sino en leerlos: una carga de 3,5 puede ser holgura o saturación, y una máquina con el 15 % de la memoria «libre» puede estar perfectamente bien. Este tema enseña a interpretar esos números. Y a diferencia de los dos anteriores, todo lo que sigue vale igual en cualquier distribución.

1. Las preguntas y sus comandos

En el tema 8 conocimos /proc, el directorio donde el kernel publica su estado en forma de archivos de texto que se generan al leerlos, y dijimos que muchos comandos son lectores de /proc con mejor presentación. Los de este tema son exactamente eso. Ninguno modifica nada, ninguno necesita sudo —con dos excepciones que señalaremos—, y todos responden al instante.

PreguntaComandoLee de
¿Qué kernel se está ejecutando, y en qué arquitectura?unameEl kernel
¿Cómo se llama la máquina, y qué equipo es?hostnamectl/etc/hostname, el firmware
¿Cuánto hace que está encendida? ¿Cuánto trabajo tiene?uptime/proc/uptime, /proc/loadavg
¿Cuánta memoria tiene, y cuánta queda?free/proc/meminfo
¿Qué procesador lleva, y cuántos núcleos?lscpu, nproc/proc/cpuinfo, /sys
¿Qué otros dispositivos tiene?lspci, lsusb/sys
¿Cómo evoluciona todo eso, segundo a segundo?vmstat, watch/proc

Varios de estos datos ya pasaron por la pantalla: la primera línea de top, en el tema 32, mostraba el tiempo encendido y la carga, y las dos siguientes, la memoria. Allí quedó la promesa de volver sobre ellos. La diferencia es de propósito: top es para mirar, y estos comandos escriben una respuesta breve y terminan, de modo que se pueden filtrar, guardar en un archivo o usar en un script.

2. uname: el kernel

uname, de Unix name, informa sobre el kernel que está en ejecución. Sin opciones responde una sola palabra; con -a, todo lo que sabe.

terminal
$ uname
Linux
$ uname -r
6.8.0-87-generic
$ uname -a
Linux equipo 6.8.0-87-generic #87-Ubuntu SMP PREEMPT_DYNAMIC Tue Sep 22 18:03:36 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
OpciónMuestraEn el ejemplo
-sEl nombre del kernel. Es lo que se muestra sin opciones.Linux
-nEl nombre de la máquina en la red.equipo
-rLa versión del kernel. Es la opción que más se usa.6.8.0-87-generic
-vLos datos de su compilación: número, características y fecha.#87-Ubuntu SMP … 2026
-mLa arquitectura de la máquina.x86_64
-oEl sistema operativo.GNU/Linux
-aTodo lo anterior, en una línea.

En el tema 1, este mismo equipo respondía 6.8.0-45-generic. El número cambió porque las actualizaciones del tema 35 trajeron un kernel nuevo y el equipo se reinició después: uname informa el kernel que está en memoria, no el más nuevo que haya en el disco. La versión se lee así:

anatomía de la versión del kernel, en Ubuntu
6.8.0-87-generic
│ │ │  │    │
│ │ │  │    └─ la variante: «generic» es la de uso general
│ │ │  └─ la revisión de Ubuntu: sube con cada actualización de seguridad
│ │ └─ el nivel de corrección: en Ubuntu queda siempre en 0
│ └─ la versión menor: una nueva cada dos o tres meses
└─ la versión mayor

Las dos primeras cifras, 6.8, son la versión del kernel de Linux tal como la publican sus desarrolladores; lo que sigue al guion es de la distribución, y cada una lo escribe a su manera. Fedora muestra algo como 6.14.4-300.fc42.x86_64, y Arch, 6.14.5-arch1-1.

La versión del kernel no es la versión de la distribución

Son dos números distintos, que responden dos preguntas distintas. uname -r dice qué kernel corre: 6.8.0-87. La versión de la distribución —Ubuntu 24.04— está en /etc/os-release, como vimos en el tema 36. Cuando alguien que te ayuda pregunta «¿qué versión tienes?», casi siempre quiere la segunda. Y hay un caso en que la primera no dice nada del sistema que tienes delante: dentro de un contenedor, uname muestra el kernel de la máquina anfitriona, porque los contenedores no tienen uno propio.

La arquitectura indica para qué familia de procesadores está compilado el sistema. Es el dato que hay que conocer al descargar un programa que se ofrece en varias versiones:

uname -mLos paquetes la llamanEs
x86_64amd64, x64Los procesadores Intel y AMD de 64 bits: casi todas las PC y los servidores.
aarch64arm64ARM de 64 bits: Raspberry Pi, muchos servidores en la nube, teléfonos, las Mac actuales.
i686i386, x86Intel y AMD de 32 bits. Equipos muy antiguos.
armv7larmhfARM de 32 bits: placas pequeñas y modelos viejos de Raspberry Pi.
riscv64riscv64RISC-V, una arquitectura abierta, todavía poco difundida.

Es el amd64 que formaba parte del nombre de los paquetes en el tema 35. Un programa compilado para una arquitectura no se ejecuta en otra: al intentarlo, la shell responde Exec format error.

Quien sigue el curso en WSL, una de las opciones del tema 2, verá en uname -r algo como 5.15.167.4-microsoft-standard-WSL2: no es el kernel de Ubuntu, sino uno que provee Windows para todas sus distribuciones.

3. hostnamectl: la identidad de la máquina

El nombre de la máquina es el que aparece en el indicador, después de la arroba. Se consulta con hostname, y con hostnamectl se obtiene una ficha más completa, que reúne en un solo lugar datos que de otro modo habría que pedir a tres comandos:

terminal
$ hostname
equipo
$ hostnamectl
 Static hostname: equipo
       Icon name: computer-laptop
         Chassis: laptop
      Machine ID: 3f9c41d27a8e4b6b9d0e5a17c2f48b61
         Boot ID: 7a1e0c5594d34f0e8b6fa3c1d2e9b470
Operating System: Ubuntu 24.04.3 LTS
          Kernel: Linux 6.8.0-87-generic
    Architecture: x86-64
 Hardware Vendor: Lenovo
  Hardware Model: ThinkPad T480
Firmware Version: N24ET76W (1.51 )
CampoContiene
Static hostnameEl nombre de la máquina, guardado en /etc/hostname.
ChassisEl tipo de equipo: laptop, desktop, server, vm, container.
Machine IDUn identificador único de esta instalación, generado al instalar.
Boot IDUn identificador de este arranque: cambia en cada reinicio.
VirtualizationAparece solo en una máquina virtual o un contenedor, y dice de qué tipo: kvm, vmware, oracle, wsl, docker.
Operating System, Kernel, ArchitectureLo mismo que /etc/os-release y uname.
Hardware Vendor, Hardware ModelEl fabricante y el modelo del equipo, tal como los declara su firmware.

Es el comando para empezar cuando se entra por primera vez a una máquina desconocida: en doce líneas dice si es física o virtual, qué distribución tiene y sobre qué equipo corre. La línea Virtualization es la manera directa de saber si lo que parece un servidor es en realidad una máquina virtual.

El mismo comando cambia el nombre, y esta sí es una operación de administrador:

terminal
$ sudo hostnamectl set-hostname portatil-ana
$ hostname
portatil-ana

El cambio es inmediato y permanente, pero el indicador de la terminal abierta seguirá mostrando el nombre viejo: PS1 tomó el dato al arrancar la shell, por la razón que explicamos en el tema 34. Una terminal nueva muestra el actual. Un nombre de máquina lleva letras minúsculas, dígitos y guiones, sin espacios ni puntos. En los ejemplos seguimos con equipo.

4. uptime: tiempo encendido y carga

anatomía de la salida de uptime
$ uptime
 09:41:07 up  1:12,  1 user,  load average: 0,42, 0,35, 0,30
    │        │        │                      │     │     │
    │        │        │                      │     │     └─ en los últimos 15 minutos
    │        │        │                      │     └─ en los últimos 5 minutos
    │        │        │                      └─ en el último minuto
    │        │        └─ las sesiones de usuario abiertas
    │        └─ el tiempo que lleva encendido: 1 hora y 12 minutos
    └─ la hora actual

Es la misma línea que encabeza top y la salida de w, del tema 16. El tiempo encendido cambia de forma según cuánto sea: up 12 min, up 1:12 para horas y minutos, up 37 days, 4:20 cuando pasa de un día.

Se escribeMuestraEjemplo
uptimeLa línea completa.
uptime -pSolo el tiempo encendido, en palabras.up 1 hour, 12 minutes
uptime -sLa fecha y la hora del arranque.2026-10-13 08:29:01
who -bLo mismo, tomado del registro de sesiones.system boot 2026-10-13 08:29

El tiempo encendido responde preguntas concretas. Si un servicio falló a las tres de la madrugada y uptime -s dice que el sistema arrancó a las tres y dos minutos, la máquina se reinició, y hay que averiguar por qué. Si un equipo lleva cuatrocientos días encendido, es seguro que tiene actualizaciones del kernel instaladas y sin aplicar. En Linux, un tiempo encendido muy largo no es una medalla: es una señal de que falta un reinicio de mantenimiento.

Los tres números del final llevan coma decimal porque el sistema está en español, y entre ellos el separador también es una coma, lo que dificulta la lectura y más aún el filtrado. Con la variable del tema 34, LC_ALL=C uptime los escribe con punto. Para procesarlos conviene ir a la fuente, que usa siempre el punto:

terminal
$ cat /proc/loadavg
0.42 0.35 0.30 1/912 7480
$ cut -d' ' -f1 /proc/loadavg           # la carga del último minuto
0.42

Los tres primeros campos son la carga. El cuarto, 1/912, dice que en ese instante hay una tarea ejecutándose, de 912 que existen en total, contando los hilos; el quinto es el PID del último proceso creado.

5. Interpretar la carga media

La carga media, load average, es el promedio de procesos que, a lo largo de un período, estuvieron usando el procesador o esperando para usarlo. En Linux se cuentan además los que esperan una respuesta del disco.

Es una cantidad de procesos, no un porcentaje, y por sí sola no dice nada. Una carga de 4 significa que, en promedio, hubo cuatro procesos queriendo trabajar a la vez. Si eso es poco o mucho depende de cuántos pueden trabajar a la vez de verdad, que es la cantidad de procesadores:

terminal
$ nproc
8
Tres situaciones en un equipo de cuatro procesadores: con carga 2 hay dos procesadores ocupados y dos libres; con carga 4, los cuatro ocupados y nadie espera; con carga 6, los cuatro ocupados y dos procesos en espera Carga 2 cuatro procesadores sobra la mitad Carga 4 cuatro procesadores ocupación plena Carga 6 cuatro procesadores dos procesos esperan
La carga se compara siempre con la cantidad de procesadores. La misma cifra que satura un equipo de cuatro es holgura en uno de dieciséis.
Carga, comparada con nprocSituaciónCon 8 procesadores
Mucho menorEl equipo está descansado. Es lo normal en un escritorio.0 a 4
Cercana, sin superarlaTrabaja a pleno y nadie espera. Es el punto de máximo aprovechamiento.6 a 8
Algo mayorHay procesos en espera. Todo sigue funcionando, más despacio.8 a 12
Varias veces mayor, de manera sostenidaSaturación: el equipo responde con lentitud evidente.20 o más

Tener tres promedios en lugar de uno permite leer la tendencia, que suele importar más que el valor:

Los tres númerosEjemploLectura
Parecidos3.10 3.05 2.98Carga estable: es el régimen habitual de esta máquina.
Decrecientes hacia la derecha9.40 4.20 1.80La carga está subiendo: algo empezó hace poco.
Crecientes hacia la derecha0.80 4.10 7.50La carga está bajando: hubo un pico, y ya pasó.

El orden desconcierta: el primer número es el más reciente. Se ve funcionando con un comando que ya conocemos del tema 24, yes, que escribe sin parar y ocupa un procesador entero. Lanzamos cuatro en segundo plano, con las herramientas del tema 33:

terminal: fabricar carga, y quitarla
$ for i in 1 2 3 4; do yes > /dev/null & done
[1] 7512
[2] 7513
[3] 7514
[4] 7515
$ uptime                               # un minuto después
 09:44:20 up  1:15,  1 user,  load average: 2,91, 0,98, 0,55
$ kill %1 %2 %3 %4
$ uptime                               # otro minuto después
 09:45:31 up  1:16,  1 user,  load average: 1,24, 1,02, 0,61

La primera línea es un bucle, una construcción del curso siguiente: aquí basta con saber que repite cuatro veces el comando yes > /dev/null &. Con cuatro procesos pidiendo procesador todo el tiempo, la carga del último minuto sube hacia 4; al matarlos, cae, mientras el promedio de quince minutos apenas se enteró. Y en este equipo de ocho procesadores, una carga de 3 no se nota en absoluto.

Carga alta no siempre es procesador ocupado

Como Linux cuenta también a los procesos que esperan al disco, una máquina puede mostrar una carga de 15 con el procesador casi desocupado: son quince procesos detenidos esperando una lectura o una escritura que no termina. Es la situación de un disco lento, fallado o saturado, o de una carpeta de red que no responde. La carga dice que hay cola; no dice en qué ventanilla. Para saberlo hay que mirar, en top o en vmstat, el valor wa que presentamos en el tema 32.

6. free: la memoria

terminal
$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       3.6Gi       1.2Gi       412Mi       3.1Gi       4.0Gi
Swap:          2.0Gi          0B       2.0Gi

Dos filas: Mem es la memoria física, la RAM, y Swap, el área de intercambio en disco, de la que nos ocupamos en la sección 8. Sin opciones, free escribe las cantidades en kibibytes, que nadie lee con comodidad; por eso se lo usa casi siempre con -h.

ColumnaContiene
totalLa memoria que el kernel tiene para administrar.
usedLa que está ocupada y no se puede recuperar sin quitársela a un programa.
freeLa que no se está usando para nada.
sharedLa que comparten varios procesos, y los archivos temporales que viven en memoria. Rara vez importa.
buff/cacheLa que el kernel usa como caché de disco: copias de archivos leídos hace poco.
availableLa que un programa nuevo podría obtener ahora mismo, sin que el sistema recurra al intercambio. Es la columna que hay que mirar.
OpciónEfecto
-hUnidades legibles, elegidas para cada cifra.
-m, -gTodo en mebibytes; en gibibytes. Con -m las cifras son exactas y fáciles de filtrar.
--siPotencias de 1000 en lugar de 1024: megabytes y gigabytes.
-tAgrega una fila con el total de memoria más intercambio.
-wSepara buffers y cache en dos columnas.
-s 2Repite la salida cada dos segundos, hasta Ctrl+C.

Las unidades terminan en i: Gi es un gibibyte, 1024 mebibytes, la unidad en que se mide la memoria desde siempre. Y el total es menor que lo que dice la caja del equipo. Este tiene 8 GB instalados, que son 8192 MiB, y free informa 7836: la diferencia la reservan el firmware, la placa de video integrada —que no tiene memoria propia y toma de la principal— y el propio kernel. No falta nada.

7. Libre no es lo mismo que disponible

Quien mira free por primera vez lee la columna free, ve que de casi 8 GiB quedan 1.2, y concluye que la máquina está al límite. Es la lectura equivocada más común de todo el sistema, y tiene una explicación que cambia la manera de mirar la memoria.

La caché de disco es la memoria que el kernel usa para conservar copias de los archivos leídos y escritos recientemente. Leer de la memoria es miles de veces más rápido que leer del disco, de modo que el kernel guarda todo lo que puede, y lo entrega de inmediato si un programa necesita esa memoria.

El razonamiento del kernel es que la memoria sin usar no sirve a nadie. Mientras ningún programa la pida, la aprovecha para acelerar el acceso a los archivos; cuando alguien la pide, descarta lo guardado —que sigue estando en el disco— y la cede. Por eso, en un sistema que lleva un rato encendido, la memoria «libre» tiende a ser poca, y eso es señal de que funciona bien.

La memoria total, 7836 mebibytes, dividida en tres tramos: 3735 usados por los programas, 2891 de caché recuperable y 1210 libres. Los dos últimos tramos forman la memoria disponible, 4101 mebibytes total: 7836 MiB used · 3735 caché recuperable free · 1210 en uso por los programas available · 4101 MiB
Lo disponible es lo libre más la parte de la caché que se puede descartar. Aquí la mitad de la memoria está a disposición, aunque solo el 15 % figure como libre.

Se lo puede ver ocurrir. Leemos un gran número de archivos, descartando su contenido, y comparamos antes y después:

terminal
$ free -m | sed -n '1p;2p'
               total        used        free      shared  buff/cache   available
Mem:            7836        3735        1210         412        3223        4101
$ cat /usr/lib/x86_64-linux-gnu/*.so* > /dev/null 2>&1
$ free -m | sed -n '2p'
Mem:            7836        3743         640         412        3801        4093

La lectura de unos seiscientos mebibytes de bibliotecas quedó guardada en la caché: buff/cache creció y free bajó en la misma medida. Lo disponible casi no cambió, porque esa caché se entrega a quien la pida. Si se repite el cat, termina en una fracción del tiempo: esta vez no tocó el disco.

La columna que se mira es available

Para saber si a un sistema le falta memoria, la pregunta no es cuánta hay libre sino cuánta hay disponible. Con available en el 20 % del total o más, no hay nada de qué preocuparse, por pequeño que sea free. La memoria escasea de verdad cuando available se acerca a cero y el intercambio empieza a llenarse. Circulan por Internet recetas para «liberar la caché» con un comando: no hay que usarlas. Solo consiguen que el sistema tenga que volver a leer del disco lo que ya tenía a mano.

Las columnas no suman el total, y eso también confunde. En las versiones actuales de free, used se calcula como total menos available, y una parte de la caché —la que no se puede descartar— queda contada en los dos lados. La cuenta que sí cierra es la de la figura: lo usado más lo disponible es el total.

Los datos salen de /proc/meminfo, que tiene medio centenar de líneas. Las que free resume son estas:

terminal
$ grep -E '^(MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree)' /proc/meminfo
MemTotal:        8024474 kB
MemFree:          655360 kB
MemAvailable:    4191232 kB
Buffers:          145408 kB
Cached:          3512320 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB

Para saber quién ocupa la memoria, la herramienta es la del tema 32: ps aux --sort=-%mem | head, o top ordenado con la tecla M.

8. El área de intercambio

El área de intercambio, o swap, es un espacio en el disco que el kernel usa como extensión de la memoria. Cuando la RAM no alcanza, traslada allí las partes de memoria que hace más tiempo que nadie usa, y las trae de vuelta cuando se las necesita.

Permite que el sistema siga funcionando cuando los programas piden más memoria de la que hay, a un precio alto: el disco es muchísimo más lento que la RAM. Puede ser una partición dedicada o un archivo; en Ubuntu es el /swap.img que encontramos en la raíz al recorrerla en el tema 8.

terminal
$ swapon --show
NAME      TYPE SIZE USED PRIO
/swap.img file   2G   0B   -2
$ ls -lh /swap.img
-rw------- 1 root root 2.0G sep  3 10:12 /swap.img

Los permisos rw------- de root no son un descuido: en ese archivo terminan fragmentos de la memoria de cualquier programa, contraseñas incluidas. Si swapon --show no escribe nada, el sistema no tiene intercambio, lo que es habitual en servidores en la nube y en contenedores.

Lo que hay que saber leer es la fila Swap de free, y sobre todo su evolución:

Lo que se observaSignifica
used en cero.La memoria alcanzó siempre, desde el arranque.
Algo de intercambio usado, que no cambia, y available amplio.En algún momento hubo presión, y lo trasladado nunca volvió a hacer falta. No es un problema.
El intercambio usado crece, y available es bajo.La memoria no alcanza ahora mismo. El sistema se pone lento.
Intercambio lleno y available casi en cero.Situación crítica. El kernel empezará a matar procesos.

La última fila describe un mecanismo con nombre propio. Cuando la memoria y el intercambio se agotan, el kernel elige un proceso —por lo general, el que más memoria ocupa— y lo termina con la señal KILL del tema 33, sin aviso. Es el OOM killer, de out of memory. Desde afuera se ve como un programa que desaparece solo; la explicación queda anotada en el registro del kernel, que aprenderemos a leer en el tema 39.

Un sistema que intercambia sin cesar se reconoce sin mirar ningún número: el disco trabaja de continuo, y cada acción tarda segundos. No se arregla con un comando. Se arregla cerrando programas, o agregando memoria.

9. lscpu: el procesador

lscpu describe el procesador. Su salida completa tiene unas cuarenta líneas; las que interesan son las de arriba.

terminal (salida abreviada)
$ lscpu
Architecture:             x86_64
  CPU op-mode(s):         32-bit, 64-bit
  Address sizes:          39 bits physical, 48 bits virtual
  Byte Order:             Little Endian
CPU(s):                   8
  On-line CPU(s) list:    0-7
Vendor ID:                GenuineIntel
  Model name:             Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
    CPU family:           6
    Model:                142
    Thread(s) per core:   2
    Core(s) per socket:   4
    Socket(s):            1
    Stepping:             10
    CPU max MHz:          3400.0000
    CPU min MHz:          400.0000
    Flags:                fpu vme de pse tsc msr pae mce cx8 apic sep mtrr …
Virtualization features:
  Virtualization:         VT-x
Caches (sum of all):
  L1d:                    128 KiB (4 instances)
  L1i:                    128 KiB (4 instances)
  L2:                     1 MiB (4 instances)
  L3:                     6 MiB (1 instance)
…

Las líneas resaltadas resuelven una ambigüedad. La palabra «procesador» nombra tres cosas distintas, y lscpu las separa:

TérminoQué esEn lscpuAquí
Zócalo, socketEl chip: la pieza que se compra y se coloca en la placa. Los servidores suelen tener dos.Socket(s)1
Núcleo, coreCada unidad de cómputo completa dentro del chip. Un núcleo ejecuta un programa a la vez.Core(s) per socket4
Hilo, threadCada «procesador» que un núcleo le presenta al sistema. Con hyper-threading, un núcleo se presenta como dos.Thread(s) per core2
CPU, o procesador lógicoLo que el kernel ve y reparte entre los procesos: zócalos × núcleos × hilos.CPU(s)1 × 4 × 2 = 8

El último número es el que informa nproc, el que aparece como ocho barras en htop, y el que se usa para interpretar la carga. Conviene tener presente que no son ocho núcleos: dos hilos de un mismo núcleo comparten sus circuitos, y juntos rinden bastante menos que dos núcleos de verdad. Para el trabajo pesado y sostenido, este equipo se parece más a uno de cuatro que a uno de ocho.

LíneaDice
ArchitectureLa arquitectura: lo mismo que uname -m.
CPU op-mode(s)Si el procesador admite 64 bits. Uno que diga solo 32-bit no puede ejecutar un sistema de 64.
Model nameLa marca y el modelo, con su frecuencia nominal.
CPU max MHz, CPU min MHzEl rango en que se mueve la frecuencia: baja en reposo para ahorrar energía, sube bajo exigencia.
FlagsLa lista de instrucciones y capacidades que el procesador ofrece.
VirtualizationSi puede alojar máquinas virtuales: VT-x en Intel, AMD-V en AMD.
Hypervisor vendorAparece solo dentro de una máquina virtual, y dice cuál: KVM, VMware, Microsoft.
CachesLa memoria interna del procesador, muy rápida y pequeña, en tres niveles.

Como toda salida en columnas, se filtra con lo conocido. Y nproc responde la pregunta más frecuente sin necesidad de filtrar nada:

terminal
$ lscpu | grep -E '^(Model name|CPU\(s\)|Thread|Core|Socket)'
CPU(s):                   8
$ lscpu | grep -E 'Model name|^CPU\(s\)|Thread|Core|Socket'
CPU(s):                   8
  Model name:             Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
    Thread(s) per core:   2
    Core(s) per socket:   4
    Socket(s):            1
$ nproc
8
$ grep -c '^processor' /proc/cpuinfo
8

El primer intento muestra una trampa del tema 28: el ancla ^ alcanzaba a todas las alternativas, y las líneas con sangría no empiezan con esas palabras. En el segundo, el ancla queda solo donde hace falta, para no confundir CPU(s) con On-line CPU(s).

El último comando va a la fuente: /proc/cpuinfo tiene un bloque de unas veinticinco líneas por cada procesador lógico, encabezado por la palabra processor. Es la forma antigua, y la que queda cuando lscpu no está, cosa que ocurre en algunos contenedores.

10. El resto del hardware

Para lo demás hay una familia de comandos que empiezan con ls, cada uno dedicado a una clase de dispositivos. No hace falta recordar sus opciones: alcanza con saber que existen, y filtrarlos con grep.

ComandoListaRequiere sudo
lscpuEl procesador.No
lsmemLos bloques de memoria que ve el kernel.No
lspciLos dispositivos internos: video, red, sonido, controladoras de disco.No
lsusbLos dispositivos USB conectados.No
lsblkLos discos y sus particiones. Es del tema 38.No
lshw -shortUn inventario de todo el equipo, en forma de tabla.Sí, para verlo completo
dmidecodeLo que declara el firmware: fabricante, número de serie, módulos de memoria.Sí
terminal
$ lspci | grep -iE 'vga|network|ethernet'
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (4) I219-V (rev 21)
03:00.0 Network controller: Intel Corporation Wireless 8265 / 8275 (rev 78)
$ lsusb | wc -l
6
$ sudo dmidecode -t memory | grep -E '^\s(Size|Type|Speed|Locator):'
	Size: 8 GB
	Locator: ChannelA-DIMM0
	Type: DDR4
	Speed: 2400 MT/s
	Size: No Module Installed
	Locator: ChannelB-DIMM0
	Type: Unknown
	Speed: Unknown

La primera consulta es la que se hace cuando algo no funciona —la red inalámbrica, la placa de video— y hay que buscar ayuda: el modelo exacto del dispositivo es lo que permite encontrar la respuesta. Un truco con lsusb: ejecutarlo, conectar el dispositivo, ejecutarlo de nuevo, y comparar. Si la línea nueva no aparece, el problema es del cable o del puerto, y no hay nada que configurar.

La tercera es la que ahorra abrir el equipo. dmidecode lee las tablas del firmware, y por eso pide sudo: aquí dice que hay un módulo de 8 GB, DDR4, y que el segundo zócalo está vacío. Es todo lo que hay que saber para comprar una ampliación. En una máquina virtual estos datos son ficticios, y en un contenedor el comando no funciona.

11. vmstat: el sistema en movimiento

uptime y free dan una foto. Para saber si la memoria se está agotando o la carga está subiendo hace falta una secuencia. vmstat, de virtual memory statistics, escribe una línea con el estado de todo el sistema, y la repite con el intervalo que se le indique.

terminal: una línea cada 2 segundos, 5 veces
$ vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 655360 145408 3746816    0    0   118    64  412  893  4  1 94  1  0
 0  0      0 654980 145408 3746820    0    0     0    12  388  721  2  1 97  0  0
 0  0      0 655104 145416 3746820    0    0     0     0  402  760  3  1 96  0  0
 2  0      0 649216 145416 3748992    0    0     0   148  655 1310 14  3 83  0  0
 0  0      0 654720 145424 3746952    0    0     0     8  395  744  2  1 97  0  0

El primer argumento es el intervalo en segundos, y el segundo, la cantidad de líneas; sin el segundo, sigue hasta Ctrl+C. Las columnas vienen en seis grupos:

GrupoColumnaContiene
procsrProcesos que están usando el procesador o esperándolo. Es la carga, en este instante.
bProcesos bloqueados, esperando al disco.
memoryswpdIntercambio en uso, en kibibytes.
free, buff, cacheMemoria libre, y la dedicada a caché.
swapsi, soMemoria traída del intercambio y llevada a él, por segundo. En un sistema sano son cero.
iobi, boBloques leídos del disco y escritos en él, por segundo.
systemin, csInterrupciones y cambios de contexto por segundo: cuánto se reparte el procesador.
cpuus, sy, id, wa, stLos porcentajes de top: usuarios, sistema, desocupado, esperando al disco, quitado por otra máquina virtual.

Hay un detalle que evita conclusiones falsas: la primera línea no es una medición. Es el promedio desde que arrancó el sistema, y por eso muestra lecturas de disco que las demás no tienen. Las mediciones de verdad empiezan en la segunda.

En el ejemplo se ve un equipo tranquilo, con un breve episodio en la cuarta línea: dos procesos en r, el procesador ocupado en un 17 %, una escritura en disco. Cada problema de rendimiento tiene su firma en esta tabla:

Lo que se ve, línea tras líneaEl problema es
r mayor que nproc, us alto, id cerca de cero.El procesador: hay más trabajo de cálculo del que puede atender.
b mayor que cero, wa alto, id bajo.El disco: los procesos esperan lecturas o escrituras.
si y so distintos de cero de manera sostenida, swpd en aumento.La memoria: no alcanza, y el sistema intercambia.
sy alto, cs muy alto.Demasiados procesos disputándose el procesador, o uno que abusa de las llamadas al sistema.
st mayor que cero.En una máquina virtual: el equipo anfitrión está sobrecargado, y le quita procesador a esta.

Con vmstat -S M 2 las cantidades de memoria se muestran en mebibytes, que se leen mejor.

12. watch: repetir un comando

vmstat y free -s saben repetirse. La mayoría de los comandos no, y para ellos existe watch: ejecuta el comando que se le dé cada dos segundos, y muestra su salida a pantalla completa, reemplazando la anterior.

terminal
$ watch free -h
Every 2.0s: free -h                             equipo: Tue Oct 13 09:52:14 2026

               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       3.6Gi       640Mi       412Mi       3.7Gi       4.0Gi
Swap:          2.0Gi          0B       2.0Gi

La línea de arriba muestra el intervalo, el comando, el nombre de la máquina y la hora de la última ejecución. Se sale con Ctrl+C.

OpciónEfecto
-n 5Repite cada cinco segundos. Admite decimales: -n 0.5.
-dResalta lo que cambió respecto de la ejecución anterior.
-tQuita la línea de encabezado.
-gTermina cuando la salida cambia. Para esperar a que algo ocurra.

Sirve con cualquier comando, y por eso es de los que se usan toda la vida: watch -d free -h para ver adónde va la memoria, watch -n 1 uptime para seguir la carga, watch ls -l descargas/ para ver crecer un archivo que se está copiando.

Cuando el comando lleva una tubería o una redirección, hay que encerrarlo entre comillas. De lo contrario, la shell corta la línea en la barra, y lo que se filtra es la salida de watch:

terminal
$ watch -n 1 'ps aux --sort=-%cpu | head -n 6'     # bien: watch repite la tubería entera
$ watch -n 1 ps aux --sort=-%cpu | head -n 6       # mal: head recibe la salida de watch

El primero es un top improvisado, hecho con piezas de los temas 24 y 32: los cinco procesos que más procesador usan, actualizados cada segundo.

13. Un diagnóstico en cinco pasos

Todo lo anterior se junta en la situación del comienzo: una máquina que responde con lentitud. Los recursos que pueden faltar son tres —procesador, memoria, disco—, y un minuto de comandos alcanza para saber cuál.

  1. ¿Hay cola, y desde cuándo? uptime, comparando la carga con nproc y mirando la tendencia de los tres números. carga
  2. ¿Alcanza la memoria? free -h: la columna available y la fila Swap. memoria
  3. ¿Qué recurso es? vmstat 2 5: us para el procesador, wa y b para el disco, si y so para la memoria. recurso
  4. ¿Qué proceso es? top, ordenado por procesador o, con M, por memoria. culpable
  5. ¿Hay espacio en el disco? df -h. Un disco lleno produce fallos que parecen de cualquier otra cosa; es el tema 38. espacio
CargaavailablevmstatDiagnósticoQué hacer
Mayor que nprocAmplious altoFalta procesador.Encontrar el proceso con top; esperarlo, bajarle la prioridad o terminarlo.
AltaAmpliowa alto, b mayor que ceroEl disco no da abasto.Buscar qué proceso lee o escribe tanto; revisar el estado del disco.
AltaCerca de cerosi, so distintos de ceroFalta memoria.Cerrar el programa que más ocupa; a la larga, más RAM.
BajaAmplioTodo en reposoEl sistema está bien.El problema es de un programa en particular, o de la red.

La última fila es un resultado tan útil como los otros: saber que la máquina no es el problema evita perder una tarde buscándolo en el lugar equivocado.

Como estos comandos escriben texto y terminan, se pueden agrupar para dejar constancia del estado en un momento dado. Con las llaves del tema 25, toda la salida va a un mismo archivo:

terminal, en ~/practica
$ cd ~/practica
$ { echo "== $(hostname) · $(date '+%F %T')"; uname -r; uptime; free -h; } > estado.txt
$ cat estado.txt
== equipo · 2026-10-13 09:58:40
6.8.0-87-generic
 09:58:40 up  1:29,  1 user,  load average: 0,31, 0,52, 0,58
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       3.6Gi       652Mi       412Mi       3.7Gi       4.0Gi
Swap:          2.0Gi          0B       2.0Gi

Es una línea larga, incómoda de volver a escribir, y que uno querría ejecutar todos los días. Esa incomodidad es exactamente el motivo por el que existen los scripts, y a ella volvemos en el tema 41.

14. Recetas y errores comunes

Quiero saber…Comando
La versión del kerneluname -r
La arquitecturauname -m
La versión de la distribucióngrep PRETTY_NAME /etc/os-release
Todo sobre la máquina, de un vistazohostnamectl
Si es una máquina virtualhostnamectl | grep -i virtualization
Cuánto hace que está encendidauptime -p
Cuándo arrancóuptime -s
La carga, con punto decimalcut -d' ' -f1-3 /proc/loadavg
Cuántos procesadores tienenproc
Qué procesador eslscpu | grep 'Model name'
Cuánta memoria hay disponiblefree -h, columna available
El porcentaje de memoria en usofree -m | awk '/^Mem:/ {printf "%.0f %%\n", $3/$2*100}'
Si hay intercambio, y cuánto se usaswapon --show
Qué procesos ocupan más memoriaps aux --sort=-%mem | head
Cuánta memoria hay instalada, y si quedan zócalossudo dmidecode -t memory
Qué placa de video o de red tienelspci | grep -iE 'vga|network'
Cómo evoluciona el sistemavmstat 2
Repetir un comando y ver qué cambiawatch -d comando
SíntomaCausaSolución
«Queda muy poca memoria libre.»Se está mirando la columna free. El kernel usa lo sobrante como caché.Mirar available.
free muestra menos memoria que la instalada.Una parte la reservan el firmware, el video integrado y el kernel.Es lo normal.
Las columnas de free no suman el total.used se calcula como total menos available.La cuenta que cierra es used más available.
«La carga es 6: el servidor está saturado.»Se leyó la carga sin compararla con los procesadores.nproc. Con 16, una carga de 6 es holgura.
La carga es alta y top muestra el procesador desocupado.Hay procesos esperando al disco, que en Linux cuentan para la carga.Mirar wa y b en vmstat.
uname -r muestra un kernel viejo después de actualizar.El nuevo está en el disco; en memoria sigue el anterior.Reiniciar.
Me piden «la versión de Linux» y doy la de uname -r.Casi siempre se pregunta por la de la distribución.cat /etc/os-release
lscpu dice 8 CPU y el equipo es «de cuatro núcleos».Cada núcleo se presenta como dos hilos.Las dos cosas son ciertas: 4 núcleos, 8 procesadores lógicos.
Un programa desapareció sin mensaje de error.Posiblemente lo terminó el kernel por falta de memoria.Revisar el registro del kernel. Tema 39.
Los números de la primera línea de vmstat no coinciden con el resto.Es el promedio desde el arranque.Ignorarla; leer desde la segunda.
watch con una tubería muestra algo raro, o nada.La tubería se aplicó a watch, no al comando.Encerrar el comando entre comillas simples.
En una máquina virtual o WSL, los datos no coinciden con el equipo real.Se ve lo que el anfitrión le asignó: parte de la memoria y de los procesadores.Es lo esperado. La configuración se cambia en el anfitrión.
dmidecode responde Permission denied.Lee datos del firmware, reservados a root.sudo dmidecode
Cambié el nombre de la máquina y el indicador muestra el viejo.La shell abierta lo tomó al arrancar.Abrir una terminal nueva.

La referencia del tema:

Se escribeQué hace
uname -r, -m, -aVersión del kernel; arquitectura; todo.
hostname, hostnamectlNombre de la máquina; su ficha completa.
sudo hostnamectl set-hostname nombreCambia el nombre de la máquina.
uptime, -p, -sTiempo encendido y carga; solo el tiempo; fecha de arranque.
cat /proc/loadavgLa carga media, sin formato.
nprocLa cantidad de procesadores lógicos.
free -h, -mLa memoria, en unidades legibles; en mebibytes.
swapon --showLas áreas de intercambio.
lscpuEl procesador: modelo, zócalos, núcleos, hilos.
lspci, lsusbLos dispositivos internos; los USB.
sudo dmidecode -t memoryLos módulos de memoria instalados.
vmstat 2 5El estado del sistema, cada 2 segundos, 5 veces.
watch -n 5 -d comandoRepite un comando cada 5 segundos, resaltando los cambios.

En ~/practica queda un archivo nuevo, estado.txt. Sabemos ya preguntarle al sistema por su kernel, su carga, su memoria y su procesador. Falta el recurso que, cuando se agota, produce los fallos más desconcertantes, y el que más se deja sin vigilar. En el tema 38 nos ocupamos de los discos: cuánto espacio queda, quién lo ocupa, y cómo se conecta un dispositivo al árbol de directorios.

15. Resumen

16. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué muestran uname -r y uname -m?

La versión del kernel que está en ejecución, y la arquitectura de la máquina, como x86_64 o aarch64.

2. Te preguntan qué versión de Ubuntu tienes y respondes con la salida de uname -r. ¿Qué está mal?

Ese comando da la versión del kernel, no la de la distribución. La versión de Ubuntu está en /etc/os-release, o en la salida de hostnamectl.

3. Actualizaste el sistema, se instaló un kernel nuevo, y uname -r sigue mostrando el anterior. ¿Por qué?

Porque uname informa el kernel que está cargado en memoria. El nuevo está en el disco y empezará a usarse en el próximo arranque.

4. ¿Cómo averiguas, sin salir de la terminal, si la máquina en la que estás es virtual?

Con hostnamectl, que en ese caso muestra una línea Virtualization; o con lscpu, que muestra Hypervisor vendor.

5. ¿Qué representan los tres números de load average?

El promedio de procesos que estuvieron usando el procesador o esperando —por él o por el disco— durante el último minuto, los últimos cinco y los últimos quince.

6. Una máquina muestra una carga de 5. ¿Está saturada?

Depende de cuántos procesadores tenga, según nproc. Con 2, está saturada; con 4, algo exigida; con 16, descansada.

7. ¿Qué indica load average: 8.20, 3.10, 1.05? ¿Y 0.90, 3.80, 6.40?

En el primero la carga está subiendo: el último minuto es mucho más alto que el promedio de quince. En el segundo está bajando: hubo un pico, y ya pasó.

8. La carga es alta y el procesador está casi desocupado. ¿Cómo se explica?

En Linux la carga cuenta también los procesos que esperan al disco. Hay procesos bloqueados por una lectura o escritura lenta; se confirma con un valor alto de wa.

9. En la salida de free, ¿qué diferencia hay entre free y available?

free es la memoria que no se usa para nada. available es la que un programa nuevo podría obtener: la libre más la parte de la caché que el kernel puede descartar.

10. Un servidor con 16 GiB muestra 300 MiB libres y 9 GiB disponibles. ¿Le falta memoria?

No. Tiene más de la mitad disponible. La memoria que no figura como libre se está usando como caché de disco, y se cede cuando hace falta.

11. ¿Qué es el área de intercambio, y qué señal indica que la memoria no alcanza?

Es espacio de disco que el kernel usa como extensión de la RAM. La señal es que el intercambio usado crezca mientras available es bajo, y que si y so de vmstat sean distintos de cero de manera sostenida.

12. lscpu informa 2 zócalos, 8 núcleos por zócalo y 2 hilos por núcleo. ¿Qué muestra nproc?

32: dos zócalos por ocho núcleos por dos hilos.

13. ¿Con qué comando averiguas cuántos módulos de memoria tiene instalados un equipo, sin abrirlo?

Con sudo dmidecode -t memory, que lista cada zócalo con el tamaño y el tipo del módulo, o indica que está vacío.

14. En vmstat 2, ¿por qué no hay que sacar conclusiones de la primera línea?

Porque no es una medición del momento, sino el promedio desde que arrancó el sistema. Las mediciones empiezan en la segunda línea.

15. ¿Qué columnas de vmstat señalan un problema de procesador, cuáles uno de disco y cuáles uno de memoria?

De procesador, r y us altos con id cerca de cero. De disco, b y wa. De memoria, si y so distintos de cero.

16. ¿Por qué watch ps aux | grep firefox no hace lo que se espera, y cómo se escribe?

Porque la shell aplica la tubería a watch, no a ps. Se escribe con el comando entre comillas: watch 'ps aux | grep firefox'.

Para practicar

  1. Muestra por separado el nombre del kernel, su versión y la arquitectura. Compara la versión con la de cat /proc/version, y con la versión de la distribución en /etc/os-release.
  2. Lista los kernels instalados con dpkg -l 'linux-image*' | grep '^ii', o el equivalente de tu distribución. ¿Coincide el más nuevo con el que informa uname -r?
  3. Ejecuta hostnamectl. ¿Qué tipo de equipo declara? ¿Aparece la línea Virtualization? Compara el Boot ID con el de después de un reinicio.
  4. Averigua cuándo arrancó el sistema de tres maneras: con uptime -s, con who -b y con el primer campo de /proc/uptime, convertido de segundos a horas con awk.
  5. Anota la carga y la salida de nproc. Lanza en segundo plano tantos yes > /dev/null como procesadores tengas, y sigue la carga con watch -n 5 uptime durante dos minutos. Mátalos con kill y observa cuánto tarda cada uno de los tres números en volver a su valor.
  6. Ejecuta free -h, free -m y free -h --si. Calcula qué porcentaje del total está disponible, y qué porcentaje figura como libre.
  7. Repite la experiencia de la sección 7: anota free -m, lee muchos archivos grandes hacia /dev/null, y vuelve a mirar. ¿Qué columnas cambiaron? Antepón time al comando de lectura —informa cuánto tardó en ejecutarse— y compara la primera vez con la segunda.
  8. Con lscpu, determina el modelo de tu procesador, cuántos zócalos, núcleos e hilos tiene, y si está dentro de una máquina virtual. Verifica el producto contra nproc.
  9. Deja corriendo vmstat 2 en una terminal y, en otra, abre un programa pesado, copia un archivo grande y ejecuta sudo apt update. ¿Qué columnas reaccionan en cada caso?
  10. Arma con llaves un informe que guarde en ~/practica/estado.txt la fecha, el nombre de la máquina, la versión de la distribución y del kernel, el modelo del procesador y la cantidad de procesadores, la carga y la memoria. Ejecútalo dos veces usando >>, y comprueba que el archivo conserva los dos informes.