Что такое /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
, который отбрасывает его.(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.