shell - the - ¿Qué es/dev/null 2> & 1?
ruta dev null (7)
Edite /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.
Encontré este fragmento de código en /etc/cron.daily/apf
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
Se está descargando y recargando el firewall.
No entiendo la >> /dev/null 2>&1
parte.
¿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?
Esta es la forma de ejecutar un programa silenciosamente y ocultar todo su resultado.
/dev/null
es un objeto especial del sistema de archivos que desecha todo lo que está escrito en él. Redirigir una secuencia en él significa ocultar una salida.
La parte 2>&1
significa "redirigir tanto la salida como las secuencias de error". Incluso si su programa escribe en stderr
, esa salida no se mostrará.
Según lo descrito por los demás, 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.
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 yo sé, no elimine /dev/null
, es útil especialmente cuando ejecuta cpanel, puede usarse para descartar el informe cronjob.
Vamos a dividir 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. More...
Parte 2: archivo especial /dev/null
Este es un archivo especial de Pseudo-dispositivos .
El comando ls -l /dev/null
le dará detalles de este archivo:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
¿Has observado crw
? Lo que significa que se trata de un archivo de pseudodispositivo de tipo character-special-file que proporciona acceso en serie.
/dev/null
acepta y descarta todas las entradas; no produce salida (siempre devuelve una indicación de fin de archivo en una lectura). Referencia: Wikipedia
Parte 3: descriptor de archivo 2>&1
Cada vez que ejecuta un programa por sistema operativo predeterminado, abra tres archivos STDIN
, STDOUT
y STDERR
ya que cada vez que se abre un archivo, el sistema devuelve un entero pequeño llamado como descriptor de archivo . El descriptor de archivo para estos archivos es 0, 1, 2 respectivamente.
Entonces 2>&1
simplemente dice redirigir 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á diciendo a su programa que no grite mientras se ejecuta.
¿Cuál es la importancia de usar 2>&1
?
Si no desea producir ningún resultado, incluso en caso de algún error en el terminal. Para explicar, tomemos el siguiente ejemplo:
$ ls -l > /dev/null
Para el comando anterior, no se imprimió ninguna salida en el terminal, pero ¿qué ocurre 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 redirijo la salida a /dev/null
se está imprimiendo en la terminal. Es porque no estamos redirigiendo la salida de error a /dev/null
por lo que para redirigir la salida de error también es necesario agregar 2>&1
$ ls -l file_doesnot_exists > /dev/null 2>&1
>> /dev/null
redirige la salida estándar ( stdout
) a /dev/null
, que lo descarta.
(El >>
parece algo superfluo, ya que >>
significa anexar mientras >
significa truncar y escribir, y agregar o escribir en /dev/null
tiene el mismo efecto neto. Por lo general, solo uso >
por ese motivo.)
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.
/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
) redireccionará stderr al archivo llamado 1
. [any command] >>/dev/null 2>&1
redirige todo stderr a stdout, y escribe todo eso en /dev/null
.