Aller au contenu
Administration Linux medium

Identifier et observer les périphériques Linux

33 min de lecture

Vous devez savoir ce qu'une machine Linux a dans le ventre : quel disque se cache derrière /dev/nvme0n1, quel pilote gère la carte réseau, pourquoi la clé USB branchée reste invisible. Cette page de référence rassemble les commandes d'identification du matériel : lsblk pour les disques, lspci et lsusb pour les bus, lshw pour l'inventaire complet, lsmod et modinfo pour les modules du noyau, dmesg pour suivre la détection en direct. Vous verrez aussi comment udev crée les fichiers de /dev et comment écrire une règle personnalisée pour nommer un périphérique de façon stable.

  • Relier un périphérique physique à son fichier spécial dans /dev ;
  • Identifier les composants PCI, USB et les disques avec lspci, lsusb et lsblk ;
  • Écrire, recharger et tester une règle udev personnalisée ;
  • Charger, décharger et inspecter un module du noyau ;
  • Diagnostiquer un périphérique non détecté avec dmesg.

Sous Linux, la gestion du matériel repose sur une architecture bien définie, qui assure la communication entre les composants physiques et le système d'exploitation. Cette interaction est essentielle pour garantir que chaque périphérique, disque dur, carte réseau ou clé USB, fonctionne correctement et soit exploitable par les applications.

Linux utilise des pilotes (drivers) pour faire le lien entre le matériel et le noyau. Chaque pilote est conçu pour un type précis de périphérique : carte graphique, contrôleur USB, carte réseau, etc. Le pilote permet au noyau d'interagir avec le matériel sans avoir à gérer directement les particularités techniques de chaque composant.

Par exemple, quand vous branchez une clé USB, le noyau ne sait pas par défaut comment lire ce matériel. Le pilote de stockage USB traduit les échanges sur le bus en opérations de lecture et d'écriture compréhensibles par Linux.

Le processus de reconnaissance et de gestion du matériel suit toujours la même chaîne, qu'il s'agisse d'un disque interne ou d'un périphérique branché à chaud :

  • Matériel : un périphérique signale sa présence lorsqu'il est branché ou détecté au démarrage.
  • Pilote (driver) : le pilote traduit les échanges avec le matériel en instructions exploitables par le système.
  • Noyau : le noyau Linux traite ces instructions et émet un événement.
  • udev : le gestionnaire de périphériques reçoit l'événement et crée le fichier spécial correspondant dans /dev.

Chaque commande de cette page observe un maillon de cette chaîne : dmesg regarde le noyau, udevadm interroge udev, lsblk et ls -l /dev montrent le résultat final.

Les périphériques ont souvent besoin d'attirer l'attention du processeur pour signaler qu'une tâche est terminée ou qu'un événement s'est produit (par exemple, une touche pressée sur un clavier). Linux gère cela avec les interruptions matérielles (IRQ). Chaque périphérique se voit attribuer un ou plusieurs numéros d'interruption, parfois partagés entre plusieurs composants sur les machines anciennes. Le fichier /proc/interrupts liste les IRQ en cours d'utilisation et le nombre d'événements traités par processeur.

Prenons un scénario courant pour dérouler la chaîne complète :

  • Vous branchez une clé USB.
  • Le contrôleur USB signale un nouvel appareil, le noyau émet un événement.
  • Le noyau identifie le type de périphérique et charge le module approprié s'il ne l'est pas déjà (ici usb-storage, le pilote de stockage de masse USB).
  • udev reçoit l'événement et expose le périphérique sous forme d'un fichier dans /dev, tel que /dev/sdb.
  • Le système peut alors monter la clé et la rendre accessible via un point de montage, par exemple /media/usb.

La gestion des modules (lsmod, modprobe, modinfo) est détaillée plus bas dans cette page.

udev est un élément clé de la gestion matérielle sous Linux. Il agit comme un gestionnaire dynamique de périphériques, permettant la détection et la configuration automatique des matériels dès qu'ils sont connectés ou déconnectés. C'est lui qui crée ou supprime les fichiers dans le répertoire /dev en temps réel.

