Linux: Что означает «> /dev/null 2>&1»?

LinuxJedi_head

[root@test cron.d]# cat /etc/cron.d/cacti
* * * * * root /usr/bin/php /home/vhosts/test/httpdocs/poller.php  > /dev/null 2>&1

Очень часто в CRON скриптах, можно встретить конструкцию оканчивающуюся на «> /dev/null 2>&1». Без добавления данной записи можно получить огромное количество писем, многие это знают, и как результат делают банальную копиписту, не понимая, что же все-таки на самом деле происходит.

Все дело в перенаправлении вывода.

Оператор > («больше чем»), как в примере выше, переадресовывает вывод программы.

В данном случае, что-то отправляется в /dev/null, а что-то переадресовывается в &1.

Стандартные ввод, вывод и ошибка

Существует три стандартных значения ввода и вывода для программ:

  • Ввод получают от клавиатуры или из программы, обрабатывающей вывод другой программы — STDIN.
  • Результат программы, обычно отдающийся на стандартной вывод — STDOUT
  • И иногда в файл «STDERR» (ошибка).

Часто к ним обращаются не по имени, а по номеру:

0 — STDIN, 1 — STDOUT и 2 — STDERR

По умолчанию, если вы не укажете номер, то будет подразумеваться STDOUT.

В нашем примере видно, что команда направляет свой стандартный вывод в /dev/null (псевдоустройство, которое может принять произвольный объём данных, не сохраняя их). Затем все ошибки (то есть STDERR) перенаправить в стандартный вывод.

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

Команда в примере аналогична команде:

cron job command >/dev/null 2>/dev/null

Источник: http://habrahabr.ru/post/138591/

Вы можете оставить комментарий ниже.