web-dev-qa-db-fra.com

Qu'est-ce que / dev / null 2> & 1?

J'ai trouvé ce morceau de code dans /etc/cron.daily/apf

#!/bin/bash  
/etc/apf/apf -f >> /dev/null 2>&1  
/etc/apf/apf -s >> /dev/null 2>&1  

Il rince et recharge le pare-feu.
Je ne comprends pas la partie >> /dev/null 2>&1.

Quel est le but d'avoir cela dans le cron? Cela annule les règles de mon pare-feu. Puis-je supprimer ce travail cron en toute sécurité?

190
resting

>> /dev/null redirige la sortie standard (stdout) vers /dev/null, qui la rejette.

(Le >> semble plutôt superflu, car >> signifie ajouter tandis que > signifie tronquer et écrire, et soit ajouter à, soit écrire sur /dev/null a le même effet net. I généralement, utilisez simplement > pour cette raison.)

2>&1 redirige l'erreur standard (2) vers la sortie standard (1), qui la supprime également car la sortie standard a déjà été redirigée.

293
zigg

Décomposons l'instruction >> /dev/null 2>&1 en plusieurs parties:


Partie 1: >> redirection de sortie

Ceci est utilisé pour rediriger la sortie du programme et ajouter la sortie à la fin du fichier. Plus ...


Partie 2: /dev/null fichier spécial

Ceci est un fichier spécial de pseudo-périphériques.

La commande ls -l /dev/null vous donnera les détails de ce fichier:

crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null

Avez-vous observé crw? Ce qui signifie qu'il s'agit d'un pseudo-device fichier de type character-special-file qui fournit un accès en série.

/dev/null accepte et supprime toutes les entrées; ne produit aucune sortie (retourne toujours une indication de fin de fichier sur une lecture). Référence: Wikipedia


Partie 3: 2>&1 descripteur de fichier

Lorsque vous exécutez un programme, le système d'exploitation ouvre toujours trois fichiers STDIN, STDOUT et STDERR, comme nous le savons chaque fois qu'un fichier est ouvert, système d'exploitation (à partir de kernel =) renvoie un entier non négatif appelé Descripteur de fichier. Le descripteur de fichier pour ces fichiers est respectivement 0, 1 et 2.

Donc, 2>&1 dit simplement rediriger STDERR vers STDOUT

& signifie que tout ce qui suit est un descripteur de fichier, pas un nom de fichier.

En bref, en utilisant cette commande, vous dites à votre programme de ne pas crier pendant l'exécution.

Quelle est l'importance d'utiliser 2>&1?

Si vous ne voulez produire aucune sortie, même en cas d'erreur dans le terminal. Pour expliquer plus clairement, considérons l'exemple suivant:

$ ls -l > /dev/null

Pour la commande ci-dessus, aucune sortie n'a été imprimée dans le terminal, mais que se passe-t-il si cette commande génère une erreur:

$ ls -l file_doesnot_exists > /dev/null 
ls: cannot access file_doesnot_exists: No such file or directory

Bien que je redirige la sortie vers /dev/null, elle est imprimée dans le terminal. C'est parce que nous ne redirigeons pas la sortie d'erreur vers /dev/null. Par conséquent, pour rediriger également la sortie d'erreur, il est nécessaire d'ajouter 2>&1.

$ ls -l file_doesnot_exists > /dev/null 2>&1
132
Vishrant

C'est la manière d'exécuter un programme en silence et de cacher toutes ses sorties.

/dev/null est un objet de système de fichiers spécial qui jette tout ce qui y est écrit. Réorienter un flux vers celui-ci signifie cacher une sortie.

La partie 2>&1 signifie "redirige les flux de sortie et d'erreur". Même si votre programme écrit sur stderr, cette sortie ne sera pas affichée.

51
dasblinkenlight

/dev/null - fichier standard qui ignore tout ce que vous écrivez, mais indique que l'opération d'écriture a réussi. 1 est stdout et 2 est stderr. 2>&1 redirige stderr vers stdout. &1 indique un descripteur de fichier (stdout), sinon (si vous utilisez uniquement 1), vous redirigerez stderr vers un fichier nommé 1. [any command] >>/dev/null 2>&1 redirige tout le stderr vers stdout et écrit tout cela dans /dev/null.

13
Yura

J'utilise >> /dev/null 2>&1 pour cronjob silencieux, cronjob fera le travail mais n'enverra pas de rapport à mon adresse email.

Autant que je sache, ne retirez pas /dev/null, c'est particulièrement utile lorsque vous utilisez cpanel, vous pouvez l'utiliser pour le rapport de jetage cronjob.

5
Christian

Comme décrit par les autres, écrire dans/dev/null élimine la sortie d'un programme. Généralement, cron envoie un courrier électronique pour chaque sortie du processus démarré avec un travail cron. Donc, en écrivant la sortie dans/dev/null, vous évitez d'être spammé si vous avez spécifié votre adresse dans cron.

0
FSMaxB

Éditez /etc/conf.apf. Définissez DEVEL_MODE="0". DEVEL_MODE réglé sur 1 ajoutera un travail cron pour arrêter apf après 5 minutes.

0
dstonek