Управление файлами

Что такое / dev / null и как его использовать

Что такое / dev / null и как его использовать
Linux - интересная операционная система, в которой размещены виртуальные устройства для различных целей. Что касается программ, запущенных в системе, эти виртуальные устройства действуют так, как если бы они были настоящими файлами. Инструменты могут запрашивать и передавать данные из этих источников. Данные генерируются ОС, а не читаются с диска.

Один из таких примеров - / dev / null. Это особый файл, который присутствует в каждой системе Linux. Однако, в отличие от большинства других виртуальных файлов, вместо чтения он используется для записи. Все, что вы напишете в / dev / null, будет отброшено, забыто в пустоту. Он известен как нулевое устройство в системе UNIX.

Зачем тебе что-то выбрасывать в пустоту?? Давайте посмотрим, что такое / dev / null и как его использовать.

Предпосылки

Прежде чем углубиться в использование / dev / null, мы должны иметь четкое представление о стандартный вывод а также stderr поток данных. Ознакомьтесь с этим подробным руководством по стандартный ввод, stderr, а также стандартный вывод.

Давайте быстро освежимся. Всякий раз, когда запускается какая-либо утилита командной строки, она генерирует два вывода. Вывод идет на стандартный вывод и ошибка (если сгенерирована) переходит в stderr. По умолчанию оба этих потока данных связаны с терминалом.

Например, следующая команда распечатает строку в двойных кавычках. Здесь вывод сохраняется в стандартный вывод.

$ echo «Привет, мир»

Следующая команда покажет нам статус выхода ранее запущенной команды.

$ echo $?

Поскольку предыдущая команда была выполнена успешно, статус выхода равен 0. В противном случае статус выхода будет другим. Что происходит, когда вы пытаетесь запустить недопустимую команду?

$ adfadsf
$ echo $?

Теперь нам нужно знать о файловом дескрипторе. В экосистеме UNIX это целые числа, присвоенные файлу. Оба стандартный вывод (дескриптор файла = 1) и stderr (дескриптор файла = 2) иметь определенный дескриптор файла. Используя дескриптор файла (в данном случае 1 и 2), мы можем перенаправить стандартный вывод а также stderr в другие файлы.

Для начала следующий пример перенаправит стандартный вывод команды echo в текстовый файл. Здесь мы не указали дескриптор файла. Если не указано, bash будет использовать стандартный вывод по умолчанию.

$ echo «Hello World»> журнал.текст

Следующая команда перенаправит stderr в текстовый файл.

$ asdfadsa 2> ошибка.текст

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

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

Теперь мы готовы узнать, как использовать / dev / null. Во-первых, давайте посмотрим, как отфильтровать нормальный вывод и ошибку. В следующей команде grep попытается найти строку (в данном случае привет) в каталоге «/ sys».

$ grep -r привет / sys /

Однако это вызовет много ошибок, так как без привилегий root grep не может получить доступ к ряду файлов. В таком случае это приведет к ошибке «В разрешении отказано». Теперь, используя перенаправление, мы можем получить более четкий вывод.

$ grep -r привет / sys / 2> / dev / null

Результат выглядит намного лучше, правда? Ничего такого! В этом случае grep не имеет доступа ко многим файлам, а те, которые доступны, не имеют строки «hello».

В следующем примере мы будем пинговать Google.

$ ping google.ком

Однако мы не хотим видеть все эти успешные результаты проверки связи. Вместо этого мы хотим сосредоточиться только на ошибках, когда пинг не может достичь Google. Как мы это делаем?

$ ping google.com 1> / dev / null

Здесь содержимое стандартный вывод сбрасываются в / dev / null, оставляя только ошибки.

Перенаправить весь вывод в / dev / null

В определенных ситуациях вывод может быть вообще бесполезен. Используя перенаправление, мы можем выгрузить весь вывод в пустоту.

$ grep -r привет / sys /> / dev / null 2> & 1

Давайте немного сломаем эту команду. Сначала мы сбрасываем все стандартный вывод в / dev / null. Затем, во второй части, мы говорим bash отправить stderr к стандартный вывод. В этом примере выводить нечего. Однако, если вы запутались, вы всегда можете проверить, успешно ли выполнилась команда.

$ echo $?

Значение равно 2, потому что команда сгенерировала много ошибок.

Если вы склонны забывать файловый дескриптор стандартный вывод а также stderr, следующая команда подойдет. Это более общий формат предыдущей команды. Оба стандартный вывод а также stderr будет перенаправлен на / dev / null.

$ grep -r привет / sys / &> / dev / null

Другие примеры

Это интересный. Помните инструмент dd? Это мощный инструмент для преобразования и копирования файлов. Узнать больше о dd. Используя dd, мы можем проверить скорость последовательного чтения вашего диска. Конечно, это не точное измерение. Однако для быстрого теста это довольно полезно.

$ dd если = of = / dev / null status = прогресс bs = 1M iflag = direct

Здесь я использовал Ubuntu 18.04.4 ISO как большой файл.

Точно так же вы также можете проверить скорость загрузки вашего интернет-соединения.

$ wget -O / dev / null

Последние мысли

Надеюсь, у вас есть четкое представление о том, что это за файл / dev / null. Это специальное устройство, которое при записи на него сбрасывает, а при чтении с него считывает ноль. Истинный потенциал этой интересной функции заключается в интересных сценариях bash.

Вас интересуют сценарии bash?? Ознакомьтесь с руководством для начинающих по написанию сценариев bash.

Наслаждаться!

Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...
Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...
Как записать и транслировать игровую сессию в Linux
В прошлом игры считались только хобби, но со временем игровая индустрия увидела огромный рост с точки зрения технологий и количества игроков. Игровая ...