- lspci y lsusb permiten inventariar de forma precisa los dispositivos PCI y USB detectados por el kernel, sin necesidad de abrir físicamente el equipo.
- Herramientas como lshw, hwinfo, dmidecode, lscpu y /proc complementan la auditoría mostrando detalles de CPU, memoria, BIOS, placa base y topología completa del hardware.
- Comandos orientados a discos (lsblk, fdisk, lsscsi, hdparm, smartctl) y a monitorizar temperatura y GPU ayudan a anticipar fallos físicos y cuellos de botella de rendimiento.
- La revisión de módulos del kernel (lsmod, lspci -k, rfkill, ethtool) cierra el círculo al relacionar cada dispositivo con su driver y su estado operativo real en el sistema.
Cuando administras un sistema GNU/Linux, saber qué piezas de hardware tienes realmente conectadas y cómo las ve el sistema es tan importante como instalar bien el propio sistema operativo. Auditar el hardware con herramientas como lspci, lsusb, lshw o dmidecode te permite diagnosticar problemas, comprobar compatibilidades y planificar ampliaciones sin abrir la caja del equipo ni perder la garantía.
A lo largo de esta guía vamos a ver, con bastante detalle, cómo usar lspci y lsusb como base para la auditoría del hardware conectado, pero también cómo complementarlos con otros comandos muy útiles: lscpu, lsscsi, lsblk, dmidecode, hwinfo, inxi, herramientas SMART para discos y utilidades de monitorización de temperatura y GPU. La idea es que, cuando termines de leer, tengas un “arsenal” de comandos con los que puedas radiografiar prácticamente cualquier máquina Linux.
Requisitos y paquetes básicos para auditar hardware en Linux
Antes de empezar a lanzar comandos como un poseso, conviene asegurarse de que el sistema tiene instalados los paquetes necesarios. En la mayoría de distribuciones modernas ya vienen de serie, pero nunca está de más revisarlo, sobre todo en servidores mínimos.
En sistemas tipo RHEL, CentOS 7 o derivados actuales, puedes asegurarte de que tienes las utilidades esenciales con:
yum -y install kmod pciutils usbutils util-linux
En versiones algo más antiguas como CentOS 5/6 o RHEL 5/6, el paquete de utilidades del sistema cambia ligeramente de nombre, así que el comando recomendado sería:
yum -y install module-init-tools pciutils usbutils util-linux-ng
En el mundo SUSE (openSUSE y SLE 12), el equivalente se gestiona cómodamente con YaST:
yast -i kmod pciutils usbutils util-linux
Y si trabajas con SUSE Linux Enterprise 11, el conjunto típico para tener todo listo sería:
yast -i module-init-tools pciutils usbutils util-linux
En Debian, Ubuntu y familia, normalmente pciutils, usbutils y util-linux ya vienen instalados, pero si quieres ir sobre seguro puedes ejecutar algo como:
sudo apt update
sudo apt install pciutils usbutils util-linux kmod
lspci: inspeccionar dispositivos PCI sin abrir el equipo
El comando lspci es la herramienta clave para listar todos los buses y dispositivos PCI que el kernel tiene detectados: tarjetas de red, controladoras SATA/SCSI, controladoras USB, adaptadores de vídeo, puentes PCI, etc. Es ideal, por ejemplo, para verificar qué modelo real de tarjeta gráfica o NIC tienes, sin necesidad de levantar la tapa del ordenador.
La invocación más sencilla muestra un listado breve con todos los dispositivos PCI:
lspci
La salida típica incluye líneas con la dirección de bus (como 00:1f.2 o 03:03.0), la clase de dispositivo y el fabricante/modelo detectados, por ejemplo:
00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 6 port SATA AHCI Controller (rev 05)
03:03.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200eW WPCM450 (rev 0a)
Si quieres un formato más “amigable” para otras herramientas o scripts, puedes usar lspci con -m o -mm, que separa los campos en comillas dobles:
lspci -mm
También es muy útil el modo árbol, que muestra un diagrama jerárquico con buses, puentes PCI y dispositivos colgando de cada uno:
lspci -t
Para diagnósticos más finos, lspci permite ajustar el nivel de detalle con los modificadores -v, -vv y -vvv. Cada uno añade más información: recursos asignados, IRQ, módulos del kernel asociados, etc. Por ejemplo:
lspci -vv
Si en lugar de nombres de fabricantes quieres ver los códigos numéricos de dispositivo y vendedor (útiles para búsquedas en bases de datos PCI), puedes usar:
lspci -n
Y si lo que necesitas es localizar un componente concreto, como la tarjeta gráfica, puedes combinarlo con grep para filtrar:
lspci -v | grep "VGA" -A 12
Este último patrón es perfecto cuando quieres asegurarte de que la tarjeta de vídeo externa que has comprado es realmente la que se anuncia, ya que sin quitar un solo tornillo puedes comprobar modelo, fabricante y recursos asignados tal y como el sistema la ha detectado.
lsusb: listar puertos y dispositivos USB conectados
Si lspci se centra en el bus PCI, lsusb es su equivalente para todo lo que pasa por USB: hubs, ratones, teclados, memorias USB, discos externos, adaptadores WiFi USB, etc. Resulta muy útil para confirmar que un dispositivo USB está siendo visto por el kernel y qué identificadores tiene.
El uso básico no puede ser más sencillo, basta con:
lsusb
El resultado por defecto muestra una línea por cada dispositivo detectado, con el número de bus, el número de dispositivo y los IDs de vendedor y producto, por ejemplo:
Bus 005 Device 002: ID 045e:00cb Microsoft Corp. Basic Optical Mouse v2.0
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Si necesitas información extremadamente detallada de cada dispositivo USB (descriptores, capacidades, modos de energía, etc.), puedes usar el modo “verbose”:
lsusb -v
Para analizar la topología del bus USB, lsusb también permite mostrar un árbol donde se ven claramente qué dispositivos cuelgan de cada hub, así como los root hubs del sistema:
lsusb -t
En routers o dispositivos embebidos basados en Linux, un disco duro USB externo suele aparecer en /dev/sda si no hay otro dispositivo de bloque presente. Después, la primera partición de ese disco sería /dev/sda1, la segunda /dev/sda2, y así sucesivamente.
lscpu, lshw y hwinfo: radiografía rápida del hardware
Para ver de un vistazo cómo es el procesador de la máquina, el comando lscpu resume toda la información relevante de CPU a partir de /proc/cpuinfo en un formato compacto y legible. También puedes usar CPU-X para una vista similar con interfaz más visual.
Solo tienes que ejecutar:
lscpu
La salida típica incluye arquitectura (por ejemplo x86_64), modos de operación (32 y 64 bits), número de CPUs lógicas y físicas, hilos por núcleo, núcleos por socket, cantidad de sockets, soporte de virtualización, tamaños de caché L1/L2/L3 y algunos detalles más como velocidad en MHz o BogoMIPS.
Si lo que quieres es un inventario más global, con CPU, memoria, controladoras, discos, tarjetas de red, USB, etc., el comando lshw es una de las opciones más potentes. Para obtener una vista condensada puedes usar:
sudo lshw -short
Este modo genera una tabla con columnas como “H/W path”, “Device”, “Class” y “Description”, donde vas viendo la jerarquía de dispositivos: placa base, CPU, cachés, módulos de memoria, puentes, discos con sus particiones, interfaces de red, controladoras USB, unidades ópticas y mucho más.
La herramienta lshw también permite exportar la información en diversos formatos, de forma que puedas documentar el hardware de un servidor en HTML, XML, JSON, etc.. Por ejemplo, para generar un informe HTML:
sudo lshw -html > inventario-hardware.html
Otra utilidad similar es hwinfo, que suele dar incluso más detalle que lshw. Si no necesitas tanta verbosidad, puedes optar por el modo corto:
sudo hwinfo --short
Este resumen agrupa componentes por tipo (cpu, keyboard, mouse, graphics card, sound, storage, network, usb controller, bios, etc.) y muestra para cada uno los dispositivos detectados y su identificación principal. Es muy práctico para una revisión rápida del equipo.
dmidecode: información de BIOS, placa base y memoria
La utilidad dmidecode lee la tabla SMBIOS/DMI de la BIOS y la traduce a un formato entendible. Aquí suele encontrarse información que no siempre sale en otros comandos: fabricante y modelo de la placa base, número de serie de chasis, detalles finos de módulos de RAM o la capacidad máxima soportada por el sistema.
Para consultar en detalle cómo está configurada la memoria, puedes usar:
sudo dmidecode -t memory
Este comando muestra cada banco de RAM con su tamaño, tipo (por ejemplo DIMM DDR2, DDR4, etc.), velocidad nominal en MHz/nanosegundos, fabricante y número de serie, lo que resulta muy útil cuando quieres ampliar RAM sin abrir el servidor o cuando el acceso físico es complicado.
Si solo te interesa saber cuál es la capacidad máxima de memoria admitida por la plataforma, puedes limitar la consulta a la estructura correspondiente:
sudo dmidecode -t 16
De manera similar, para obtener datos de la propia placa base puedes recurrir a:
sudo dmidecode -t 2
Y si lo que buscas son detalles del sistema en general (fabricante, modelo comercial, número de serie del equipo, etc.), el tipo 1 de dmidecode es el adecuado:
sudo dmidecode -t system
Comandos para ver discos, particiones y sistemas de archivos
Más allá de lspci y lsusb, cualquier auditoría de hardware razonable debe revisar qué discos hay presentes, cómo están particionados y qué sistemas de archivos se están usando. Linux ofrece varias herramientas complementarias para ello.
Para listar todos los dispositivos de bloque (discos duros, SSD, unidades ópticas, memorias USB, etc.) con sus particiones, tamaños y puntos de montaje, puedes usar:
lsblk
La salida incluye columnas como NAME, SIZE, TYPE y MOUNTPOINT. Opciones como -f o -m permiten ver el sistema de ficheros, la etiqueta, el UUID y permisos, por ejemplo:
lsblk -fm
Otra herramienta clásica es fdisk, que además de crear, borrar o formatear particiones, también se utiliza para listarlas todas en modo solo-lectura con:
sudo fdisk -l
Si quieres ver el espacio usado y disponible en cada sistema de archivos montado, df sigue siendo un imprescindible. Con la opción -h obtienes tamaños en formato legible (GB, MB, etc.):
df -h
Cuando necesitas controlar no solo espacio en bytes sino uso de inodos (muy relevante en servidores que manejan muchísimos ficheros pequeños), puedes recurrir a:
df -i
Para ver de forma clara qué está montado y con qué opciones, el comando mount sin argumentos muestra todas las entradas, y se puede formatear con column para facilitar la lectura:
mount | column -t
Discos SCSI/SATA, SMART y estado de salud
Para listar rápidamente dispositivos SCSI/SATA (discos duros, SSD y unidades ópticas), lsscsi es una utilidad muy cómoda y, si trabajas con SSD modernos, conviene conocer los namespaces de SSD. En algunas distribuciones hay que instalarla primero:
sudo apt install lsscsi
lsscsi
La salida suele mostrar identificadores del bus SCSI, tipo de dispositivo, modelo y el nodo de dispositivo en /dev (como /dev/sda o /dev/sr0). Si añades -s verás también los tamaños.
Para profundizar en las características de un disco SATA concreto (modos DMA/UDMA, caché de escritura, geometría, etc.) entra en juego hdparm. Una consulta básica sería:
sudo hdparm -i /dev/sda
Además de todo esto, conviene evaluar el estado de salud del disco con SMART, para anticipar fallos. La suite habitual es smartmontools, que puedes instalar así:
sudo apt install smartmontools
Primero, activa o comprueba que SMART está habilitado en el disco:
sudo smartctl -s on /dev/sda
Para ver los atributos y, entre otras cosas, las horas de uso acumuladas (Power_On_Hours), puedes hacer:
sudo smartctl -A /dev/sda | grep Power_On_Hours
El resumen de estado rápido, que indica si el disco aprueba o no la prueba de salud, se obtiene con:
sudo smartctl -H /dev/sdb
Si quieres lanzar pruebas SMART internas de corta o larga duración (muy recomendables de forma periódica), dispones de:
sudo smartctl --test=short /dev/sda
sudo smartctl --test=long /dev/sda
Y, finalmente, para ver toda la información y resultados de pruebas en detalle, el comando sería:
sudo smartctl -a /dev/sda
Smartmontools también puede configurarse para monitorizar discos en segundo plano y enviar avisos por correo. Para ello se ajusta /etc/default/smartmontools (habilitando start_smartd=yes) y se añaden líneas en /etc/smartd.conf del estilo:
/dev/sda -H -d ata -m tu_buzon@mail.com
Monitorizar temperatura de CPU y discos
Otro aspecto crítico de la auditoría de hardware es controlar las temperaturas, tanto de CPU como de unidades de almacenamiento. Sobrecalentamientos sutiles pueden provocar cuelgues intermitentes y degradación del rendimiento sin que a simple vista se note nada.
Para leer los sensores de CPU y placa se suele utilizar el paquete lm-sensors. Tras instalarlo, es recomendable ejecutar:
sudo sensors-detect
Este script detecta y activa los distintos sensores compatibles. Luego puedes usar el comando sensors directamente o, si quieres ir viendo la evolución en tiempo real, algo como:
watch -n 2 sensors
Para las temperaturas de discos SATA/SSD, la utilidad habitual es hddtemp. En algunas distribuciones modernas ya no está en los repositorios principales y puede ser necesario descargar un .deb concreto, pero en esencia se utiliza así:
sudo hddtemp /dev/sda
La salida indica el modelo del disco y la temperatura actual. Si ves valores persistentemente altos en equipos que apenas están trabajando, puede ser síntoma de mala ventilación o de un disco que empieza a estar en las últimas.
Uso de /proc para extraer información de hardware
Gran parte de la información que recogen todas estas herramientas proviene del pseudo-sistema de ficheros /proc, que expone datos sobre CPU, memoria, dispositivos y el propio kernel en forma de archivos de texto.
Algunos ejemplos prácticos y muy directos son:
# Información detallada de CPU
cat /proc/cpuinfo
# Información de memoria
cat /proc/meminfo
# Versión de kernel
cat /proc/version
Para dispositivos SCSI/SATA, el fichero relevante es:
cat /proc/scsi/scsi
Si quieres ver el listado de particiones que el kernel tiene registradas, junto con su número mayor/menor y número de bloques, puedes consultar:
cat /proc/partitions
En el contexto de vulnerabilidades modernas como Meltdown o Spectre, muchos kernels recientes exponen en /sys/devices/system/cpu/vulnerabilities archivos que indican si el sistema es vulnerable o está mitigado. Basta con hacer:
cat /sys/devices/system/cpu/vulnerabilities/*
Comprobación de RAM y dispositivos de bloque
Para saber cuánta memoria RAM tienes usada, libre y total sin demasiadas florituras, el comando free sigue siendo el clásico de toda la vida. La opción -m muestra los valores en megabytes:
free -m
Si sospechas problemas físicos en las unidades de almacenamiento, puedes ayudarte de fsck y badblocks para buscar errores en sistemas de archivos y sectores defectuosos. Un flujo típico sería:
sudo fsck /dev/sda1 -y
sudo badblocks /dev/mi_disco
La práctica recomendada es siempre contar con copias de seguridad actualizadas antes de lanzarse a estas pruebas, ya que un disco inestable puede terminar de fallar durante un escaneo intensivo.
Diagnóstico de tarjetas de red y radio (WiFi/Bluetooth)
Cuando sospechas que un problema de rendimiento viene de la red, no basta con saber qué tarjeta tienes; hace falta comprobar si está perdiendo paquetes o funcionando por debajo de la velocidad esperada. Aquí entran en juego varios comandos especializados.
Para ver estadísticas detalladas de una interfaz Ethernet (errores, paquetes descartados, colas, etc.) puedes usar:
watch -n 1 -t -d "ethtool -S eth0 | grep -v \"x_queue_\|x_pb_\""
Otra variante que se centra en contadores de drop, discard, buffers y colas FIFO:
watch -n 1 -t -d "ethtool --statistics eth0 | grep -i \"drop\|discard\|buffer\|fifo\""
También se puede vigilar /proc/net/softnet_stat para detectar cuellos de botella en el procesado de paquetes a nivel de kernel:
watch -n 1 -t -d cat /proc/net/softnet_stat
Un vistazo rápido al número de paquetes recibidos y descartados por interfaz se consigue con:
sudo netstat -ni
Si las columnas RX-DRP o TX-DRP muestran un porcentaje de pérdidas superior al 0,2 % respecto a RX-OK/TX-OK, es muy probable que notes un impacto considerable en el rendimiento de la conexión, y puede ser el indicio de una tarjeta de red defectuosa o de un driver poco estable.
Para dispositivos de radio como WiFi o Bluetooth, el comando rfkill permite ver si están bloqueados a nivel de hardware o software:
sudo rfkill
Si necesitas datos detallados del hardware de red (modelo, fabricante, capacidades), puedes recurrir a lshw filtrando por clase network:
sudo lshw -C network
O a la herramienta inxi, que con el modificador -Nx muestra un resumen muy legible de las interfaces de red presentes:
inxi -Nx
GPU y drivers gráficos: identificación y uso
En equipos de escritorio y estaciones de trabajo, la tarjeta gráfica suele ser un componente crítico. Para identificar qué GPU tienes instalada, con qué driver y qué memoria de vídeo maneja, puedes combinar varias herramientas.
Un primer paso muy habitual es filtrar la salida de lspci por dispositivos VGA:
lspci -vnn | grep VGA -A 12
También puedes usar lshw limitando la clase display, lo que te dará detalles como fabricante, configuración de recursos y módulos del kernel utilizados:
sudo lshw -C display
La utilidad glxinfo (del paquete mesa-utils) permite además ver la información de OpenGL, dispositivo usado y memoria asignada:
glxinfo -B
Si te interesa conocer o monitorizar el uso de la GPU, en el caso de tarjetas Intel los paquetes intel-gpu-tools incluyen la herramienta intel_gpu_top, que muestra en tiempo real el porcentaje de uso de diferentes bloques de la GPU:
sudo apt install intel-gpu-tools
sudo intel_gpu_top
Para tarjetas NVIDIA, hay varias opciones basadas en Python como gpustat o glances con soporte GPU, que se instalan generalmente vía pip y ofrecen una visión clara del uso de memoria de vídeo, carga y procesos que están tirando de la GPU.
En el caso de GPUs AMD Radeon, la herramienta radeontop permite monitorizar consumo de recursos gráficos de forma similar:
sudo apt install radeontop
sudo radeontop
Si descubres que llevas tiempo con drivers genéricos o poco optimizados, puedes plantearte actualizar controladores; por ejemplo, hay artículos que detallan el cambio de drivers para tarjetas Radeon en Linux y cómo afecta al rendimiento.
Si te interesa conocer o monitorizar el uso de la GPU, en el caso de tarjetas Intel los paquetes intel-gpu-tools incluyen la herramienta intel_gpu_top, que muestra en tiempo real el porcentaje de uso de diferentes bloques de la GPU:
Para tarjetas NVIDIA, hay varias opciones basadas en Python como gpustat o glances con soporte GPU, que se instalan generalmente vía pip y ofrecen una visión clara del uso de memoria de vídeo, carga y procesos que están tirando de la GPU.
En el caso de GPUs AMD Radeon, la herramienta radeontop permite monitorizar consumo de recursos gráficos de forma similar:
sudo apt install radeontop
sudo radeontop
Si descubres que llevas tiempo con drivers genéricos o poco optimizados, puedes plantearte actualizar controladores. Para Ubuntu y derivados, por ejemplo, hay repositorios PPA como oibaf/graphics-drivers que suministran versiones actualizadas de la pila gráfica:
sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo apt update && sudo apt -y upgrade
Módulos del kernel y su relación con el hardware
Una parte importante de la auditoría de hardware consiste en comprobar qué módulos del kernel (drivers) están cargados, cuáles dependen de ellos y cómo afectan a los dispositivos detectados por lspci y lsusb; por ello conviene revisar también las novedades del kernel que pueden introducir soporte o mejoras para ciertos controladores.
El comando básico para ver todos los módulos activos es lsmod, que muestra tres columnas: nombre del módulo, tamaño en memoria y número de usuarios (otros módulos que lo utilizan):
lsmod
Si necesitas cargar o descargar módulos manualmente, entrarían en juego herramientas como modprobe. Por ejemplo, para intentar descargar el módulo bluetooth se usaría:
sudo modprobe -r bluetooth
En la práctica, si el módulo está siendo utilizado (por otros módulos o por procesos activos) obtendrás un mensaje de error y no podrás retirarlo sin más. Es una situación típica cuando un administrador quiere probar parámetros diferentes en un módulo sin reiniciar y se encuentra con que el sistema no le deja descargarlo.
Para relacionar módulos con dispositivos PCI concretos, lspci ofrece la opción -k, que añade información sobre qué driver maneja cada dispositivo y qué módulos alternativos hay disponibles:
lspci -k
Con todo este conjunto de comandos —lspci para PCI, lsusb para USB, lscpu, lshw, hwinfo, dmidecode, lsblk, lsscsi, hdparm, smartctl, herramientas de monitorización de temperatura y GPU, sin olvidar /proc y los módulos del kernel— tienes en tu mano una vista muy completa de lo que tu sistema Linux es capaz de ver y cómo lo está gestionando a nivel de hardware. Con un poco de práctica, se vuelve casi rutina sacar esta “foto” del equipo antes de ponerlo en producción o cuando empiezan a aparecer síntomas raros difíciles de explicar por software.