Que signifie «Tout est un fichier» dans Linux?
L'une des caractéristiques déterminantes de Linux et d'autres systèmes d'exploitation de type UNIX est que «tout est un fichier». C'est une simplification excessive, mais comprendre ce que cela signifie vous aidera à comprendre le fonctionnement de Linux..
Beaucoup de choses sur Linux apparaissent dans votre système de fichiers, mais ce ne sont pas réellement des fichiers. Ce sont des fichiers spéciaux qui représentent les périphériques matériels, les informations système et d'autres éléments, notamment un générateur de nombres aléatoires..
Ces fichiers spéciaux peuvent être situés dans des pseudo-systèmes ou des systèmes de fichiers virtuels tels que / dev, qui contient des fichiers spéciaux représentant les périphériques, et / proc, qui contient des fichiers spéciaux représentant des informations système et de processus..
/ proc
Par exemple, supposons que vous souhaitiez trouver des informations sur votre processeur. Le répertoire / proc contient un fichier spécial - / proc / cpuinfo - qui contient cette information..
Vous n'avez pas besoin d'une commande spéciale qui vous indique les informations relatives à votre processeur. Vous pouvez simplement lire le contenu de ce fichier à l'aide de n'importe quelle commande standard fonctionnant avec des fichiers en texte brut. Par exemple, vous pouvez utiliser la commande cat / proc / cpuinfo pour imprimer le contenu de ce fichier sur le terminal - pour imprimer les informations de votre CPU sur le terminal. Vous pouvez même ouvrir / proc / cpuinfo dans un éditeur de texte pour afficher son contenu..
N'oubliez pas que / proc / cpuinfo n'est pas un fichier texte contenant ces informations. Le noyau Linux et le système de fichiers proc nous les exposent sous forme de fichier. Cela nous permet d’utiliser des outils familiers pour visualiser et utiliser les informations..
Le répertoire / proc contient également d'autres fichiers similaires, par exemple:
- / proc / uptime - Expose la disponibilité de votre noyau Linux - en d’autres termes, combien de temps votre système est-il allumé sans avoir à s’arrêter.
- / proc / version - Expose la version de votre noyau Linux.
/ dev
Dans le répertoire / dev, vous trouverez des fichiers représentant des périphériques, ainsi que des fichiers représentant d'autres éléments particuliers. Par exemple, / dev / cdrom est votre lecteur de CD-ROM. / dev / sda représente votre premier disque dur, alors que / dev / sda1 représente la première partition de votre premier disque dur.
Voulez-vous monter votre CD-ROM? Exécutez la commande mount et spécifiez / dev / cdrom en tant que périphérique que vous souhaitez monter. Vous voulez partitionner votre premier disque dur? Exécutez un utilitaire de partitionnement de disque et spécifiez / dev / sda en tant que disque dur à modifier. Vous voulez formater la première partition sur votre premier disque dur? Exécutez une commande de formatage et indiquez-lui de formater / dev / sda1.
Comme vous pouvez le constater, exposer ces périphériques dans le système de fichiers présente des avantages. Le système de fichiers fournit un «espace de noms» cohérent que toutes les applications peuvent utiliser pour adresser et accéder aux périphériques..
/ dev / null, / dev / random et / dev / zero
Le système de fichiers / dev ne contient pas que des fichiers représentant des périphériques physiques. Voici trois des dispositifs spéciaux les plus remarquables qu'il contient:
- / dev / null - Supprime toutes les données qui y sont écrites - considérez-la comme une poubelle ou un trou noir. Si vous voyez un commentaire vous dire d’envoyer des plaintes à / dev / null, c’est une façon géniale de dire «jetez-les à la poubelle».
- / dev / random - Produit un caractère aléatoire en utilisant le bruit de l'environnement. C'est un générateur de nombres aléatoires que vous pouvez exploiter.
- / dev / zero - Produit des zéros - un flux constant de zéros.
Si vous considérez ces trois fichiers comme des fichiers, vous ne verrez aucune utilisation. Au lieu de cela, pensez à eux comme des outils.
Par exemple, par défaut, les commandes Linux génèrent des messages d'erreur et d'autres sorties qu'elles impriment sur la sortie standard, généralement le terminal. Si vous voulez exécuter une commande sans vous soucier de sa sortie, vous pouvez rediriger cette sortie vers / dev / null. La redirection de la sortie d'une commande vers / dev / null la supprime immédiatement. Au lieu que chaque commande implémente son propre «mode silencieux», vous pouvez utiliser cette méthode avec n’importe quelle commande..
commande> / dev / null
Si vous vouliez une source aléatoire - par exemple, pour générer une clé de cryptage, vous n'avez pas besoin d'écrire votre propre générateur de nombres aléatoires - vous pouvez utiliser / dev / random.
Pour effacer le contenu d'un disque dur en y écrivant des 0, vous n'avez pas besoin d'un utilitaire spécial dédié à la remise à zéro d'un lecteur. Vous pouvez utiliser les utilitaires standard et / dev / zero. Par exemple, le jj La commande lit à partir d'un emplacement et écrit dans un autre emplacement. La commande suivante lira les zéros de / dev / zero et les écrira directement sur la première partition de disque dur de votre système, en effaçant complètement son contenu..
(Attention: Cette commande effacera toutes les données de votre première partition si vous l’exécutez. N'exécutez cette commande que si vous souhaitez détruire des données.)
dd if = / dev / zero of = / dev / sda1
Ici, nous utilisons dd avec des fichiers spéciaux (/ dev / zero et / dev / sda1), mais nous pourrions aussi utiliser dd pour lire et écrire dans des fichiers réels. La même commande fonctionne aussi bien pour manipuler les périphériques directement que pour travailler avec des fichiers.
Clarification
En pratique, il est plus précis de dire que «tout est un flux d'octets» que «tout est un fichier». / Dev / random n'est pas un fichier, mais bien un flux d'octets. Et, bien que techniquement, ces éléments ne soient pas des fichiers, ils sont accessibles dans le système de fichiers - le système de fichiers est un «espace de noms» universel où tout est accessible. Vous souhaitez accéder à un générateur de nombres aléatoires ou lire directement à partir d'un appareil? Vous trouverez les deux dans le système de fichiers; aucune autre forme d'adressage nécessaire.
Bien sûr, certaines choses ne sont pas réellement des fichiers - les processus exécutés sur votre système ne font pas partie du système de fichiers. "Tout est un fichier" est inexact, mais beaucoup de choses se comportent comme des fichiers.