Avant d’expliquer de façon simple ce que représente /dev/null, il faut faire juste un petit rappel simple.

Chaque processus a 3 flux:

  • un flux d’entré: STDIN(0)
  • un flux de sortie standard: STDOUT(1)
  • un flux de sortie d’erreur: STDERR(2)

c’est quoi > ou <

Le symbole > ou < permet la redirection d’une entité.
exemple:

cat toto > tata

Explication simpliste:
la commande cat redirige toto dans tata.
Si, on souhaite rediriger titi à la suite de toto dans tata sans écraser toto:

cat titi >> tata

Ou rediriger titi dans tata en écrasant toto:

cat titi > tata

Dans l’exemple: toto,titi et tata sont de simples fichiers.

Un exemple avec < :

mysql -u root -p MaBDD < MaBDDsauv.sql

Ici MaBDDsauv.sql est redirigé dans MaBDD, ce qui permet de restaurer la base de donnée MaBDD.

c’est quoi >/dev/null?

/dev/null représente le rien.
Ce rien peut être comparé à un trou noir dans l’espace.
Ce qui à pour conséquence, que chaque flux envoyé dans ce trou noir ne pourra jamais être récupéré.

exemple de commande avec >/dev/null dans un crontab:

***4* /home/fred/script/test.sh >/dev/null

Chaques taches planifiées dans un crontab envoient un mail à l’administrateur du système(ou root), pour éviter l’envoie systématique on redirige tout le flux STDOUT dans /dev/null.
A savoir, que lorsque /dev/null est utilisé sans précision, seule la sortie du flux STDOUT est concernée.
Donc, si une erreur se produit l’administrateur sera prévenue grâce à la sortie STDERR.

c’est quoi < /dev/null?

Dans un script, il se peut qu’une commande est besoin d’une intervention humaine pour répondre à une question généralement yes ou no(y/n).

  • Forcer la réponse à yes

Ajouter l’option -f, exemple:

cp -f ficher1 directory/

La copie du fichier1 dans le répertoire directory est forcée.

  • Forcer la réponse à no

< /dev/null sera utilisé, exemple:

cp  ficher1 /directory </dev/null

Si le fichier1 existe déjà dans le répertoire, avec l’option < /dev/null, le script n’écrasera pas le fichier1 déjà présent dans directory.

c’est quoi /dev/null 2>&1

2>&1 redirige la sortie d’erreur(STDERR) vers la sortie standard(STDOUT) et la sortie STDOUT dans /dev/null.

exemple en reprenant celui de la tache cron:

*4*** /home/fred/script/test.sh >/dev/null 2>&1

Dans ce cas, l’administrateur ou root ne sera jamais si la commande c’est bien exécutées ou pas.
Sauf, si le test est prévue dans le scripte test.sh.

9 Comments

  1. Jute un simple merci pour ce billet.
    Surtout la partie /dev/null 2>&1 qui n’est pas toujours bien expliqué (voire pas du tout dans tout les tutos crontab)

    Merci encore :)

  2. en gros /dev/null c’est comme une corbeil?
    et ouai merci pour les explications de STDIN STDOUT et STDERR

  3. Je connaissais, mais j’avais besoin de connaître un point précis lors d’une utilisation en conjonction avec tee
    J’utilise par exemple la commande suivante:
    harbour toto.prg 2>&1 |tee -a test.log
    J’ai remarqué que les erreurs ne suivent pas dans test.log.
    Est-ce normal ?
    Faudrait-il utiliser:
    harbour toto.prg 2>>test.log |tee -a test.log
    ou
    harbour toto.prg 1>> test.log 2>>test.log

    Merci pour tous ces articles passionnants et très didactiques.

  4. /dev/null c’est le néant, tu peux même l’envoyer dans un fichier rempli de texte pour le vider de son contenu, ex. :
    dev/null > /tmp/users.txt

  5. Dans ce cas, l’administrateur ou root ne saura jamais si la commande c’est bien exécutées ou pas.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.