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.

$ echo « Hello World »

La commande suivante nous montrera l’état de sortie de la commande exécutée précédemment.

$ echo $ ?

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 ?

$ adfadsf
$ 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.

$ echo « Hello World » > log.txt

La commande suivante redirigera le stderr vers un fichier texte.

$ asdfadsa 2> error.txt

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 ».

$ grep -r hello /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.

$ grep -r hello /sys/ 2> /dev/null

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.

$ ping google.com

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 ?

$ ping google.com 1> /dev/null

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.

$ grep -r hello /sys/ > /dev/null 2>&1

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.

$ echo $ ?

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.

$ grep -r hello /sys/ &> /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.

$ dd if=<big_file> of=/dev/null status=progress bs=1M iflag=direct

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.

$ wget -O /dev/null <big_file_link>

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!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.