410 votes

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  

C'est le rinçage et le rechargement du pare-feu.
Je ne comprends pas le >> /dev/null 2>&1 partie.

Quel est le but d'avoir ceci dans le cron ? Il outrepasse les règles de mon pare-feu. Puis-je supprimer cette tâche cron en toute sécurité ?

2 votes

Pour info : Une façon plus courte de faire taire un processus est de >&- 2>&- .

40 votes

@Josh : pourquoi rendre les choses encore plus cryptiques qu'elles ne le sont déjà ?

4 votes

@Josh Cela ferme les FDs respectifs, ce qui pourrait faire avorter les programmes.

537voto

zigg Points 4823

>> /dev/null redirige la sortie standard ( stdout ) à /dev/null qui le rejette.

(Le >> semble en quelque sorte superflue, puisque >> signifie ajouter pendant que > signifie tronquer et écrire, et soit ajouter ou écrire à /dev/null a le même effet net. En général, j'utilise simplement > pour cette raison).

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

26 votes

Que fait le & le symbole indique là-dedans 2>&1 .

37 votes

& indique un descripteur de fichier. Il y a généralement 3 descripteurs de fichiers - entrée, sortie et erreur standard.

2 votes

@Nobody vérifiez ma réponse ci-dessous pour votre question stackoverflow.com/questions/10508843/what-is-dev-null-21/

88voto

dasblinkenlight Points 264350

C'est le moyen d'exécuter un programme de manière silencieuse, et de cacher tous ses résultats.

/dev/null est un objet spécial du système de fichiers qui rejette tout ce qui y est écrit. Rediriger un flux vers cet objet revient à cacher la sortie de votre programme.

El 2>&1 signifie "rediriger le flux d'erreur vers le flux de sortie", donc lorsque vous redirigez le flux de sortie, le flux d'erreur est également redirigé. Même si votre programme écrit dans stderr maintenant, cette sortie serait également rejetée.

50 votes

En fait, 2>&1 redirige en fait stderr à stdout . La différence entre ce qui précède et ce que vous demandez est illustrée par l'ordre des redirections. 2>&1 >/dev/null .

9voto

Christian Points 1

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

Pour autant que je sache, n'enlevez pas /dev/null . C'est utile, surtout lorsque vous exécutez cPanel il peut être utilisé pour les rapports de cronjob jetables.

2voto

FSMaxB Points 202

Comme décrit par les autres, écrire dans /dev/null élimine la sortie d'un programme. Habituellement, cron envoie un email pour chaque sortie du processus lancé avec un cronjob. Ainsi, en écrivant la sortie dans /dev/null, vous évitez d'être spammé si vous avez spécifié votre adresse dans cron.

-3voto

dstonek Points 374

Editar /etc/conf.apf . Set DEVEL_MODE="0" . DEVEL_MODE réglé sur 1 ajoutera une tâche cron pour arrêter apf après 5 minutes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X