Что такое /dev / null 2>&1?


Я нашел этот фрагмент кода в /etc / cron.ежедневно / apf

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

это промывка и перезагрузки брандмауэр.
Я не понимаю >> /dev/null 2>&1 часть.

какова цель иметь это в cron? Это переопределяет мои правила брандмауэра. Могу ли я безопасно удалить эту работу cron?

7 160

7 ответов:

>> /dev/null перенаправляет стандартный вывод (stdout) в /dev/null, который отбрасывает его.

(The >> кажется лишним, так как >> означает добавить в то время как > означает усечение и запись, а также добавление или запись в /dev/null имеет тот же эффект. Я обычно просто использую > по этой причине.)

2>&1 перенаправляет стандартный поток ошибок (2) на стандартный вывод (1), который затем отбрасывает его, так как стандартный вывод уже был перенаправлен.

давайте >> /dev/null 2>&1 заявление в части:


Часть 1.>> перенаправление вывода

это используется для перенаправления вывода программы и добавления вывода в конце файла. больше...


Часть 2:/dev/null специальный файл

это псевдо-устройства специальным файлом.

команда ls -l /dev/null даст вам подробности этого файла:

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

вы заметили crw? Что означает, что это псевдо-устройства файл, который имеет character-special-file тип обеспечивает последовательный доступ.

/dev/null принимает и отбрасывает все входные данные; не производит вывода (всегда возвращает конец файла индикации на чтение). Ссылка: Википедия


Часть 3.2>&1 файловый дескриптор

всякий раз, когда вы выполните программу, операционная система всегда открывает три файла STDIN,STDOUT и STDERR как мы знаем, всякий раз, когда файл открывается, операционная система (от ядро) возвращает неотрицательное целое число называется Дескриптор. Дескриптор файла для файлов 0, 1, 2 соответственно.

так 2>&1 просто говорит перенаправить STDERR до STDOUT

& означает, что все, что следует, является файловым дескриптором, а не именем файла.

короче говоря, с помощью этой команды вы говорите вашей программе не кричать во время выполнения.

в чем важность использования 2>&1?

если вы не хотите производить вывод даже в случае некоторой ошибки, произведенной в терминале. Чтобы объяснить более четко, давайте рассмотрим следующее пример:

$ ls -l > /dev/null

для приведенной выше команды вывод не был напечатан в терминале, но что делать, если эта команда выдает ошибку:

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

несмотря на то, что я перенаправляю вывод на /dev/null, он напечатан в терминале. Это потому, что мы не перенаправляем вывод ошибок на /dev/null, поэтому для того, чтобы перенаправить вывод ошибок, а также, это требуется, чтобы добавить 2>&1

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

Это способ тихо выполнить программу и скрыть все ее выходные данные.

/dev/null - Это специальный объект файловой системы, который выбрасывает все, что написано в нем. Перенаправление потока в него означает скрытие вывода.

The 2>&1 part означает "перенаправление как выходных, так и потоков ошибок". Даже если ваша программа пишет stderr, этот вывод не будет показан.

/dev/null - стандартный файл, который отбрасывает все что вы пишите, но отчеты что операция записи прошла успешно. 1 - это stdout и 2 - это поток stderr. 2>&1 перенаправляет stderr в stdout. &1 указывает дескриптор файла (stdout), в противном случае(если вы используете только 1) нужно перенаправить stderr в файл с именем 1. [any command] >>/dev/null 2>&1 перенаправляет все stderr в stdout и записывает все это в /dev/null.

Я использую >> /dev/null 2>&1 для silent cronjob, cronjob будет делать работу, но не отправлять отчет на мою электронную почту.

насколько я знаю, не удалить /dev/null, это полезно, особенно при запуске cpanel, может быть использован для выбросить отчет cronjob.

как описано другими, запись в /dev / null исключает вывод программы. Обычно cron отправляет электронное письмо для каждого вывода из процесса, запущенного с помощью cronjob. Поэтому, записывая вывод в /dev / null, вы предотвращаете спам, если вы указали свой адрес в cron.

Edit /etc/conf.apf. Набор DEVEL_MODE="0". DEVEL_MODE значение 1 добавит задание cron, чтобы остановить apf через 5 минут.