Que fait exactement 2> / dev / null?

Que fait exactement 2> / dev / null?
Que vous soyez un nouvel utilisateur Linux ou un programmeur de bash expérimenté, il est très 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 se réfère à un appareil nul qui est utilisé pour supprimer les sorties de diverses commandes. Cet article décomposera chaque partie de la commande 2> / dev / null, expliquera son objectif et voir des exemples de la façon dont il est utilisé.

Appareil nul - '/ dev / null'

Tous les systèmes basés sur Linux ont une fonctionnalité appelée dispositifs virtuels. Ces appareils virtuels interagissent comme des fichiers réels dans le système d'exploitation. Le fonctionnement de ces dispositifs virtuels est similaire aux 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 dispositifs virtuelles sont fournies par le système d'exploitation.

/ dev / null est un appareil 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 jeter tout ce qui lui est envoyé et de lire la fin du fichier (EOF). La plupart des appareils virtuels sont utilisés pour lire les données; Cependant, / dev / null est unique car il est utilisé pour supprimer toutes les données qui lui sont écrites. En termes simples, il agit comme un trou noir pour toutes les données qui lui sont écrites dans les systèmes d'exploitation Linux.

Maintenant, jetons un coup d'œil aux parties restantes de la commande 2> / dev / null

Descripteur de fichiers - '2'

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

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

Les termes techniques pour les entrées standard, la sortie standard et les flux 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 est à sa gauche aux commandes du côté droit. En mots 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 derrière chaque composant de la commande 2> / dev / null. Il envoie le flux d'erreur à / dev / null, qui le rejette. En d'autres termes, cette commande est utilisée pour éliminer et supprimer les sorties d'erreur. Cependant, si vous êtes un vétéran Linux expérimenté, vous pouvez consulter le contenu du fichier / dev / null en exécutant la commande suivante dans le terminal:

$ ls -l / dev / null

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.

En utilisant 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.

$ grep -r helloworld / sys /

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

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

Nous pouvons voir que la sortie de la commande est beaucoup plus nette et plus simple que la dernière. La raison en est que les erreurs sont supprimées en utilisant 2> / dev / null, et comme la commande grep n'a pas pu trouver de fichier correspondant à notre chaîne `` Helloworld '', il n'affiche aucune sortie.

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

$ ping google.com

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

$ ping google.com 2> / dev / null

Dans ce cas, le flux d'erreur standard (qui montre les pings ratés à Google.com) est envoyé au périphérique virtuel / dev / null qui les élimine.

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

$ ping google.com 1> / dev / null

Ici, nous envoyons le flux de sortie standard (STDOUT) sur le périphérique / dev / null qui le rejette. Par conséquent, nous ne nous retrouvons avec les pings qui n'ont pas atteint le Google.serveur COM. Cependant, dans notre cas, il n'y a pas eu de pings ratés. Nous pouvons également diriger STDOUT et STDERR à différents endroits. Ceci est utile si nous voulons éliminer la sortie et stocker les erreurs dans un journal ou vice versa. Vous pouvez exécuter la commande suivante pour stocker les pings échoués dans un journal d'erreur tout en rejetant la sortie standard de la commande ping:

$ ping google.com 1> / dev / null 2> Erreur.enregistrer

À l'occasion, vous voudrez 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:

$ ping google.com> / dev / null 2> & 1

Notez que l'ordre des commandes ici est très important. Après avoir exécuté la commande ping, '> / dev / null' 'dit au système de supprimer la sortie, et' 2> & 1 'dirige le flux d'erreur standard vers la sortie standard. De cette façon, toute sortie de la commande est jetée.

Conclusion

Nous avons disséqué la commande 2> / dev / null et des exemples simples de cet article, et j'espère que vous comprenez maintenant ce que fait chaque morceau. Cependant, ce n'est que la pointe de l'iceberg; Les dispositifs nuls sont utilisés de plusieurs manières dans la programmation bash. Certaines des utilisations les plus avancées incluent la vérification de l'existence du fichier, l'automatisation des installations de packages et l'évitement des scripts de se faire des exceptions indésirables.