Lorsqu'un périphérique est branché (par exemple, une clé USB), le noyau Linux envoie un événement matériel (uevent). udev intercepte cet événement, identifie le périphérique, applique les règles correspondantes, et crée un fichier spécial sous /dev, éventuellement accompagné de liens symboliques stables (ceux que vous voyez dans /dev/disk/by-uuid/ par exemple).

Schéma simplifié du processus :

  • Événement matériel -> Noyau -> udev -> Création du fichier /dev

Cela permet au système d'être immédiatement prêt à utiliser le matériel, sans intervention manuelle.

Le comportement de udev est contrôlé par des règles, situées dans deux emplacements aux rôles distincts :

  • /etc/udev/rules.d/ : les règles de l'administrateur, prioritaires ;
  • /usr/lib/udev/rules.d/ : les règles fournies par les paquets de la distribution (accessible aussi via /lib/udev/rules.d/ sur Debian et Ubuntu).

Un fichier de /etc/udev/rules.d/ qui porte le même nom qu'un fichier de /usr/lib/udev/rules.d/ le remplace entièrement. Les fichiers sont traités par ordre alphabétique : le préfixe numérique (10-, 70-, 99-) détermine donc l'ordre d'application.

Chaque règle définit comment udev doit gérer un périphérique : nommage personnalisé, permissions spécifiques, ou lancement de scripts. Exemple de règle qui crée un lien stable pour une clé USB Kingston (fichier /etc/udev/rules.d/99-cle-inventaire.rules) :

ACTION=="add", SUBSYSTEM=="block", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1666", SYMLINK+="cle-inventaire%n"

Cette règle crée un lien symbolique /dev/cle-inventaire pour le disque et /dev/cle-inventaire1 pour sa première partition (%n reprend le numéro attribué par le noyau). Deux pièges à connaître :

  • ATTRS{} (avec un S) compare l'attribut sur le périphérique et ses parents : indispensable ici, car idVendor appartient au périphérique USB parent, pas au disque lui-même. ATTR{} ne teste que le périphérique courant.
  • Les identifiants idVendor et idProduct se lisent dans la sortie de lsusb (colonne ID 0951:1666).

Pour découvrir tous les attributs utilisables dans une règle, remontez la chaîne des parents d'un périphérique avec :

Fenêtre de terminal
udevadm info --attribute-walk --name=/dev/sdb

L'outil udevadm regroupe tout le pilotage de udev : observation des événements, inspection d'un périphérique, rechargement des règles.

Pour voir en direct ce qui se passe lorsque vous connectez ou déconnectez un périphérique :

Fenêtre de terminal
udevadm monitor

La commande commence par annoncer ce qu'elle écoute, puis affiche une ligne KERNEL (l'événement brut du noyau) et une ligne UDEV (après application des règles) pour chaque événement :

monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[1534.567890] add /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)
UDEV [1534.569012] add /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb)

Pour obtenir toutes les propriétés d'un périphérique déjà présent, utilisez udevadm info. Exemple sur une partition NVMe :

Fenêtre de terminal
udevadm info --name=/dev/nvme0n1p1
P: /devices/pci0000:00/0000:00:06.0/0000:01:00.0/nvme/nvme0/nvme0n1/nvme0n1p1
N: nvme0n1p1
S: disk/by-uuid/3DF4-92C7
S: disk/by-path/pci-0000:01:00.0-nvme-1-part1
S: disk/by-id/nvme-CT1000P3PSSD8_24361234ABCD-part1
E: DEVNAME=/dev/nvme0n1p1
E: DEVTYPE=partition
E: ID_FS_TYPE=vfat

Les lignes S: listent les liens symboliques créés par udev, et les lignes E: les propriétés exploitables dans des règles ou des scripts.

Après avoir modifié une règle, demandez à udev de recharger sa configuration :

Fenêtre de terminal
sudo udevadm control --reload

Le rechargement ne s'applique qu'aux événements futurs. Pour rejouer les règles sur les périphériques déjà branchés :

Fenêtre de terminal
sudo udevadm trigger

