Linux est un système d’exploitation intéressant qui héberge certains périphériques virtuels à de nombreuses fins. En ce qui concerne les programmes exécutés dans le système, ces périphériques virtuels agissent comme s’il s’agissait de fichiers réels. Les outils peuvent demander et alimenter des données à partir de ces sources. Les données sont générées par le système d’exploitation au lieu de les lire depuis un disque.
Un tel exemple est /dev/null. C’est un fichier spécial qui est présent dans chaque système Linux. Cependant, contrairement à la plupart des autres fichiers virtuels, au lieu de lire, il est utilisé pour écrire. Tout ce que vous écrivez sur /dev/null sera jeté, oublié dans le vide. Il est connu comme le périphérique nul dans un système UNIX.
Pourquoi voudriez-vous jeter quelque chose dans le vide ? Vérifions ce qu’est /dev/null et son utilisation.
Prérequis
Avant de plonger profondément dans l’utilisation de /dev/null, nous devons avoir une compréhension claire du flux de données stdout et stderr. Consultez ce guide approfondi sur stdin, stderr, et stdout.
Faisons un rapide rafraîchissement. Chaque fois qu’un utilitaire en ligne de commande est exécuté, il génère deux sorties. La sortie va sur stdout et l’erreur (si elle est générée) va sur stderr. Par défaut, ces deux flux de données sont associés au terminal.
Par exemple, la commande suivante imprimera la chaîne de caractères entre les doubles guillemets. Ici, la sortie est stockée dans stdout.
La commande suivante nous montrera l’état de sortie de la commande exécutée précédemment.
Comme la commande précédente s’est exécutée avec succès, l’état de sortie est 0. Sinon, l’état de sortie sera différent. Que se passe-t-il lorsque vous essayez d’exécuter une commande invalide ?
$ echo $ ?
Maintenant, nous devons connaître le descripteur de fichier. Dans l’écosystème UNIX, il s’agit de valeurs entières attribuées à un fichier. Les deux stdout (descripteur de fichier = 1) et stderr (descripteur de fichier = 2) ont un descripteur de fichier spécifique. En utilisant le descripteur de fichier (1 et 2 dans cette situation), nous pouvons rediriger le stdout et le stderr vers d’autres fichiers.
Pour commencer, l’exemple suivant redirigera le stdout de la commande echo vers un fichier texte. Ici, nous n’avons pas spécifié le descripteur de fichier. S’il n’est pas spécifié, bash utilisera stdout par défaut.
La commande suivante redirigera le stderr vers un fichier texte.
Utilisation de /dev/null
Redirection de la sortie vers /dev/null
Maintenant, nous sommes prêts à apprendre comment utiliser /dev/null. Tout d’abord, vérifions comment filtrer la sortie normale et l’erreur. Dans la commande suivante, grep va essayer de rechercher une chaîne de caractères (hello, dans ce cas) dans le répertoire « /sys ».
Cependant, il va générer beaucoup d’erreurs car sans privilège root, grep ne peut pas accéder à un certain nombre de fichiers. Dans un tel cas, il résultera des erreurs « Permission refusée ». Maintenant, en utilisant la redirection, nous pouvons obtenir une sortie plus claire.
La sortie semble bien meilleure, non ? Rien ! Dans ce cas, grep n’a pas accès à beaucoup de fichiers et ceux qui sont accessibles n’ont pas la chaîne « hello ».
Dans l’exemple suivant, nous allons faire un ping à Google.
Mais nous ne voulons pas voir tous ces résultats de ping réussis. Au lieu de cela, nous voulons seulement nous concentrer sur les erreurs lorsque le ping n’a pas pu atteindre Google. Comment faisons-nous cela ?
Ici, le contenu de stdout est déversé dans /dev/null, ne laissant que les erreurs.
Rediriger toute la sortie vers /dev/null
Dans certaines situations, la sortie peut ne pas être utile du tout. En utilisant la redirection, nous pouvons vider toute la sortie dans le vide.
Cassons un peu cette commande. D’abord, nous vidons tout le stdout vers /dev/null. Ensuite, dans la deuxième partie, nous disons à bash d’envoyer stderr vers stdout. Dans cet exemple, il n’y a rien à sortir. Cependant, si vous êtes confus, vous pouvez toujours vérifier si la commande s’est exécutée avec succès.
La valeur est 2 car la commande a généré beaucoup d’erreurs.
Si vous avez tendance à oublier le descripteur de fichier de stdout et stderr, la commande suivante fera très bien l’affaire. C’est un format plus généralisé de la commande précédente. Les deux stdout et stderr seront redirigés vers /dev/null.
Autres exemples
C’est un exemple intéressant. Vous vous souvenez de l’outil dd ? C’est un outil puissant pour convertir et copier des fichiers. Apprenez-en plus sur dd. En utilisant dd, nous pouvons tester la vitesse de lecture séquentielle de votre disque. Bien sûr, il ne s’agit pas d’une mesure précise. Cependant, pour un test rapide, c’est assez utile.
Ici, j’ai utilisé l’ISO Ubuntu 18.04.4 comme gros fichier.
De la même manière, vous pouvez également tester la vitesse de téléchargement de votre connexion internet.
Pensées finales
Espérons que vous ayez une compréhension claire de ce qu’est ce fichier /dev/null. C’est un périphérique spécial qui, si on y écrit, jette et si on y lit, lit null. Le véritable potentiel de cette fonctionnalité intéressante réside dans des scripts bash intéressants.
Vous êtes intéressé par les scripts bash ? Consultez le guide du débutant sur les scripts bash.
Bonheur!