GNU/Linux >> Tutoriels Linux >  >> Linux

/dev/null sous Linux

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

Il s'agit d'un hack en ligne de commande qui agit comme un vide, qui aspire tout ce qui lui est lancé.

Voyons ce que cela signifie et ce que nous pouvons faire avec ce fichier.

Propriétés/dev/null

Cela renverra une fin de fichier (EOF ) caractère si vous essayez de le lire à l'aide de la commande cat.

cat /dev/null

Il s'agit d'un fichier valide, qui peut être vérifié à l'aide de

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, aucun bloc ne lui est alloué. Les autorisations de fichier sont également définies pour que n'importe qui puisse y lire/écrire, mais ne puisse pas l'exécuter.

Comme il ne s'agit pas d'un fichier exécutable, nous ne pouvons pas utiliser de tuyauterie en utilisant | 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 bien un fichier valide.

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

Redirection vers /dev/null sous Linux

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

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

echo 'Hello from JournalDev' > /dev/null

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

Essayons d'exécuter une commande de manière incorrecte et dirigeons 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 arrive-t-il? C'est parce que les messages d'erreur proviennent de stderr , mais nous supprimons uniquement la sortie de stdout .

Nous devons prendre stderr en compte également.

Supprimer les messages d'erreur

Redirigeons le stderr vers /dev/null , ainsi que 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 ) à stdout(1 ). Nous utilisons &1 pour mentionner 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 dans un fichier nommé 1 . Ce n'est pas ce que nous voulons !

Conclusion

J'espère que cela clarifie un peu les choses, de sorte que vous puissiez maintenant utiliser /dev/null sous Linux, sachant ce que cela signifie ! N'hésitez pas à poser des questions dans la section des commentaires ci-dessous.

Références

  • Question StackOverflow

Linux
  1. Comment générer un mot de passe aléatoire sous Linux en utilisant /dev/random

  2. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  3. Quand utiliser /dev/random contre /dev/urandom ?

  4. Linux – Comment créer /dev/null ?

  5. Que sont les fichiers /dev/zero et /dev/null sous Linux

tty (/dev/tty ) vs pts (/dev/pts) sous Linux

Qu'est-ce que '/dev/null 2&1' sous Linux

Comment rediriger la sortie vers /dev/null sous Linux

Qu'est-ce que /dev/null sous Linux

>&- est-il plus efficace que>/dev/null ?

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0