Qu'est-ce que / dev / null et comment l'utiliser

Qu'est-ce que / dev / null et comment l'utiliser
Linux est un système d'exploitation intéressant qui héberge certains appareils virtuels à de nombreuses fins. En ce qui concerne les programmes exécutés dans le système, ces appareils virtuels agissent comme s'il s'agissait de vrais fichiers. Les outils peuvent demander et alimenter les données de ces sources. Les données sont générées par le système d'exploitation au lieu de les lire à partir d'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 à / dev / null sera jeté, oublié dans le vide. Il est connu comme le dispositif nul dans un système Unix.

Pourquoi voudriez-vous jeter quelque chose dans le vide? Voyons ce qu'est / dev / null et son utilisation.

Conditions préalables

Avant de plonger profondément dans l'utilisation de / dev / null, nous devons avoir une compréhension claire du stdout et stderr flux de données. Consultez ce guide approfondi sur stdin, stderr, et stdout.

Allons un rafraîchissement rapide. Chaque fois qu'un utilitaire de ligne de commande est exécuté, il génère deux sorties. La sortie va à stdout et l'erreur (si générée) va à stderr. Par défaut, ces deux flux de données sont associés au terminal.

Par exemple, la commande suivante imprimera la chaîne dans le double devis. Ici, la sortie est stockée dans stdout.

$ Echo "Hello World"

La commande suivante nous montrera l'état de sortie de la commande précédemment run.

$ echo $?

Comme la commande précédente s'est déroulée avec succès, le statut de sortie est 0. Sinon, le statut de sortie sera différent. Que se passe-t-il lorsque vous essayez d'exécuter une commande non valide?

$ adfadsf
$ echo $?

Maintenant, nous devons connaître le descripteur de fichiers. Dans l'écosystème Unix, ce sont des valeurs entières affectées à un fichier. Les deux stdout (Fichier Descriptor = 1) et stderr (Descriptor de fichier = 2) ont un descripteur de fichiers spécifique. En utilisant le descripteur de fichier (1 et 2 dans cette situation), nous pouvons rediriger le stdout et stderr à d'autres fichiers.

Pour le démarreur, l'exemple suivant redirigera le stdout de la commande echo dans un fichier texte. Ici, nous n'avons pas précisé le descripteur de fichier. Si cela n'est pas spécifié, Bash utilisera stdout par défaut.

$ echo "Hello World"> Journal.SMS

La commande suivante redirigera le stderr à un fichier texte.

$ asdfadsa 2> Erreur.SMS

Utilisation / dev / null

Rediriger la sortie vers / dev / null

Maintenant, nous sommes prêts à apprendre à utiliser / dev / null. Tout d'abord, vérifions comment filtrer la sortie et l'erreur normales. Dans la commande suivante, Grep essaiera de rechercher une chaîne (bonjour, dans ce cas) dans le répertoire «/ sys».

$ grep -r bonjour / sys /

Cependant, il générera beaucoup d'erreur car sans privilège racine, Grep ne peut pas accéder à un certain nombre de fichiers. Dans un tel cas, cela entraînera des erreurs de «permission refusée». Maintenant, en utilisant la redirection, nous pouvons obtenir une sortie plus claire.

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

La sortie semble beaucoup mieux, juste? Rien! Dans ce cas, Grep n'a pas accès à beaucoup de fichiers et ceux qui sont accessibles n'ont pas la chaîne «bonjour».

Dans l'exemple suivant, nous pingons Google.

$ ping google.com

Cependant, 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 Ping n'a pas pu atteindre Google. Comment fait-on cela?

$ ping google.com 1> / dev / null

Ici, le contenu de stdout sont jetés vers / 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 bonjour / sys /> / dev / null 2> & 1

Brimons un peu cette commande. Tout d'abord, nous jetons tous les stdout à / dev / null. Ensuite, dans la deuxième partie, nous disons à Bash d'envoyer stderr pour stdout. Dans cet exemple, il n'y a rien à produire. Cependant, si vous êtes confus, vous pouvez toujours vérifier si la commande s'est déroulée avec succès.

$ echo $?

La valeur est 2 parce que la commande a généré de nombreuses erreurs.

Si vous avez tendance à oublier le descripteur de fichier de stdout et stderr, La commande suivante fera très bien. C'est un format plus généralisé de la commande précédente. Les deux stdout et stderr sera redirigé vers / dev / null.

$ grep -r bonjour / sys / &> / dev / null

Autres exemples

Celui-ci est intéressant. N'oubliez pas l'outil DD? C'est un outil puissant pour convertir et copier des fichiers. En savoir plus sur DD. En utilisant DD, nous pouvons tester la vitesse de lecture séquentielle de votre disque. Bien sûr, ce n'est pas une mesure précise. Cependant, pour un test rapide, c'est assez utile.

$ dd if = de = / dev / null status = progress bs = 1m iflag = direct

Ici, j'ai utilisé l'ubuntu 18.04.4 ISO comme le gros fichier.

De même, vous pouvez également tester la vitesse de téléchargement de votre connexion Internet.

$ wget -o / dev / null

Dernières pensées

J'espère que vous avez une compréhension claire de ce qu'est ce fichier Dev / Null. C'est un appareil spécial qui, s'il y a été écrit, rejette et s'il est lu, lit NULL. Le véritable potentiel de cette fonctionnalité intéressante est dans des scripts de bash.

Êtes-vous intéressé par les scripts bash? Consultez le Guide du débutant pour les scripts de bash.

Apprécier!