Что такое /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 ответов
>> /dev/null
перенаправляет стандартный вывод (stdout
) в /dev/null
, который отбрасывает его.
(том >>
кажется излишним, так как >>
средства добавляют при >
означает усечение и запись, а также добавление или запись в /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
? Что означает, что это псевдо-устройства файл, который имеет символ-специальные-файл тип обеспечивает последовательный доступ.
/dev/null
принимает и отбрасывает все входные данные; не производит вывода (всегда возвращает индикацию конца файла при чтении). Ссылка: Википедия
Часть 3. 2>&1
файловый дескриптор
всякий раз, когда вы выполните программу, операционная система всегда открывает три файла STDIN
, STDOUT
и STDERR
как мы знаем, когда файл открыт, операционная система (от ядро) возвращает неотрицательное целое число называется Дескриптор. Дескриптор файла для файлов 0, 1, 2 соответственно.
так 2>&1
просто говорит redirect STDERR
to 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
- Это специальный объект файловой системы, который выбрасывает все, что написано в нем. Перенаправление потока в него означает сокрытие вывода.
на 2>&1
часть означает "перенаправить как выходные данные, так и потоки ошибок". Даже если ваша программа пишет 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.
редактировать /etc/conf.apf
. Set DEVEL_MODE="0"
. DEVEL_MODE
значение 1
добавит задание cron, чтобы остановить apf через 5 минут.