Comprendre les fichiers de périphériques dans /dev

Section intitulée « Comprendre les fichiers de périphériques dans /dev »

Dans Linux, chaque périphérique matériel est représenté par un fichier spécial situé dans le répertoire /dev. Cette approche suit le principe « tout est fichier » : un disque, un port série ou même une souris peuvent être manipulés comme n'importe quel fichier par le système d'exploitation.

Le répertoire /dev contient des fichiers de périphériques qui servent d'interface entre le noyau et le matériel. Lorsqu'une application souhaite interagir avec un périphérique (par exemple, lire un fichier sur un disque), elle passe par ce fichier spécial.

Exemple d'inspection de deux périphériques :

Fenêtre de terminal
ls -l /dev/nvme0n1 /dev/tty0
brw-rw---- 1 root disk 259, 0 juin 5 17:36 /dev/nvme0n1
crw--w---- 1 root tty 4, 0 juin 5 17:36 /dev/tty0

Le premier caractère de chaque ligne révèle la catégorie du fichier. Il existe deux grandes familles :

  • Périphériques de caractères (type c) : ils transmettent les données caractère par caractère. C'est le cas des terminaux (/dev/tty), des ports série ou des périphériques audio.
  • Périphériques de blocs (type b) : ils gèrent les données par blocs, ce qui est plus efficace pour les disques, les clés USB et les partitions (/dev/sda, /dev/nvme0n1p1).

Les deux nombres qui remplacent la taille habituelle du fichier identifient le périphérique auprès du noyau :

  • Numéro majeur : identifie le pilote utilisé (8 pour les disques SATA/SCSI sd*, 259 pour les disques NVMe).
  • Numéro mineur : identifie l'instance précise du périphérique (disque, puis chaque partition).

Pour obtenir ces informations sous une forme détaillée, utilisez stat :

Fenêtre de terminal
stat /dev/nvme0n1
File: /dev/nvme0n1
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 0,5 Inode: 334 Links: 1 Device type: 259,0
Access: (0660/brw-rw----) Uid: ( 0/ root) Gid: ( 6/ disk)

La mention block special file confirme le type, et Device type: 259,0 reprend le couple majeur/mineur.

La commande lshw (Hardware Lister) affiche des informations détaillées sur l'ensemble du matériel de votre système : processeur, mémoire, cartes réseau, stockage. Contrairement à lspci ou lsusb, qui se concentrent sur un bus spécifique, lshw donne une vue globale de la machine. Elle n'est pas toujours installée par défaut :

Fenêtre de terminal
sudo apt install lshw # Debian / Ubuntu
sudo dnf install lshw # RHEL / Fedora

Pour afficher toutes les informations disponibles sur votre matériel :

Fenêtre de terminal
sudo lshw

L'utilisation de sudo est nécessaire pour accéder aux détails des périphériques bas niveau (les disques notamment) : sans privilèges, la sortie est incomplète et lshw l'annonce en fin d'exécution.

Si vous cherchez un aperçu rapide sans entrer dans les détails, l'option -short produit un tableau d'une ligne par composant :

Fenêtre de terminal
sudo lshw -short
H/W path Device Class Description
===========================================================
system UM250 (Default string)
/0 bus UM250
/0/9 memory 40GiB System Memory
/0/9/0 memory 32GiB SODIMM DDR4 Synchronous Unbuffered (Unregistered) 2666 MHz
/0/e processor AMD Ryzen Embedded V1605B with Radeon Vega Gfx
/0/100/1.1/0 enp1s0 network Ethernet Controller I225-V
/0/100/1.3/0 wlo1 network Wireless 7265
/0/100/8.1/0 display Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series]

La colonne Class permet de repérer d'un coup d'œil les catégories : memory, processor, network, display, storage. Vous pouvez d'ailleurs filtrer directement sur une classe avec l'option -C :

Fenêtre de terminal
sudo lshw -C network # cartes réseau
sudo lshw -C storage # contrôleurs de stockage
sudo lshw -C memory # mémoire

Le filtrage par classe est le réflexe à avoir pour vérifier qu'une carte réseau est bien détectée et associée au bon pilote :

