373 votes

Que signifie 2>/dev/null ?

J'aimerais avoir une brève explication de la ligne de commande suivante :

grep -i 'abc' content 2>/dev/null

528voto

Warren Hill Points 21074

El > redirige la sortie généralement vers un fichier mais cela peut être vers un périphérique. Vous pouvez également utiliser >> à ajouter.

Si vous ne spécifiez pas de numéro, le flux de sortie standard est supposé, mais vous pouvez également rediriger les erreurs :

> file redirige stdout vers un fichier
1> file redirige stdout vers un fichier

2> file redirige stderr vers un fichier

&> file redirige stdout et stderr vers un fichier
> file 2>&1 redirige stdout et stderr vers un fichier

/dev/null est le dispositif null, il prend n'importe quelle entrée que vous voulez et la rejette. Il peut être utilisé pour supprimer toute sortie.

Notez que > file 2>&1 est une ancienne syntaxe qui fonctionne toujours, &> file est plus soigné, mais n'aurait pas fonctionné sur les anciens systèmes.

41voto

Terry Wang Points 8890

En bref, il redirige stderr ( fd 2) au trou noir (rejette la sortie de la commande).

Quelques modèles couramment utilisés pour la redirection :

command > /dev/null 2>&1 &

Exécuter command en arrière-plan, rejeter stdout y stderr

command >> /path/to/log 2>&1 &

Exécuter command , append stdout y stderr dans un fichier journal.

Dans Bash 4+, une forme plus courte (mais moins lisible) est fonctionnelle

command &>> /path/to/log

17voto

Indrajeet Gour Points 271

/dev/null est considéré comme un trou noir sous Linux/Unix, vous pouvez donc y mettre n'importe quoi mais vous ne pourrez pas le récupérer à partir de /dev/null .

Plus loin, 2> signifie que vous redirigez (c.-à-d. > ) le stderr (c'est-à-dire 2 ) dans le trou noir (c'est-à-dire /dev/null )

Votre commandement est :

grep -i 'abc' content 2>/dev/null 

N'essayez pas de terminer avec un autre slash avant comme ceci - 2>/dev/null/ (ce n'est pas un répertoire).

11voto

Mauro Zallocco Points 111

Grep -i 'abc' content générera une sortie qui sera affichée sur votre console, y compris les erreurs éventuelles.

Spécifier 2>/dev/null filtrera les erreurs afin qu'elles ne soient pas affichées dans votre console.

Plus en détail : 2 représente le descripteur d'erreur, c'est-à-dire l'endroit où les erreurs sont écrites. Par défaut, elles sont imprimées sur la console.

\> redirige la sortie vers l'endroit spécifié, dans ce cas-ci /dev/null

/dev/null est le périphérique standard de Linux où vous envoyez les sorties que vous voulez ignorer.

4voto

berkancetin Points 118

Tout d'abord, nous devons parler de > opérateur. Il redirige la sortie de la gauche du symbole vers la droite du symbole.

Il faut donc penser comme :

commande_source > fichier_cible

Autres choses que nous devons savoir

0 means stdin 
1 means stdout(useful output)
2 means stderr(error message output)

Comme par défaut il fonctionne comme command 1 > target_file

Quant à /dev/null --> c'est un fichier spécial qui rejette la redirection des sorties des canaux vers lui.

Donc, dans votre question, cela signifie

Exécutez la commande et ne me montre pas les messages d'erreur , les rejeter .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X