Что такое /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 минут.