Что именно делает 2> / dev / null?

What Exactly Does 2 Dev Null Do



Независимо от того, являетесь ли вы новым пользователем Linux или опытным программистом на bash, весьма вероятно, что вы столкнулись с загадочной командой 2> / dev / null. Хотя эта команда выглядит технически сложной, ее цель очень проста. Он относится к нулевому устройству, которое используется для подавления вывода различных команд. В этой статье мы разберем каждую часть команды 2> / dev / null, объясним ее назначение и увидим примеры ее использования.

Нулевое устройство - ‘/ dev / null’

Все системы на базе Linux имеют функцию, называемую виртуальными устройствами. Эти виртуальные устройства взаимодействуют как реальные файлы в операционной системе. Работа таких виртуальных устройств аналогична работе реальных устройств; они используются для записи и чтения данных. Основное различие между ними заключается в том, что данные для виртуальных устройств предоставляются операционной системой.







/ dev / null - это пустое устройство - особый тип виртуального устройства. Он присутствует в каждой системе Linux, и цель этого устройства - отбросить все, что ему отправлено, и прочитать конец файла (EOF). Большинство виртуальных устройств используются для чтения данных; однако / dev / null уникален, поскольку он используется для подавления любых записываемых в него данных. Проще говоря, он действует как черная дыра для любых данных, которые записываются в него в операционных системах Linux.



Теперь давайте посмотрим на оставшиеся части команды 2> / dev / null.



Дескриптор файла - «2»

При выполнении каждой команды в Linux генерируются три связанных файла: стандартный ввод, стандартный вывод и стандартные файлы ошибок. Операционная система Linux обращается к каждому из этих файлов с помощью уникального неотрицательного целого числа.





  • «0» для стандартного ввода
  • «1» для стандартного вывода
  • «2» для стандартной ошибки

Технические термины для стандартного ввода, стандартного вывода и стандартных потоков ошибок: stdin, stdout и stderr соответственно.

Мы знаем, что число «2» в команде «2> / dev / null» относится к потоку стандартной ошибки (stderr).



Оператор перенаправления файлов - ‘>’

Символ «>» известен как оператор перенаправления файлов. Его цель - направить то, что находится слева, к командам с правой стороны. Проще говоря, любая строка данных слева будет направлена ​​справа от оператора.

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

$ls - /разработчик/нулевой

Эта команда обычно используется в сценариях, где нам нужно отфильтровать вывод на основе ошибок или когда мы хотим отбросить любой вывод, связанный с ошибочными описаниями. В дальнейшем мы рассмотрим примеры его использования в системе Ubuntu.

Использование 2> / dev / null

Поскольку мы знаем, что команда 2> / dev / null используется для исключения ошибок, она всегда будет использоваться вместе с другими командами. Мы увидим похожий подход в следующих примерах. Вы можете открыть терминал либо через меню приложений, либо с помощью сочетания клавиш Ctrl + Alt + T.

В первом примере мы будем проводить поиск в каталоге / sys / случайной строки (в данном случае helloworld). Команда для поиска - это grep, а ее аргументом будет строка поиска. Введите следующую команду для поиска вашей строки.

$рукоятка Привет, мир/sys/

Эта поисковая команда должна отображать множество ошибок, поскольку она используется без корневого доступа. Мы отправим его поток ошибок в / dev / null, используя команду 2> / dev / null, чтобы отменить эти ошибки.

$рукоятка Привет, мир/sys/ 2> /разработчик/нулевой

Мы видим, что вывод команды намного проще и понятнее, чем предыдущий. Причина в том, что ошибки отбрасываются с помощью 2> / dev / null, а поскольку команде grep не удалось найти ни одного файла, соответствующего нашей строке «helloworld», она не выводит никаких результатов.

Чтобы лучше понять использование / dev / null, мы рассмотрим следующий пример проверки связи любого веб-сайта (в нашем случае google.com). Вы можете проверить связь с google.com, выполнив следующую команду:

$пингGoogle com

Если мы хотим исключить все неудачные эхо-запросы, мы можем использовать команду 2> / dev / null:

$пингGoogle com2> /разработчик/нулевой

В этом случае стандартный поток ошибок (который показывает неудачные эхо-запросы на google.com) отправляется на виртуальное устройство / dev / null, которое их отбрасывает.

Однако, если мы хотим видеть только неудачные эхо-запросы, мы можем выполнить следующую команду:

$пингGoogle com1> /разработчик/нулевой

Здесь мы отправляем стандартный выходной поток (stdout) на устройство / dev / null, которое его отбрасывает. Следовательно, у нас остались только эхо-запросы, которые не достигли сервера google.com. Однако в нашем случае неудачных пингов не было. Мы также можем направить stdout и stderr в разные места. Это полезно, если мы хотим отбросить вывод и сохранить ошибки в журнале или наоборот. Вы можете запустить следующую команду, чтобы сохранить неудачные запросы ping в журнале ошибок, отказавшись от стандартного вывода команды ping:

$пингGoogle com1> /разработчик/нулевой2>журнал ошибок

В некоторых случаях вам может потребоваться подавить весь вывод команды (включая стандартный вывод и стандартные ошибки). Мы можем добиться этого, используя устройство / dev / null немного по-другому. Вы можете ввести следующую команду, чтобы подавить весь вывод:

$пингGoogle com> /разработчик/нулевой2> &1

Обратите внимание, что порядок команд здесь очень важен. После выполнения команды ping «> / dev / null» указывает системе подавить вывод, а «2> & 1» направляет стандартный поток ошибок на стандартный вывод. Таким образом, весь вывод команды отбрасывается.

Заключение

В этой статье мы рассмотрели команду 2> / dev / null и простые примеры, и, надеюсь, теперь вы понимаете, что делает каждый ее бит. Однако это только верхушка айсберга; Нулевые устройства используются в программировании на bash множеством способов. Некоторые из более сложных применений включают проверку существования файла, автоматизацию установки пакетов и предотвращение запуска сценариев нежелательных исключений.