Fenêtre de terminal
sudo lshw -C network
*-network
description: Ethernet interface
product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
vendor: Realtek Semiconductor Co., Ltd.
configuration: driver=r8169

La ligne configuration: driver= indique le module du noyau utilisé, information précieuse quand une interface ne remonte pas.

Enfin, lshw sait exporter son inventaire pour l'intégrer dans des rapports ou des outils externes, en HTML ou en JSON (selon la version installée) :

Fenêtre de terminal
sudo lshw -html > rapport_hardware.html
sudo lshw -json > rapport_hardware.json

Le bus PCI (Peripheral Component Interconnect) connecte une grande variété de périphériques internes : cartes réseau, cartes graphiques, contrôleurs SATA et NVMe, contrôleurs USB. La commande lspci (paquet pciutils) liste tous les périphériques présents sur ce bus, ce qui est particulièrement utile pour diagnostiquer ou documenter la configuration matérielle d'une machine.

Pour lister tous les périphériques PCI :

Fenêtre de terminal
lspci
00:00.0 Host bridge: Intel Corporation Device 4649 (rev 02)
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-P GT1 [UHD Graphics] (rev 0c)
00:06.0 PCI bridge: Intel Corporation 12th Gen Core Processor PCI Express x4 Controller #0 (rev 02)
00:14.0 USB controller: Intel Corporation Alder Lake PCH USB 3.2 xHCI Host Controller (rev 01)
00:17.0 SATA controller: Intel Corporation Alder Lake-P SATA AHCI Controller (rev 01)
00:1f.3 Audio device: Intel Corporation Alder Lake PCH-P High Definition Audio Controller (rev 01)

Chaque ligne commence par l'adresse PCI du périphérique (bus:device.function), suivie de sa classe et de sa description. Cela donne un aperçu rapide des composants majeurs.

Pour savoir quel pilote gère chaque périphérique, l'option -k est la plus directe :

Fenêtre de terminal
lspci -k -s 00:02.0
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-P GT1 [UHD Graphics] (rev 0c)
Subsystem: Intel Corporation Alder Lake-P GT1 [UHD Graphics]
Kernel driver in use: i915
Kernel modules: i915, xe

La ligne Kernel driver in use montre le module effectivement chargé, et Kernel modules les modules candidats. C'est le premier réflexe quand un périphérique est détecté mais ne fonctionne pas : pas de ligne Kernel driver in use, pas de pilote.

L'option -v (verbose) ajoute les ressources allouées (IRQ, plages mémoire), et -nn affiche les identifiants numériques du fabricant et du modèle :

Fenêtre de terminal
lspci -nn
00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-P GT1 [UHD Graphics] [8086:46a3] (rev 0c)

Ici, 8086 est l'ID fabricant (Intel) et 46a3 l'ID du modèle. Ces identifiants sont très pratiques pour rechercher un pilote compatible ou identifier précisément un matériel affiché comme Device xxxx non reconnu.

lspci s'appuie sur une base de données locale pour associer les identifiants PCI à des noms lisibles. Pour mettre à jour cette base (utile quand un matériel récent apparaît sans nom) :

Fenêtre de terminal
sudo update-pciids

Pour rechercher uniquement votre carte graphique, combinez avec grep :

Fenêtre de terminal
lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-P GT1 [UHD Graphics] (rev 0c)

Cela permet de vérifier rapidement que le système détecte correctement la carte vidéo.

Le bus USB (Universal Serial Bus) est omniprésent : clés USB, disques externes, claviers, souris, webcams. Tous ces périphériques se listent avec la commande lsusb (paquet usbutils), indispensable pour diagnostiquer un périphérique externe qui ne répond pas ou vérifier sa bonne détection.

Pour afficher la liste des périphériques USB connectés :

Fenêtre de terminal
lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 2109:2822 VIA Labs, Inc. USB2.0 Hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 2109:0822 VIA Labs, Inc. USB3.1 Hub

