С технической точки зрения «/dev/null» — это файл виртуального устройства. Что касается программ, с ними обращаются так же, как с реальными файлами. Утилиты могут запрашивать данные из такого источника, а операционная система передает им данные. Но вместо чтения с диска операционная система генерирует эти данные динамически. Примером такого файла является «/dev/zero».
Однако в этом случае вы будете производить запись в файл устройства. Все, что вы пишете в «/dev/null», отбрасывается, забывается, выбрасывается в пустоту. Чтобы понять, почему это полезно, вы должны сначала иметь базовое представление о стандартном выводе и стандартных ошибках в операционных системах типа Linux или *nix.
Читайте также: Как использовать команду Tee в Linux
стандартный вывод и стандартный вывод
Утилита командной строки может генерировать два типа вывода. Стандартный вывод отправляется на стандартный вывод. Ошибки отправляются в stderr.
По умолчанию stdout и stderr связаны с вашим окном терминала (или консолью). Это означает, что все, отправленное на стандартный вывод и стандартный поток ошибок, обычно отображается на вашем экране. Но с помощью перенаправления оболочки вы можете изменить это поведение. Например, вы можете перенаправить стандартный вывод в файл. Таким образом, вместо вывода вывода на экран, он будет сохранен в файл,
Contents
стандартный вывод и стандартный вывод
жете перенаправить стандартный вывод на физическое устройство, скажем, на цифровой светодиодный или ЖК-дисплей.Если вы хотите узнать больше, можно получить оценку полная статья о каналах и перенаправлениях .
- С помощью
2>
вы перенаправляете стандартные сообщения об ошибках. Пример:2>/dev/null
или2>/home/user/error.log
. - С помощью
1>
вы перенаправляете стандартный вывод. - С помощью
&>
вы перенаправляете как стандартные ошибки, так и стандартный вывод.
Читайте также: 6 самых полезных команд Linux для новых пользователей
Используйте /dev/null, чтобы избавиться от ненужного вывода
Поскольку существует два типа вывода: стандартный вывод и стандартная ошибка, первый вариант использования — отфильтровать тот или иной тип. Это легче понять на практическом примере. Допустим, вы ищете строку в «/sys», чтобы найти файлы, относящиеся к настройкам электропитания.
grep -r power /sys/
Будет много файлов, которые обычный пользователь без полномочий root не сможет прочитать. Это приведет к множеству ошибок «Отказано в доступе».
Это загромождает выходные данные и затрудняет поиск нужных результатов. Поскольку ошибки «Отказано в доступе» являются частью stderr, вы можете перенаправить их в «/dev/null».
grep -r power /sys/ 2>/dev/null
Как видите, это гораздо легче читать.
В других случаях может быть полезно поступить наоборот: отфильтровать стандартный вывод, чтобы видеть только ошибки.
ping google.com 1>/dev/null
На снимке экрана выше показано, что без перенаправления 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».
Знаете интересный вариант использования этого специального файла устройства? Оставьте комментарий ниже и поделитесь своими знаниями!