Что такое /dev/null 2> & 1?
Я нашел этот фрагмент кода в /etc/cron.daily/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?
Ответы
Ответ 1
>> /dev/null
перенаправляет стандартный вывод (stdout
) на /dev/null
, который отбрасывает его.
(>>
кажется излишним, поскольку >>
означает append while >
означает truncate и write, а добавление или запись в /dev/null
имеет тот же эффект сети. Обычно я использую >
по этой причине.)
2>&1
перенаправляет стандартную ошибку (2
) на стандартный вывод (1
), который затем отбрасывает его, так как стандартный вывод уже перенаправлен.
Ответ 2
Это способ выполнить программу спокойно и скрыть все ее выходные данные.
/dev/null
- специальный объект файловой системы, который отбрасывает все, что записано в нем. Перенаправление потока в него означает скрытие вывода.
Часть 2>&1
означает "перенаправить выходные и потоки ошибок". Даже если ваша программа записывается в stderr
, этот вывод не будет отображаться.
Ответ 3
Позволяет разделить оператор >> /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
принимает и отбрасывает все входные данные; не производит выход (всегда возвращает индикацию конца файла при чтении). Ссылка: Wikipedia
Часть 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
Ответ 4
/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
.
Ответ 5
Я использую >> /dev/null 2>&1
для молчания cronjob, cronjob выполнит эту работу, но не отправит отчет на мой адрес электронной почты.
Насколько я знаю, не удаляйте /dev/null
, он особенно полезен при запуске cpanel, который можно использовать для отбрасывания отчета cronjob.
Ответ 6
Как описано другими, запись в /dev/null исключает вывод программы. Обычно cron отправляет электронное письмо для каждого вывода процесса, начинающегося с cronjob. Таким образом, записывая вывод в /dev/null, вы запрещаете спам, если вы указали свой адрес в cron.
Ответ 7
Изменить /etc/conf.apf
. Установите DEVEL_MODE="0"
. DEVEL_MODE
, установленный в 1
, добавит задание cron для остановки apf через 5 минут.