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.
| Pregunta | Comando | Lee de |
|---|---|---|
| ¿Qué kernel se está ejecutando, y en qué arquitectura? | uname | El 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.
$ 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ón | Muestra | En el ejemplo |
|---|---|---|
-s | El nombre del kernel. Es lo que se muestra sin opciones. | Linux |
-n | El nombre de la máquina en la red. | equipo |
-r | La versión del kernel. Es la opción que más se usa. | 6.8.0-87-generic |
-v | Los datos de su compilación: número, características y fecha. | #87-Ubuntu SMP … 2026 |
-m | La arquitectura de la máquina. | x86_64 |
-o | El sistema operativo. | GNU/Linux |
-a | Todo 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í:
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.
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 -m | Los paquetes la llaman | Es |
|---|---|---|
x86_64 | amd64, x64 | Los procesadores Intel y AMD de 64 bits: casi todas las PC y los servidores. |
aarch64 | arm64 | ARM de 64 bits: Raspberry Pi, muchos servidores en la nube, teléfonos, las Mac actuales. |
i686 | i386, x86 | Intel y AMD de 32 bits. Equipos muy antiguos. |
armv7l | armhf | ARM de 32 bits: placas pequeñas y modelos viejos de Raspberry Pi. |
riscv64 | riscv64 | RISC-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:
$ 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 )
| Campo | Contiene |
|---|---|
Static hostname | El nombre de la máquina, guardado en /etc/hostname. |
Chassis | El tipo de equipo: laptop, desktop, server, vm, container. |
Machine ID | Un identificador único de esta instalación, generado al instalar. |
Boot ID | Un identificador de este arranque: cambia en cada reinicio. |
Virtualization | Aparece solo en una máquina virtual o un contenedor, y dice de qué tipo: kvm, vmware, oracle, wsl, docker. |
Operating System, Kernel, Architecture | Lo mismo que /etc/os-release y uname. |
Hardware Vendor, Hardware Model | El 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:
$ 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
$ 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 escribe | Muestra | Ejemplo |
|---|---|---|
uptime | La línea completa. | |
uptime -p | Solo el tiempo encendido, en palabras. | up 1 hour, 12 minutes |
uptime -s | La fecha y la hora del arranque. | 2026-10-13 08:29:01 |
who -b | Lo 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:
$ 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:
$ nproc
8
Carga, comparada con nproc | Situación | Con 8 procesadores |
|---|---|---|
| Mucho menor | El equipo está descansado. Es lo normal en un escritorio. | 0 a 4 |
| Cercana, sin superarla | Trabaja a pleno y nadie espera. Es el punto de máximo aprovechamiento. | 6 a 8 |
| Algo mayor | Hay procesos en espera. Todo sigue funcionando, más despacio. | 8 a 12 |
| Varias veces mayor, de manera sostenida | Saturació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úmeros | Ejemplo | Lectura |
|---|---|---|
| Parecidos | 3.10 3.05 2.98 | Carga estable: es el régimen habitual de esta máquina. |
| Decrecientes hacia la derecha | 9.40 4.20 1.80 | La carga está subiendo: algo empezó hace poco. |
| Crecientes hacia la derecha | 0.80 4.10 7.50 | La 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:
$ 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.
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
$ 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.
| Columna | Contiene |
|---|---|
total | La memoria que el kernel tiene para administrar. |
used | La que está ocupada y no se puede recuperar sin quitársela a un programa. |
free | La que no se está usando para nada. |
shared | La que comparten varios procesos, y los archivos temporales que viven en memoria. Rara vez importa. |
buff/cache | La que el kernel usa como caché de disco: copias de archivos leídos hace poco. |
available | La que un programa nuevo podría obtener ahora mismo, sin que el sistema recurra al intercambio. Es la columna que hay que mirar. |
| Opción | Efecto |
|---|---|
-h | Unidades legibles, elegidas para cada cifra. |
-m, -g | Todo en mebibytes; en gibibytes. Con -m las cifras son exactas y fáciles de filtrar. |
--si | Potencias de 1000 en lugar de 1024: megabytes y gigabytes. |
-t | Agrega una fila con el total de memoria más intercambio. |
-w | Separa buffers y cache en dos columnas. |
-s 2 | Repite 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.
Se lo puede ver ocurrir. Leemos un gran número de archivos, descartando su contenido, y comparamos antes y después:
$ 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.
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:
$ 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.
$ 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 observa | Significa |
|---|---|
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.
$ 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érmino | Qué es | En lscpu | Aquí |
|---|---|---|---|
| Zócalo, socket | El chip: la pieza que se compra y se coloca en la placa. Los servidores suelen tener dos. | Socket(s) | 1 |
| Núcleo, core | Cada unidad de cómputo completa dentro del chip. Un núcleo ejecuta un programa a la vez. | Core(s) per socket | 4 |
| Hilo, thread | Cada «procesador» que un núcleo le presenta al sistema. Con hyper-threading, un núcleo se presenta como dos. | Thread(s) per core | 2 |
| CPU, o procesador lógico | Lo 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ínea | Dice |
|---|---|
Architecture | La 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 name | La marca y el modelo, con su frecuencia nominal. |
CPU max MHz, CPU min MHz | El rango en que se mueve la frecuencia: baja en reposo para ahorrar energía, sube bajo exigencia. |
Flags | La lista de instrucciones y capacidades que el procesador ofrece. |
Virtualization | Si puede alojar máquinas virtuales: VT-x en Intel, AMD-V en AMD. |
Hypervisor vendor | Aparece solo dentro de una máquina virtual, y dice cuál: KVM, VMware, Microsoft. |
Caches | La 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:
$ 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.
| Comando | Lista | Requiere sudo |
|---|---|---|
lscpu | El procesador. | No |
lsmem | Los bloques de memoria que ve el kernel. | No |
lspci | Los dispositivos internos: video, red, sonido, controladoras de disco. | No |
lsusb | Los dispositivos USB conectados. | No |
lsblk | Los discos y sus particiones. Es del tema 38. | No |
lshw -short | Un inventario de todo el equipo, en forma de tabla. | Sí, para verlo completo |
dmidecode | Lo que declara el firmware: fabricante, número de serie, módulos de memoria. | Sí |
$ 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.
$ 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:
| Grupo | Columna | Contiene |
|---|---|---|
procs | r | Procesos que están usando el procesador o esperándolo. Es la carga, en este instante. |
b | Procesos bloqueados, esperando al disco. | |
memory | swpd | Intercambio en uso, en kibibytes. |
free, buff, cache | Memoria libre, y la dedicada a caché. | |
swap | si, so | Memoria traída del intercambio y llevada a él, por segundo. En un sistema sano son cero. |
io | bi, bo | Bloques leídos del disco y escritos en él, por segundo. |
system | in, cs | Interrupciones y cambios de contexto por segundo: cuánto se reparte el procesador. |
cpu | us, sy, id, wa, st | Los 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ínea | El 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.
$ 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ón | Efecto |
|---|---|
-n 5 | Repite cada cinco segundos. Admite decimales: -n 0.5. |
-d | Resalta lo que cambió respecto de la ejecución anterior. |
-t | Quita la línea de encabezado. |
-g | Termina 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:
$ 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.
- ¿Hay cola, y desde cuándo?
uptime, comparando la carga connprocy mirando la tendencia de los tres números. carga - ¿Alcanza la memoria?
free -h: la columnaavailabley la filaSwap. memoria - ¿Qué recurso es?
vmstat 2 5:uspara el procesador,waybpara el disco,siysopara la memoria. recurso - ¿Qué proceso es?
top, ordenado por procesador o, con M, por memoria. culpable - ¿Hay espacio en el disco?
df -h. Un disco lleno produce fallos que parecen de cualquier otra cosa; es el tema 38. espacio
| Carga | available | vmstat | Diagnóstico | Qué hacer |
|---|---|---|---|---|
Mayor que nproc | Amplio | us alto | Falta procesador. | Encontrar el proceso con top; esperarlo, bajarle la prioridad o terminarlo. |
| Alta | Amplio | wa alto, b mayor que cero | El disco no da abasto. | Buscar qué proceso lee o escribe tanto; revisar el estado del disco. |
| Alta | Cerca de cero | si, so distintos de cero | Falta memoria. | Cerrar el programa que más ocupa; a la larga, más RAM. |
| Baja | Amplio | Todo en reposo | El 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:
$ 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 kernel | uname -r |
| La arquitectura | uname -m |
| La versión de la distribución | grep PRETTY_NAME /etc/os-release |
| Todo sobre la máquina, de un vistazo | hostnamectl |
| Si es una máquina virtual | hostnamectl | grep -i virtualization |
| Cuánto hace que está encendida | uptime -p |
| Cuándo arrancó | uptime -s |
| La carga, con punto decimal | cut -d' ' -f1-3 /proc/loadavg |
| Cuántos procesadores tiene | nproc |
| Qué procesador es | lscpu | grep 'Model name' |
| Cuánta memoria hay disponible | free -h, columna available |
| El porcentaje de memoria en uso | free -m | awk '/^Mem:/ {printf "%.0f %%\n", $3/$2*100}' |
| Si hay intercambio, y cuánto se usa | swapon --show |
| Qué procesos ocupan más memoria | ps aux --sort=-%mem | head |
| Cuánta memoria hay instalada, y si quedan zócalos | sudo dmidecode -t memory |
| Qué placa de video o de red tiene | lspci | grep -iE 'vga|network' |
| Cómo evoluciona el sistema | vmstat 2 |
| Repetir un comando y ver qué cambia | watch -d comando |
| Síntoma | Causa | Solució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 escribe | Qué hace |
|---|---|
uname -r, -m, -a | Versión del kernel; arquitectura; todo. |
hostname, hostnamectl | Nombre de la máquina; su ficha completa. |
sudo hostnamectl set-hostname nombre | Cambia el nombre de la máquina. |
uptime, -p, -s | Tiempo encendido y carga; solo el tiempo; fecha de arranque. |
cat /proc/loadavg | La carga media, sin formato. |
nproc | La cantidad de procesadores lógicos. |
free -h, -m | La memoria, en unidades legibles; en mebibytes. |
swapon --show | Las áreas de intercambio. |
lscpu | El procesador: modelo, zócalos, núcleos, hilos. |
lspci, lsusb | Los dispositivos internos; los USB. |
sudo dmidecode -t memory | Los módulos de memoria instalados. |
vmstat 2 5 | El estado del sistema, cada 2 segundos, 5 veces. |
watch -n 5 -d comando | Repite 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
- Los comandos de estado leen de
/procy de/sys, no modifican nada y casi nunca requierensudo. Son iguales en todas las distribuciones. uname -rmuestra la versión del kernel en ejecución, yuname -m, la arquitectura:x86_64,aarch64.- La versión del kernel y la de la distribución son datos distintos. La segunda está en
/etc/os-release. hostnamectlreúne el nombre de la máquina, la distribución, el kernel, el modelo del equipo y si es virtual.uptimemuestra cuánto lleva encendido el sistema y la carga media del último minuto, de los últimos cinco y de los últimos quince.- La carga media es la cantidad promedio de procesos que usan el procesador o esperan por él o por el disco. Se interpreta comparándola con
nproc. - Los tres números de la carga muestran la tendencia: si el primero es el mayor, la carga sube; si es el menor, baja.
free -hmuestra la memoria. La columna que indica cuánta queda esavailable, nofree.- El kernel usa la memoria sobrante como caché de disco y la cede cuando hace falta: poca memoria libre es lo normal.
- El área de intercambio es disco usado como extensión de la memoria. Que crezca, con
availablebajo, indica que la memoria no alcanza. lscpudistingue zócalos, núcleos e hilos. Su producto es la cantidad de procesadores lógicos, que informanproc.lspci,lsusbydmidecodehacen el inventario del resto del hardware.vmstat 2muestra la evolución del sistema:ryusseñalan al procesador,bywaal disco,siysoa la memoria. Su primera línea es un promedio desde el arranque.watchrepite cualquier comando cada pocos segundos; con una tubería, el comando va entre comillas.- Un sistema lento se diagnostica en orden: carga, memoria, recurso, proceso y espacio en disco.
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
- 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. - 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 informauname -r? - Ejecuta
hostnamectl. ¿Qué tipo de equipo declara? ¿Aparece la líneaVirtualization? Compara elBoot IDcon el de después de un reinicio. - Averigua cuándo arrancó el sistema de tres maneras: con
uptime -s, conwho -by con el primer campo de/proc/uptime, convertido de segundos a horas conawk. - Anota la carga y la salida de
nproc. Lanza en segundo plano tantosyes > /dev/nullcomo procesadores tengas, y sigue la carga conwatch -n 5 uptimedurante dos minutos. Mátalos conkilly observa cuánto tarda cada uno de los tres números en volver a su valor. - Ejecuta
free -h,free -myfree -h --si. Calcula qué porcentaje del total está disponible, y qué porcentaje figura como libre. - 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óntimeal comando de lectura —informa cuánto tardó en ejecutarse— y compara la primera vez con la segunda. - 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 contranproc. - Deja corriendo
vmstat 2en una terminal y, en otra, abre un programa pesado, copia un archivo grande y ejecutasudo apt update. ¿Qué columnas reaccionan en cada caso? - Arma con llaves un informe que guarde en
~/practica/estado.txtla 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.