Chaque ligne indique le bus USB, le numéro de périphérique, l'ID fournisseur:produit et le nom du périphérique reconnu. Les root hub « Linux Foundation » sont les contrôleurs USB de la machine eux-mêmes, pas des appareils branchés.

Chaque périphérique USB possède un identifiant sous la forme ID 2109:2822 :

  • les 4 premiers caractères hexadécimaux (2109) correspondent à l'ID fournisseur ;
  • les 4 suivants (2822) correspondent à l'ID produit.

Ces identifiants servent à rechercher des informations sur le matériel (la base publique usb.ids les recense) et à écrire des règles udev personnalisées, comme vu plus haut.

Pour obtenir les détails complets d'un périphérique (interfaces, protocoles, consommation), utilisez -v, de préférence en ciblant une adresse précise avec -s, car la sortie complète est très volumineuse :

Fenêtre de terminal
lsusb -s 001:002 -v

Pour afficher l'arborescence des périphériques USB, utile pour voir sur quel port physique chaque appareil est branché et à quelle vitesse il négocie :

Fenêtre de terminal
lsusb -t
/: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/12p, 480M
|__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/2p, 480M
/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/4p, 10000M
|__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/2p, 10000M

La colonne Driver= montre le pilote associé à chaque interface, et la valeur finale la vitesse négociée (480M pour USB 2.0, 5000M ou 10000M pour USB 3.x). Un disque USB 3 branché sur un port qui négocie à 480M est un signe de câble ou de port inadapté.

Exemple pratique, pour détecter si une imprimante USB est reconnue :

Fenêtre de terminal
lsusb | grep -i printer

S'il n'y a aucun résultat, l'imprimante n'est pas détectée au niveau du bus USB : inutile de chercher plus haut (CUPS, pilotes), le problème est matériel ou câblage.

La commande lsblk (List Block Devices, paquet util-linux) affiche la hiérarchie complète des périphériques de bloc : disques, SSD, clés USB, partitions, volumes LVM. C'est l'outil de référence pour vérifier la structure des disques avant toute opération de partitionnement ou de montage.

Pour lister tous les périphériques de bloc détectés :

Fenêtre de terminal
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 931,5G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot/efi
├─nvme0n1p2 259:2 0 2G 0 part /boot
└─nvme0n1p3 259:3 0 928,5G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 928,5G 0 lvm /

Cette représentation en arborescence montre la relation entre le disque physique (nvme0n1), ses partitions (nvme0n1p1 à p3) et les volumes LVM construits dessus. La colonne RM vaut 1 pour les périphériques amovibles (clés USB), et MOUNTPOINTS indique où chaque volume est monté.

Sur une machine où snap est installé, la liste est polluée par des dizaines de périphériques loop. Excluez-les avec -e 7 (7 est le numéro majeur des périphériques loop) :

Fenêtre de terminal
lsblk -e 7

Pour voir également les systèmes de fichiers, leurs UUID et l'espace disponible :

Fenêtre de terminal
lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1
├─nvme0n1p1 vfat FAT32 3DF4-92C7 1G 1% /boot/efi
├─nvme0n1p2 ext4 1.0 9a43eed7-0049-4b6f-b80d-5593cb2744a0 1,6G 10% /boot
└─nvme0n1p3 LVM2_member LVM2 001 9HHBOS-dOrC-yKYx-nK9s-nH8N-5gaM-jIB8Qg
└─ubuntu--vg-ubuntu--lv ext4 1.0 044f2a54-fb22-4a0e-bc4e-40cd719d479e 138,4G 81% /

L'UUID est l'identifiant à utiliser dans /etc/fstab (le fichier des montages persistants) : contrairement à /dev/sdb1, il ne change pas si le noyau renumérote les disques au démarrage.

Vous pouvez composer votre propre affichage avec -o et la liste des colonnes souhaitées :

Fenêtre de terminal
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS,MODEL

La colonne MODEL affiche la référence commerciale du disque, pratique pour distinguer deux disques de même taille. Deux autres options utiles :

  • lsblk -a ajoute les périphériques vides (sans support inséré ou de taille nulle), masqués par défaut ;
  • lsblk /dev/nvme0n1 limite l'affichage à un seul disque et à ses enfants.

