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

What Is Dev Null How Use It



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

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







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



Предпосылки

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



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





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

$выбросилПривет, мир



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

$выбросил $?

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

$ adfadsf
$выбросил $?

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

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

$выбросилПривет, мир>log.txt

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

$Asdfadsa2>error.txt

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

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

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

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

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

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

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

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

$пингGoogle com

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

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

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

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

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

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

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

$выбросил $?

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

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

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

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

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

$дд еслизнак равно<большой_файл> иззнак равно/разработчик/нулевойположение дел= прогрессbs= 1 млнифлаг= прямой

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

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

$wget -ИЛИ /разработчик/нулевой<big_file_link>

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

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

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

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