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

j'ai trouvé ce morceau de code dans /etc/cron.quotidien / apf

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

c'est Flush et recharger le pare-feu.

Je ne comprends pas la partie >> /dev/null 2>&1 .

Quel est le but d'avoir ceci dans le cron? Il est primordial de mes règles de pare-feu. Puis-je retirer ce travail cron en toute sécurité?

160
demandé sur artagnon 2012-05-09 05:46:19

7 réponses

>> /dev/null redirige la sortie standard ( stdout ) vers /dev/null , ce qui l'écarte.

(le >> semble en quelque sorte superflu, puisque >> signifie ajouter alors que > signifie tronquer et écrire, et soit ajouter ou écrire à /dev/null a le même effet net. J'utilise d'habitude > pour cette raison.)

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

258
répondu zigg 2014-04-09 12:27:20

break >> /dev/null 2>&1 statement into parts:


Partie 1: >> redirection de sortie

Ce est utilisé pour rediriger la sortie de programme et ajouter la sortie à la fin du fichier. plus...


Partie 2: /dev/null dossier spécial

This est un Pseudo-dispositifs dossier spécial .

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-périphérique fichier qui est de caractère-spécial-fichier type qui fournit un accès série.

/dev/null accepte et écarte toute entrée; ne produit aucune sortie (renvoie toujours une indication de fin de fichier sur une lecture). Référence: Wikipedia


Partie 3: 2>&1 descripteur de fichier

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

Donc 2>&1 dit simplement rediriger STDERR à STDOUT

& signifie 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 voulez ne produire aucune sortie, même en cas d'erreur produite dans le terminal. Pour expliquer plus clairement, considérons l'exemple suivant:

$ ls -l > /dev/null

pour le au-dessus de la commande, aucune sortie n'a été imprimée dans le terminal, mais que faire si cette commande produit une erreur:

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

malgré que je redirige la sortie vers /dev/null , elle est imprimée dans le terminal. C'est parce que nous ne sommes pas rediriger la sortie d'erreur /dev/null , afin de rediriger la sortie d'erreur ainsi, il est nécessaire d'ajouter 2>&1

$ ls -l file_doesnot_exists > /dev/null 2>&1
74
répondu Vishrant 2018-07-06 18:10:14

c'est la façon d'exécuter un programme tranquillement, et cacher toute sa sortie.

/dev/null est un objet spécial du système de fichiers qui jette tout ce qui y est écrit. Rediriger un flux vers lui signifie cacher une sortie.

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

51
répondu dasblinkenlight 2012-05-09 01:49:13

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

13
répondu Iurii 2015-03-10 12:40:48

j'utilise >> /dev/null 2>&1 pour une tâche cron, tâche cron va faire le travail, mais ne pas envoyer le rapport à mon e-mail.

autant que je sache, ne pas supprimer /dev/null , il est utile surtout lorsque vous exécutez cpanel, peut être utilisé pour jeter cronjob rapport.

4
répondu Christian 2016-07-12 09:48:23

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

0
répondu FSMaxB 2012-10-03 20:13:31

Modifier /etc/conf.apf . Set DEVEL_MODE="0" . DEVEL_MODE mis à 1 ajoutera un travail cron pour arrêter apf après 5 minutes.

0
répondu dstonek 2014-07-04 21:51:02