Exemple pratique : pour vérifier qu'une clé USB fraîchement branchée est reconnue, lancez lsblk -f et cherchez le nouveau disque avec RM à 1 (en général sdb ou sdc). S'il apparaît sans point de montage, la clé est détectée mais pas montée : c'est un état normal sur un serveur, à vous de la monter.

En complément, la commande blkid identifie rapidement chaque périphérique par son UUID et son type de système de fichiers :

Fenêtre de terminal
sudo blkid
/dev/nvme0n1p1: UUID="3DF4-92C7" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="cd4e410d-262f-41af-8958-27fffd6a49fa"
/dev/nvme0n1p2: UUID="9a43eed7-0049-4b6f-b80d-5593cb2744a0" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="31a14aba-e3e5-4040-a75d-1fa06baed451"

Pour aller plus loin sur l'identification fiable des disques (chemins /dev/disk/by-id/, WWN, numéros de série), une page dédiée détaille le sujet : identifier ses disques de façon fiable.

Autres commandes utiles pour l'inventaire matériel

Section intitulée « Autres commandes utiles pour l'inventaire matériel »

En plus des classiques lspci, lsusb et lsblk, Linux propose plusieurs autres commandes précieuses pour explorer le matériel en profondeur. Ces outils apportent des informations complémentaires sur le BIOS/UEFI, la carte mère et le processeur.

La commande dmidecode extrait les informations de la table DMI/SMBIOS renseignée par le firmware de la machine : fabricant de la carte mère, modèle et version du BIOS, barrettes mémoire installées et emplacements libres. C'est la commande à utiliser pour inventorier une machine sans l'ouvrir.

Fenêtre de terminal
sudo dmidecode -t system
# dmidecode 3.5
Getting SMBIOS data from sysfs.
SMBIOS 3.4.0 present.
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: Micro Computer(HK) Tech Limited
Product Name: NAB6
Serial Number: Default string

L'option -t cible une section précise : system, bios, memory, processor. Pour connaître le détail des barrettes de RAM (taille, vitesse, emplacements occupés) :

Fenêtre de terminal
sudo dmidecode -t memory

Attention : les valeurs proviennent du firmware, pas d'une mesure. Sur certaines machines (mini-PC, machines virtuelles), des champs contiennent des valeurs génériques comme Default string.

inxi est un script qui synthétise en quelques lignes le matériel, le système et l'environnement logiciel. Très pratique pour obtenir un résumé rapide d'une machine que vous découvrez :

Fenêtre de terminal
sudo apt install inxi # Debian / Ubuntu
sudo dnf install inxi # RHEL / Fedora (dépôt EPEL)

La combinaison d'options recommandée affiche tout (-F), avec les détails techniques (-x) et en masquant les informations sensibles comme les adresses IP et MAC (-z) :

Fenêtre de terminal
inxi -Fxz

hwinfo est une alternative à lshw, historiquement liée à openSUSE, qui scanne l'ensemble du matériel de façon très verbeuse. Elle est utilisée pour diagnostiquer les périphériques non détectés ou obtenir des détails bruts qu'aucun autre outil n'affiche :

Fenêtre de terminal
sudo apt install hwinfo
sudo hwinfo --short # résumé
sudo hwinfo --network # une catégorie précise

Pour afficher uniquement les informations du processeur (architecture, nombre de cœurs et de threads, virtualisation), lscpu est fournie par util-linux et donc toujours disponible :

Fenêtre de terminal
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: GenuineIntel
Model name: 12th Gen Intel(R) Core(TM) i7-12650H
Thread(s) per core: 2
Core(s) per socket: 10
Socket(s): 1

La sortie complète inclut aussi les tailles de caches, la topologie NUMA et l'état des mitigations de vulnérabilités CPU (Spectre, Meltdown). Le rapport cœurs/threads (Thread(s) per core: 2) confirme ici que l'hyperthreading est actif.

Gérer les modules du noyau avec lsmod, modprobe et modinfo

