Recherche de site Web

/dev/null dans Linux


/dev/null dans Linux est un fichier de périphérique nul. Cela rejettera tout ce qui y est écrit et renverra EOF lors de la lecture.

Ceci est un hack en ligne de commande qui agit comme un aspirateur, qui aspire tout ce qu'on lui lance.

Jetons un coup d'œil pour comprendre ce que cela signifie et ce que nous pouvons faire avec ce fichier.

Propriétés /dev/null

Ceci renverra un caractère de fin de fichier (EOF) si vous essayez de le lire en utilisant la commande cat.

cat /dev/null

Ceci est un fichier valide, qui peut être vérifié en utilisant

stat /dev/null

Cela me donne une sortie de

  File: /dev/null
  Size: 0               Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d   Inode: 5           Links: 1     Device type: 1,3
Access: (0666/crw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-02-04 13:00:43.112464814 +0530
Modify: 2020-02-04 13:00:43.112464814 +0530
Change: 2020-02-04 13:00:43.112464814 +0530

Cela montre que ce fichier a une taille de 0 octet, qu'aucun bloc ne lui est attribué. Les permissions du fichier sont également définies de telle manière que tout le monde peut le lire/écrire, mais ne peut pas l'exécuter.

Puisqu'il ne s'agit pas d'un fichier exécutable, nous ne pouvons pas utiliser le piping avec l'opérateur | pour rediriger vers /dev/null. Le seul moyen est d'utiliser les redirections de fichiers (>, >>, ou <, <<).

Le diagramme ci-dessous montre que /dev/null est en effet un fichier valide.

Tables de fichiers

Examinons maintenant quelques cas d'utilisation courants de /dev/null.

Redirection vers /dev/null sous Linux

Nous pouvons éliminer toute sortie d'un script que nous utilisons en la redirigeant vers /dev/null.

Par exemple, nous pouvons essayer de jeter les messages echo en utilisant cette astuce.

echo 'Hello from JournalDev' > /dev/null

Vous n'obtiendrez aucune sortie car elle est supprimée !

Essayons d’exécuter une commande incorrectement et de rediriger sa sortie vers /dev/null.

cat --INCORRECT_OPTION > /dev/null

Nous obtenons toujours une sortie comme celle-ci :

cat: unrecognized option '--INCORRECT'
Try 'cat --help' for more information.

Pourquoi cela se produit-il ? C'est parce que les messages d'erreur proviennent de stderr, mais nous ne supprimons que la sortie de stdout.

Nous devons également prendre en compte stderr.

Ignorer les messages d'erreur

Redirigeons le stderr vers /dev/null, ainsi que le stdout. Nous pouvons utiliser le descripteur de fichier pour stderr(=2) pour cela.

cat --INCORRECT_OPTION > /dev/null 2>/dev/null

Cela nous donnera ce dont nous avons besoin !

Il existe une autre façon de faire la même chose ; en redirigeant d'abord stderr vers stdout, puis en redirigeant stdout vers /dev/null.

La syntaxe pour cela sera :

command > /dev/null 2>&1

Remarquez le 2>&1 à la fin. Nous redirigeons stderr(2) vers stdout(1). Nous utilisons &1 pour indiquer au shell que le fichier de destination est un descripteur de fichier et non un nom de fichier.

cat --INCORRECT_OPTION > dev/null 2>&1

Donc si nous utilisons 2>1, nous ne redirigerons que stderr vers un fichier appelé 1. Ce n'est pas ce que nous voulons !

Conclusion

Espérons que cela clarifie un peu les choses, afin que vous puissiez maintenant utiliser /dev/null sous Linux, en sachant ce que cela signifie ! N'hésitez pas à poser des questions dans la section des commentaires ci-dessous.

Références

  • Question StackOverflow