Presque tous les fichiers sous /dev
sont des fichiers de périphérique . Alors que la lecture et l’écriture dans un fichier standard stocke les données sur un disque ou un autre système de fichiers, l’accès à un fichier de périphérique communique avec un pilote du noyau, qui communique généralement à son tour avec un élément matériel (un périphérique matériel, d’où son nom).
Il existe deux types de fichiers de périphérique: les périphériques de bloc (indiqués par b
le premier caractère de la sortie de ls -l
) et les périphériques de caractères (indiqués par c
). La distinction entre les blocs et les périphériques de caractères n’est pas totalement universelle. Les périphériques en mode bloc sont des éléments tels que les disques, qui se comportent comme des fichiers volumineux de taille fixe: si vous écrivez un octet avec un certain décalage et lisez plus tard à partir du périphérique avec ce décalage, vous récupérez cet octet. Les périphériques de type caractères sont à peu près tout ce qui se passe où l'écriture d'un octet a un effet immédiat (par exemple, il est émis sur une ligne série) et la lecture d'un octet a également un effet immédiat (par exemple, elle est lue depuis le port série).
La signification d'un fichier de périphérique est déterminée par son numéro et non par son nom (le nom est important pour les applications mais pas pour le noyau). Le numéro est en fait deux chiffres: le numéro majeur indique quel pilote est responsable de ce périphérique et le numéro mineur permet à un pilote de conduire plusieurs périphériques¹. Ces numéros apparaissent dans la ls -l
liste, où vous trouverez normalement la taille du fichier. Par exemple brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→ cet appareil est majeur 8, mineur 0.
Certains fichiers de périphérique sous /dev
ne correspondent pas à des périphériques matériels. Celui qui existe sur tous les systèmes Unix est /dev/null
; son écriture n'a aucun effet et sa lecture ne renvoie aucune donnée. C'est souvent pratique dans les scripts shell, quand vous voulez ignorer le résultat d'une commande ( >/dev/null
) ou exécuter une commande sans input ( </dev/null
). D'autres exemples courants sont /dev/zero
(qui renvoie des octets nuls ad infinitum ) /dev/urandom
(qui renvoie des octets aléatoires ad infinitum ).
Quelques fichiers de périphérique ont une signification qui dépend du processus qui y accède. Par exemple, /dev/stdin
désigne l'entrée standard du processus en cours; L'ouverture de ouvre a à peu près le même effet que d'ouvrir le fichier d'origine ouvert en tant qu'entrée standard du processus. De manière similaire, /dev/tty
désigne le terminal auquel le processus est connecté. De nos jours, sous Linux, les /dev/stdin
amis ne sont pas implémentés comme des périphériques de caractères, mais plutôt comme des liens symboliques vers un mécanisme plus général qui permet de référencer tous les descripteurs de fichiers (par opposition à seulement 0, 1 et 2 dans la méthode traditionnelle); par exemple /dev/stdin
est un lien symbolique vers /proc/self/fd/0
. Voir Quel est le lien entre / dev / fd et / proc / self / fd /? .
Vous trouverez un certain nombre de liens symboliques sous /dev
. Cela peut se produire pour des raisons historiques: un fichier de périphérique a été déplacé d'un nom à un autre, mais certaines applications utilisent toujours l'ancien nom. Par exemple, /dev/scd0
est un lien symbolique /dev/sr0
sous Linux; les deux désignent le premier périphérique CD. Une autre raison de liens symboliques est l' organisation: sous Linux, vous trouverez vos disques et partitions de disque en plusieurs endroits: /dev/sda
et /dev/sda1
et les amis (chaque disque désigné par une lettre arbitraire, et les partitions en fonction de la mise en page de la partition), /dev/disk/by-id/*
(disques désignés par un numéro de série unique), /dev/disk/by-label/*
(partitions avec un système de fichiers, désignées par une étiquette choisie par l'homme); et plus. Les liens symboliques sont également utilisés lorsqu'un nom de périphérique générique peut être l'un des plusieurs; par exemple/dev/dvd
Il peut s'agir d'un lien symbolique vers /dev/sr0
, ou d'un lien vers /dev/sr1
si vous avez deux lecteurs de CD et que le second doit être le lecteur de DVD par défaut.
Enfin, il existe quelques autres fichiers que vous pourriez trouver sous /dev
, pour des raisons traditionnelles. Vous ne trouverez pas la même chose sur tous les systèmes. Sur la plupart des ordinateurs, /dev/log
est un socket utilisé par les programmes pour émettre des messages de journal. /dev/MAKEDEV
est un script qui crée des entrées dans /dev
. Sur les systèmes Linux modernes, les entrées /dev/
sont créées automatiquement par udev , obsolète MAKEDEV
.
¹ En réalité, cela n’est plus vrai sous Linux, mais ce détail n’a d’importance que pour les auteurs de pilotes de périphérique.