Сервер в кармане, или просто о сложном!

главная - Статьи - Linux, FreeBSD


Много интересного на канале

Что значит /dev/null 2>&1

Дата обновления: 16.04.2025

Теги: Linux

Шли бы вы, молодой человек, в /dev/null. Знать бы еще, куда кого-то только что послал...

Что же такое "> /dev/null 2>&1"?

Сам по себе /dev/null в Linux - это черная дыра. Что туда попало, то пропало навсегда.

Вот пример команды:

script.sh > /dev/null 2>&1

Перенаправление вывода

Оператор greater-than (>) в командах, переадресовывает вывод программы куда-нибудь. В данном случае, "кое-что" переадресовывается в /dev/null, и "кое-что" переадресовывается в &1.

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

Есть три стандартных значения ввода и вывода для программ. Стандартный ввод обычно получают от клавиатуры, если это - диалоговая программа, или из программы, если она обрабатывает вывод другой программы. Программа обычно выводит в стандартной вывод, и иногда выводит в стандартную ошибку.

Это три дескриптора файла (можно их представить как "каналы данных"): STDIN, STDOUT и STDERR.

Иногда их не именуют, а нумеруют!

Встроенные нумерации для них соответственно - 0, 1 и 2. По умолчанию, если Вы не указывете номер или явно указываете номер 1, Вы имеете дело с STDOUT.

0 — STDIN, 1 — STDOUT и 2 — STDERR

В данном случае, Вы видите, что команда выше:
1) переадресовывает стандартный вывод в /dev/null (часто называемый bit-bucket [битоприемник]), который является местом, куда Вы можете скинуть что-нибудь не нужное (script.sh > /dev/null),
2) а также переадресовывает стандартную ошибку в стандартный вывод (2 >&1)

Короткое объяснение этому, "весь вывод этой команды, нужно спихнуть в черную дыру." Это такой способ заставить программу быть действительно безмолвной!

Сравните:

$ ls -al /root/
ls: cannot open directory '/root/': Permission denied

и

$ ls -al /root/ 2> /dev/null

Сообщения об ошибках доступа "исчезли".

 

Примеры:

Если нужно получать только сообщения об ошибках:

/tmp/script.sh > /dev/null

Показать вывод скрипта и никаких ошибок:

/tmp/script.sh > /dev/null 2>/dev/null

Не показывать ничего (ни вывод скрипта, ни ошибки):

script.sh > /dev/null 2>&1

 



Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?




Принимаю заказы на настройку серверов, mikrotik и других роутеров, точек доступа, nginx и т.п. В пределах Санкт-Петербурга возможен выезд к заказчику. См. контакты.

В чем разница между masquerade и src-nat в MikroTik

Опубликовано: 09.05.2025 14:36

С Днём Победы!

Опубликовано: 09.05.2025 13:03

Зачем Яндекс.Браузеру эти данные?

Опубликовано: 09.05.2025 02:51

Ох уж этот OpenSource…

Опубликовано: 09.05.2025 02:30