2012-05-09 13 views
130

me encontré con este pedazo de código en /etc/cron.daily/apf¿Qué es/dev/null 2> & 1?

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

Se rubor y volver a cargar el servidor de seguridad.
No entiendo la parte >> /dev/null 2>&1.

¿Cuál es el propósito de tener esto en el cron? Está anulando las reglas de mi firewall. ¿Puedo eliminar de forma segura este trabajo cron?

+1

FYI: Una forma más corta de silenciar a un proceso es '> & - 2> & - '. – Zaz

+10

@Josh: ¿por qué hacer las cosas aún más crípticas de lo que ya son? – endolith

+2

@Josh Esto cierra los FD respectivos, lo que podría hacer abortar los programas. – glglgl

Respuesta

221

>> /dev/null redirige la salida estándar (stdout) a /dev/null, que lo descarta.

(El >> parece una especie de superflua, ya que >> medios anexan mientras > medios truncan y escribir, y, o bien añadiendo o escribiendo a /dev/null tiene el mismo efecto neto. Por lo general sólo tiene que utilizar > por esa razón.)

2>&1 redirige el error estándar (2) a la salida estándar (1), que luego lo descarta también, ya que la salida estándar ya ha sido redirigida.

+0

¿Qué indica el símbolo '&' allí '2> & 1'. – Nobody

+0

& indica un descriptor de archivo. Generalmente hay 3 descriptores de archivos: entrada, salida y error estándar. – Testing123

+0

@ Nadie revisa mi respuesta a continuación para obtener su pregunta https://stackoverflow.com/questions/10508843/what-is-dev-null-21/42919998?noredirect=1#answer-42919998 – Vishrant

47

Esta es la forma de ejecutar un programa silenciosamente y ocultar todos sus resultados.

/dev/null es un objeto especial del sistema de archivos que descarta todo lo que está escrito en él. Redirigir una secuencia en él significa ocultar una salida.

La parte 2>&1 significa "redirige la salida y las secuencias de error". Incluso si su programa escribe en stderr, esa salida no se mostrará.

+26

En realidad, '2> & 1' en realidad redirige' stderr' a 'stdout'. La diferencia entre esto y lo que usted reclama se ilustra mejor al intercambiar el orden de los redireccionamientos, p. '2> & 1>/dev/null'. – zigg

0

Según lo descrito por los otros, escribir en/dev/null elimina la salida de un programa. Por lo general, cron envía un correo electrónico para cada salida desde el proceso iniciado con un cronjob. Por lo tanto, escribiendo el resultado en/dev/null evita que se envíe correo basura si ha especificado su dirección en cron.

0

Editar /etc/conf.apf. Establecer DEVEL_MODE="0". DEVEL_MODE establecido en 1 agregará un trabajo cron para detener la APF después de 5 minutos.

3

Uso >> /dev/null 2>&1 para cronjob silencioso, cronjob hará el trabajo pero no enviará el informe a mi correo electrónico.

Por lo que sé, no elimine /dev/null, es útil especialmente cuando ejecuta cpanel, se puede utilizar para descartar informe de cronjob.

12

/dev/null - archivo estándar que descarta todo lo que se escribe en él, pero informa que la operación de escritura tuvo éxito. 1 es stdout y 2 es stderr. 2>&1 redirige stderr a stdout. &1 indica el descriptor de archivo (stdout), de lo contrario (si usa solo 1) redirigirá stderr al archivo llamado 1. [any command] >>/dev/null 2>&1 redirige todos los stderr a stdout, y escribe todo eso en /dev/null.

31

Permite dividir la declaración >> /dev/null 2>&1 en partes:


Parte 1:>> salida de redirección

Esto se utiliza para redirigir la salida del programa y añadir la salida al final del archivo. More...


Parte 2:/dev/null archivo especial

Esta es una Pseudo-devices special file.

Comando ls -l /dev/null le dará los detalles de este archivo:

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

¿Ha observado crw? Lo que significa que es un archivo de pseudodispositivo de tipo character-special-file que proporciona acceso en serie.

/dev/null accepts and discards all input; produces no output (always returns an end-of-file indication on a read). Reference: Wikipedia


Parte 3: descriptor 2>&1 archivo

Cada vez que se ejecuta un programa por el sistema operativo por defecto abierto tres archivos STDIN, STDOUT y STDERR como sabemos cada vez que se abre un archivo del sistema devuelve un pequeño entero llamado como descriptor de archivo. El descriptor de archivo para estos archivos es 0, 1, 2 respectivamente.

Así 2>&1 dice simplemente redirigir a STDERRSTDOUT

& means whatever follows is a file descriptor, not a filename.

En resumen, mediante el uso de este comando le está diciendo a su programa de no gritar mientras se ejecuta.

¿Cuál es la importancia de utilizar 2>&1?

Si no desea producir ninguna salida, incluso en caso de algún error en el terminal. Para explicar Tomemos el siguiente ejemplo:

$ ls -l > /dev/null 

Para el comando anterior sin salida se imprime en el terminal, pero lo que si este comando produce un error:

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

Aunque estoy redirigir la salida a /dev/null se está imprimiendo en la terminal.Es debido a que no vamos a redirigir la salida de error a /dev/null modo con el fin de redirigir la salida de error, así que se requiere para agregar 2>&1

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

¡Buen ejemplo! No sé '>' no redirigirá 'STDERR' antes. –

Cuestiones relacionadas