Как поток превращается в «ничто»

В Unix программы обычно не выводят сообщения прямо на экран. Вместо этого они пишут в потоки — каналы данных, которые операционная система связывает с терминалом, файлом или другой программой. Для сообщений об ошибках предназначен отдельный поток: его номер — 2.

`/dev/null` — специальное системное устройство, которое принимает записанные в него данные и сразу отбрасывает их. Поэтому команда вроде `программа 2>/dev/null` перенаправляет именно поток ошибок: оболочка подключает его к этому устройству, и текст не появляется в терминале и не сохраняется в файле. Если же читать из `/dev/null`, результатом будет конец потока — будто данных больше нет.

Тишина не означает исправность

Такое перенаправление меняет только то, куда попадает сообщение. Оно не устраняет причину ошибки и не заставляет программу работать успешнее: сбой может произойти так же, просто его описание станет невидимым. Именно поэтому `/dev/null` удобен для действительно ожидаемого шума, но опасен, когда вместе с ним скрывается сообщение, нужное для поиска неисправности.

У устройства есть и практическое применение помимо ошибок: в него можно направить ненужный обычный вывод, используя номер потока 1. В обоих случаях смысл один — программа продолжает отправлять данные, но система не тратит место на их хранение и не показывает их пользователю.