Section intitulée « Gérer les modules du noyau avec lsmod, modprobe et modinfo »

Le noyau Linux utilise des modules pour gérer de nombreux composants matériels. Ces modules sont des morceaux de code chargés ou déchargés dynamiquement, ce qui permet au noyau de s'adapter aux périphériques présents sans redémarrage.

La commande lsmod affiche tous les modules actuellement chargés :

Fenêtre de terminal
lsmod
Module Size Used by
tcp_diag 12288 0
inet_diag 28672 1 tcp_diag
vxlan 155648 0
ip6_udp_tunnel 16384 1 vxlan

Les colonnes se lisent ainsi :

  • Module : nom du module ;
  • Size : taille du module en mémoire (octets) ;
  • Used by : nombre d'utilisateurs du module, suivi du nom des modules qui en dépendent (ici tcp_diag dépend de inet_diag).

Ce compteur de dépendances est la clé pour comprendre pourquoi un module refuse parfois de se décharger.

Pour charger un module (par exemple usb-storage, le pilote de stockage de masse USB) :

Fenêtre de terminal
sudo modprobe usb-storage

modprobe charge automatiquement les dépendances du module, ce qui en fait l'outil à privilégier. Notez que les tirets et les tirets bas sont interchangeables : modprobe usb-storage et modprobe usb_storage chargent le même module, mais lsmod l'affiche toujours avec un tiret bas (usb_storage).

Pour retirer un module de la mémoire :

Fenêtre de terminal
sudo modprobe -r usb-storage

Attention : un module ne peut être retiré que s'il n'est pas utilisé (le compteur Used by doit être à 0). Sinon, modprobe -r échoue avec Module usb_storage is in use.

Pour vérifier qu'un module est bien chargé ou déchargé :

Fenêtre de terminal
lsmod | grep usb_storage

La commande modinfo affiche la carte d'identité d'un module : description, licence, fichier sur le disque, paramètres et alias matériels :

Fenêtre de terminal
modinfo usb-storage
filename: /lib/modules/6.8.0-134-generic/kernel/drivers/usb/storage/usb-storage.ko.zst
license: GPL
description: USB Mass Storage driver for Linux
author: Matthew Dharm <mdharm-usb@one-eyed-alien.net>

En cas de problème matériel, recharger un module permet de réinitialiser un pilote sans redémarrer, par exemple pour une carte réseau Realtek :

Fenêtre de terminal
sudo modprobe -r r8169
sudo modprobe r8169

Les fichiers des modules sont stockés dans /lib/modules/$(uname -r)/, souvent compressés (.ko.zst ou .ko.xz selon la distribution). Pour localiser un module précis :

Fenêtre de terminal
find /lib/modules/$(uname -r) -type f -name 'usb-storage.ko*'
/lib/modules/6.8.0-134-generic/kernel/drivers/usb/storage/usb-storage.ko.zst

La commande dmesg affiche le tampon de messages du noyau (kernel ring buffer) : tout ce que le noyau enregistre depuis le démarrage, dont la détection et la configuration du matériel. C'est l'outil de premier recours quand un périphérique branché ne donne aucun signe de vie.

Sur la plupart des distributions récentes, la lecture de ce tampon est réservée à root (paramètre kernel.dmesg_restrict) : sans sudo, la commande échoue avec read kernel buffer failed: Operation not permitted.

Fenêtre de terminal
sudo dmesg

Exemple de séquence lors du branchement d'un périphérique USB :

[ 1.155126] usb 1-1: new high-speed USB device number 2 using xhci_hcd
[ 1.285464] usb 1-1: New USB device found, idVendor=2109, idProduct=2822, bcdDevice=90.13
[ 1.285515] usb 1-1: Product: USB2.0 Hub
[ 1.285520] usb 1-1: Manufacturer: VIA Labs, Inc.

On y retrouve les identifiants idVendor et idProduct, les mêmes que ceux affichés par lsusb et exploitables dans une règle udev.

Pour cibler uniquement les messages relatifs aux périphériques USB :

Fenêtre de terminal
sudo dmesg | grep -i usb

