Что такое /dev/null в Linux?

С технической точки зрения «/dev/null» — это файл виртуального устройства. Что касается программ, с ними обращаются так же, как с реальными файлами. Утилиты могут запрашивать данные из такого источника, а операционная система передает им данные. Но вместо чтения с диска операционная система генерирует эти данные динамически. Примером такого файла является «/dev/zero».

Однако в этом случае вы будете производить запись в файл устройства. Все, что вы пишете в «/dev/null», отбрасывается, забывается, выбрасывается в пустоту. Чтобы понять, почему это полезно, вы должны сначала иметь базовое представление о стандартном выводе и стандартных ошибках в операционных системах типа Linux или *nix.

Читайте также: Как использовать команду Tee в Linux

стандартный вывод и стандартный вывод

Утилита командной строки может генерировать два типа вывода. Стандартный вывод отправляется на стандартный вывод. Ошибки отправляются в stderr.

По умолчанию stdout и stderr связаны с вашим окном терминала (или консолью). Это означает, что все, отправленное на стандартный вывод и стандартный поток ошибок, обычно отображается на вашем экране. Но с помощью перенаправления оболочки вы можете изменить это поведение. Например, вы можете перенаправить стандартный вывод в файл. Таким образом, вместо вывода вывода на экран, он будет сохранен в файл,

стандартный вывод и стандартный вывод

жете перенаправить стандартный вывод на физическое устройство, скажем, на цифровой светодиодный или ЖК-дисплей.

ЖК-дисплей Dev Null

Если вы хотите узнать больше, можно получить оценку полная статья о каналах и перенаправлениях .

  • С помощью 2>вы перенаправляете стандартные сообщения об ошибках. Пример: 2>/dev/nullили 2>/home/user/error.log.
  • С помощью 1>вы перенаправляете стандартный вывод.
  • С помощью &>вы перенаправляете как стандартные ошибки, так и стандартный вывод.

Читайте также: 6 самых полезных команд Linux для новых пользователей

Используйте /dev/null, чтобы избавиться от ненужного вывода

Поскольку существует два типа вывода: стандартный вывод и стандартная ошибка, первый вариант использования — отфильтровать тот или иной тип. Это легче понять на практическом примере. Допустим, вы ищете строку в «/sys», чтобы найти файлы, относящиеся к настройкам электропитания.

grep -r power /sys/

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

Ошибки Dev Null Grep

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

grep -r power /sys/ 2>/dev/null
Dev Null Grep без ошибок<

Как видите, это гораздо легче читать.

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

ping google.com 1>/dev/null
Ошибки Dev Null Ping

На снимке экрана выше показано, что без перенаправления ping отображает обычный вывод, когда достигает

Используйте /dev/null, чтобы избавиться от ненужного вывода

а сеть онлайн, а как только она отключается, отображаются только сообщения об ошибках.

Вы можете перенаправить стандартный вывод и стандартный вывод в два разных места.

ping google.com 1>/dev/null 2>error.log

В этом случае сообщения stdout вообще не будут отображаться, а сообщения об ошибках будут сохраняться в файл error.log.

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

Иногда полезно избавиться от всего вывода. Есть два способа сделать это.

grep -r power /sys/ >/dev/null 2>&1

Строка >/dev/nullозначает «отправить стандартный вывод в /dev/null», а вторая часть, 2>&1, означает отправить стандартный вывод в стандартный вывод. В этом случае вам придется ссылаться на стандартный вывод как «&1», а не просто на «1». Написание «2>1» просто перенаправит стандартный вывод в файл с именем «1».

Здесь важно отметить, что порядок важен. Если вы поменяете параметры перенаправления следующим образом:

grep -r power /sys/ 2>&1 >/dev/null

это не будет работать так, как задумано. Это потому, что как только 2>&1интерпретируется, stderr отправляется на стандартный вывод и отображается на экране. Далее, стандартный вывод подавляется при отправке в «/dev/null». Конечным результатом будет то, что вы увидите ошибки на экране вместо подавления всего вывода. Если вы не можете вспомнить правильный порядок, есть более простой способ перенаправления, который гораздо проще ввести:

grep -r power /sys/ &>/dev/null

В данном случае &>/dev/nullэквивалентно фразе «перенаправить стандартный вывод и стандартный вывод в это место».

Другие примеры, когда может быть полезно перенаправление на /dev/null

Предположим, вы хотите узнать, насколько быстро ваш диск может читать последовательные данные. Тест не очень точный, но достаточно точный. Для этого вы можете использовать dd, но dd либо выводит на стандартный вывод, либо ему может быть дано указание записать в файл. С помощью of=/dev/nullвы можете указать dd записать в этот виртуальный файл. Здесь даже не нужно использовать перенаправления оболочки. if=указывает расположение входного файла для чтения; of=указывает имя выходного файла, куда писать.

dd if=debian-disk.qcow2 of=/dev/null status=progress bs=1M iflag=direct
Дев Нуль Дд

В некоторых случаях вам может потребоваться узнать, насколько быстро вы сможете загружать

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

мости писать на свой диск. Достаточно просто: не пишите в обычный файл, а пишите в «/dev/null».

wget -O /dev/null http://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso

Заключение

Надеемся, примеры в этой статье вдохновят вас на поиск собственных творческих способов использования «/dev/null».

Знаете интересный вариант использования этого специального файла устройства? Оставьте комментарий ниже и поделитесь своими знаниями!

Другие примеры, когда может быть полезно перенаправление на /dev/null

Заключение

ПОХОЖИЕ СТАТЬИ

Популярные записи