Que fait exactement 2>/dev/null ?

What Exactly Does 2 Dev Null Do



Que vous soyez un nouvel utilisateur Linux ou un programmeur bash expérimenté, il est fort probable que vous ayez rencontré la commande cryptique 2>/dev/null. Bien que cette commande semble techniquement complexe, son objectif est très simple. Il fait référence à un périphérique nul qui est utilisé pour supprimer les sorties de diverses commandes. Cet article détaillera chaque partie de la commande 2>/dev/null, expliquera son objectif et verra des exemples de son utilisation.

Périphérique nul - '/dev/null'

Tous les systèmes basés sur Linux ont une fonctionnalité appelée périphériques virtuels. Ces périphériques virtuels interagissent comme des fichiers réels dans le système d'exploitation. Le fonctionnement de ces appareils virtuels est similaire à celui des appareils réels ; ils sont utilisés pour écrire et lire des données. La principale différence entre les deux est que les données des périphériques virtuels sont fournies par le système d'exploitation.







/dev/null est un périphérique null, un type spécial de périphérique virtuel. Il est présent dans chaque système Linux, et le but de cet appareil est de supprimer tout ce qui lui est envoyé et de lire la fin de fichier (EOF). La plupart des périphériques virtuels sont utilisés pour lire des données ; cependant, /dev/null est unique car il est utilisé pour supprimer toutes les données qui y sont écrites. En termes simples, il agit comme un trou noir pour toutes les données qui y sont écrites dans les systèmes d'exploitation Linux.



Voyons maintenant les parties restantes de la commande 2 > /dev/null



Descripteur de fichier - « 2 »

Chaque exécution de commande sous Linux génère trois fichiers associés : une entrée standard, une sortie standard et des fichiers d'erreur standard. Le système d'exploitation Linux fait référence à chacun de ces fichiers avec un entier unique non négatif.





  • « 0 » pour l'entrée standard
  • « 1 » pour la sortie standard
  • « 2 » pour l'erreur standard

Les termes techniques pour les flux d'entrée standard, de sortie standard et d'erreur standard sont respectivement stdin, stdout et stderr.

Nous savons que le nombre « 2 » dans la commande « 2>/dev/null » fait référence au flux d'erreur standard (stderr).



Opérateur de redirection de fichiers – « > »

Le symbole « > » est connu comme l'opérateur de redirection de fichier. Son but est de diriger ce qui se trouve à sa gauche vers les commandes du côté droit. En termes plus simples, toute chaîne de données à gauche sera dirigée vers le côté droit de l'opérateur.

Jusqu'à présent, nous avons compris le but de chaque composant de la commande 2>/dev/null. Il envoie le flux d'erreurs à /dev/null, qui le supprime. En d'autres termes, cette commande est utilisée pour rejeter et supprimer les sorties d'erreur. Cependant, si vous êtes un vétéran expérimenté de Linux, vous pouvez consulter le contenu du fichier /dev/null en exécutant la commande suivante dans le terminal :

$ls -l /développeur/nul

Cette commande est généralement utilisée dans les scénarios où nous devons filtrer la sortie en fonction des erreurs ou lorsque nous voulons rejeter toute sortie associée à des descriptions erronées. À l'avenir, nous examinerons des exemples de son utilisation sur un système Ubuntu.

Utiliser 2>/dev/null

Puisque nous savons que la commande 2>/dev/null est utilisée pour éliminer les erreurs, elle sera toujours utilisée en conjonction avec d'autres commandes. Nous verrons une approche similaire dans les exemples suivants. Vous pouvez ouvrir le terminal soit en y accédant via le menu des applications, soit en utilisant le raccourci clavier Ctrl + Alt + T.

Dans le premier exemple, nous effectuerons une recherche dans le répertoire /sys/ pour une chaîne aléatoire (helloworld dans ce cas). La commande de recherche est grep et son argument sera la chaîne de recherche. Entrez la commande suivante pour rechercher votre chaîne.

$saisir -rBonjour le monde/système/

Cette commande de recherche est susceptible d'afficher de nombreuses erreurs car elle est utilisée sans accès root. Nous enverrons son flux d'erreurs à /dev/null en utilisant la commande 2>/dev/null pour éliminer ces erreurs.

$saisir -rBonjour le monde/système/ 2> /développeur/nul

Nous pouvons voir que la sortie de la commande est beaucoup plus nette et plus simple que la précédente. La raison en est que les erreurs sont supprimées en utilisant 2> /dev/null, et comme la commande grep n'a pu trouver aucun fichier correspondant à notre chaîne 'helloworld', elle n'affiche aucune sortie.

Pour mieux comprendre l'utilisation de /dev/null, nous examinerons l'exemple suivant de ping sur n'importe quel site Web (google.com dans notre cas). Vous pouvez envoyer un ping à google.com en exécutant la commande suivante :

$pingGoogle com

Si nous souhaitons exclure tous les pings échoués, nous pouvons utiliser la commande 2>/dev/null :

$pingGoogle com2> /développeur/nul

Dans ce cas, le flux d'erreur standard (qui affiche les pings échoués vers google.com) est envoyé au périphérique virtuel /dev/null qui les supprime.

Cependant, si nous souhaitons voir uniquement les pings échoués, nous pouvons exécuter la commande suivante :

$pingGoogle com1> /développeur/nul

Ici, nous envoyons le flux de sortie standard (stdout) au périphérique /dev/null qui le supprime. Par conséquent, il ne nous reste que les pings qui n'ont pas réussi à atteindre le serveur google.com. Cependant, dans notre cas, aucun ping n'a échoué. Nous pouvons également diriger stdout et stderr vers différents emplacements. Ceci est utile si nous voulons supprimer la sortie et stocker les erreurs dans un journal ou vice versa. Vous pouvez exécuter la commande suivante pour stocker les pings ayant échoué dans un journal d'erreurs tout en rejetant la sortie standard de la commande ping :

$pingGoogle com1> /développeur/nul2>error.log

Parfois, vous souhaiterez peut-être supprimer toutes les sorties d'une commande (y compris la sortie standard et les erreurs standard). Nous pouvons y parvenir en utilisant le périphérique /dev/null d'une manière légèrement différente. Vous pouvez taper la commande suivante pour supprimer toutes les sorties :

$pingGoogle com> /développeur/nul2> &1

Notez que l'ordre des commandes ici est très important. Après avoir exécuté la commande ping, « >/dev/null » indique au système de supprimer la sortie et « 2>&1 » dirige le flux d'erreur standard vers la sortie standard. De cette façon, toutes les sorties de la commande sont ignorées.

Conclusion

Nous avons disséqué la commande 2>/dev/null et des exemples simples dans cet article, et j'espère que vous comprenez maintenant ce que chaque élément fait. Cependant, ce n'est que la pointe de l'iceberg ; Les périphériques null sont utilisés de multiples façons dans la programmation bash. Certaines des utilisations les plus avancées incluent la vérification de l'existence des fichiers, l'automatisation des installations de packages et l'évitement des scripts de s'exécuter dans des exceptions indésirables.