Qué es /dev / null 2> & 1?


Encontré este fragmento de código en /etc/cron.diario/apf

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

Está descargando y recargando el firewall.
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 cortafuegos. ¿Puedo eliminar con seguridad este trabajo cron?

Author: artagnon, 2012-05-09

7 answers

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

(El >> parece algo superfluo, ya que >> significa anexar mientras que > significa truncar y escribir, y anexar o escribir a /dev/null tiene el mismo efecto neto. Normalmente solo uso > 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.

 258
Author: zigg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-09 12:27:20

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


Parte 1: >> redirección de salida

Esto se usa para redirigir la salida del programa y anexar la salida al final del archivo. Más...


Parte 2: /dev/null archivo especial

Esto es un Archivo especial pseudo-dispositivos.

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

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

Observaste crw? Lo que significa que es un pseudo-dispositivo archivo que es de character-special-file tipo que proporciona acceso serie.

/dev/null acepta y descarta toda la entrada; no produce salida (siempre devuelve una indicación de fin de archivo en una lectura). Referencia: Wikipedia


Parte 3: 2>&1 descriptor de archivo

Cada vez que ejecuta un programa, el sistema operativo siempre abre tres archivos STDIN, STDOUT, y STDERR como sabemos cada vez que un se abre el archivo, el sistema operativo (desde kernel) devuelve un entero no negativo llamado como Descriptor de archivo. El descriptor de fichero para estos ficheros es 0, 1, 2 respectivamente.

Así que 2>&1 simplemente dice redireccionar STDERR a STDOUT

& significa que lo que sigue es un descriptor de archivo, no un nombre de archivo.

En resumen, al usar este comando le estás diciendo a tu programa que no grite mientras ejecutar.

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

Si desea no producir ninguna salida, incluso en caso de algún error producido en el terminal. Para explicarlo más claramente, consideremos el siguiente ejemplo:

$ ls -l > /dev/null

Para el comando anterior, no se imprimió ninguna salida en la terminal, pero qué pasa si este comando produce un error:

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

A pesar de que estoy redirigiendo la salida a /dev/null, se imprime en el terminal. Es porque no estamos redirigir la salida de error a /dev/null, por lo que para redirigir la salida de error también, se requiere agregar 2>&1

$ ls -l file_doesnot_exists > /dev/null 2>&1
 74
Author: Vishrant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-06 18:10:14

Esta es la forma de ejecutar un programa en silencio, y ocultar toda su salida.

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

La parte 2>&1 significa "redirigir tanto la salida como los flujos de error". Incluso si su programa escribe en stderr, esa salida no se mostrará.

 51
Author: dasblinkenlight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-09 01:49:13

/dev/null - archivo estándar que descarta todo lo que 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 todo stderr a stdout, y escribe todo eso en /dev/null.

 13
Author: Iurii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-10 12:40:48

Utilizo >> /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 se ejecuta cpanel, se puede usar para desechar el informe cronjob.

 4
Author: Christian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-12 09:48:23

Como han descrito los demás, escribir en /dev/null elimina la salida de un programa. Por lo general, cron envía un correo electrónico por cada salida del proceso iniciado con un cronjob. Por lo tanto, al escribir la salida en /dev/null evitará que se le envíe spam si ha especificado su dirección en cron.

 0
Author: FSMaxB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 20:13:31

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

 0
Author: dstonek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-04 21:51:02