Pour consulter uniquement les derniers messages, les plus récents étant en bas, combinez avec tail juste après avoir branché un matériel :

Fenêtre de terminal
sudo dmesg | tail

Pour une surveillance continue des messages du noyau (l'équivalent de tail -f pour les journaux), l'option --follow affiche les événements en direct ; c'est la meilleure façon d'observer ce qui se passe au moment exact où vous branchez un périphérique :

Fenêtre de terminal
sudo dmesg --follow

Vous pouvez également chercher des erreurs en filtrant sur des mots-clés comme error, fail ou fault :

Fenêtre de terminal
sudo dmesg | grep -i error

Par défaut, dmesg horodate les messages en secondes depuis le démarrage. Pour un affichage avec les dates réelles, utilisez -T :

Fenêtre de terminal
sudo dmesg -T
[mar. juil. 14 07:50:18 2026] usb 1-1: new high-speed USB device number 2 using xhci_hcd

Exemple pratique : pour diagnostiquer un disque qui pose problème, filtrez sur son nom de périphérique et cherchez des erreurs d'entrées/sorties :

Fenêtre de terminal
sudo dmesg | grep -i nvme0

L'absence d'erreur I/O error ou link reset dans cette sortie est bon signe : le disque est reconnu et dialogue normalement avec le noyau.

Face à un périphérique récalcitrant, l'erreur classique est de tester au hasard. Ce tableau reprend les symptômes les plus fréquents et l'ordre de diagnostic à suivre, du matériel vers la configuration.

SymptômeCause probableSolution
Clé USB invisible dans lsblkCâble/port défectueux, ou module de stockage absentLancer sudo dmesg --follow puis brancher la clé : aucun message = problème matériel ; messages présents mais pas de /dev/sd* = vérifier lsmod | grep usb_storage et charger le module
Carte détectée par lspci mais interface absentePilote non chargé ou inexistantlspci -k : si Kernel driver in use manque, charger le module listé dans Kernel modules avec modprobe, ou installer le firmware manquant signalé dans dmesg
Règle udev sans effetRègles non rechargées, ou mauvais attribut (ATTR au lieu de ATTRS)sudo udevadm control --reload && sudo udevadm trigger, puis vérifier les attributs réels avec udevadm info --attribute-walk
modprobe -r échoue avec Module is in useLe module est utilisé par un périphérique monté ou un autre moduleConsulter la colonne Used by de lsmod, démonter les systèmes de fichiers ou décharger d'abord les modules dépendants
dmesg répond Operation not permittedLecture du tampon noyau restreinte (kernel.dmesg_restrict=1)Relancer la commande avec sudo

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Chaque périphérique suit la même chaîne : matériel, pilote, noyau, puis udev qui crée le fichier spécial dans /dev.
  • Les fichiers de /dev sont de type bloc (b, disques) ou caractère (c, terminaux, ports série), identifiés par un couple majeur/mineur.
  • Les règles udev personnalisées vont dans /etc/udev/rules.d/ ; après modification, udevadm control --reload puis udevadm trigger.
  • ATTRS{} compare aussi les attributs des périphériques parents, ATTR{} seulement ceux du périphérique courant : c'est le piège numéro un des règles udev.
  • lspci -k et lshw -C network révèlent le pilote associé à un périphérique ; une carte sans Kernel driver in use ne fonctionnera pas.
  • lsblk -f montre la hiérarchie disques/partitions avec les UUID, la référence stable à utiliser dans /etc/fstab.
  • modprobe charge un module avec ses dépendances ; un module ne se décharge que si son compteur Used by est à zéro.
  • sudo dmesg --follow est le meilleur point d'observation au moment où vous branchez un périphérique.

Les questions qui reviennent le plus souvent sur l'identification des périphériques sous Linux, avec des réponses courtes et directes.

  • Identifier ses disques de façon fiable : UUID, WWN, chemins /dev/disk/by-* et numéros de série pour ne plus jamais écraser le mauvais disque.
  • Les cgroups : comment le noyau limite l'accès aux ressources, y compris aux périphériques, mécanisme au cœur des conteneurs.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn