Поиск по сайту:

/dev/нуль в Linux


/dev/null в Linux — это файл нулевого устройства. Это удалит все записанное в него и вернет EOF при чтении.

Это хак из командной строки, который действует как пылесос, который всасывает все, что ему брошено.

Давайте посмотрим, что это значит и что мы можем сделать с этим файлом.

/dev/null Свойства

Это вернет символ конца файла (EOF), если вы попытаетесь прочитать его с помощью команды cat.

cat /dev/null

Это действительный файл, который можно проверить с помощью

stat /dev/null

Это дает мне вывод

  File: /dev/null
  Size: 0               Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d   Inode: 5           Links: 1     Device type: 1,3
Access: (0666/crw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-02-04 13:00:43.112464814 +0530
Modify: 2020-02-04 13:00:43.112464814 +0530
Change: 2020-02-04 13:00:43.112464814 +0530

Это показывает, что этот файл имеет размер 0 байт, для него выделено ноль блоков. Права доступа к файлу также установлены таким образом, что любой может читать/записывать его, но не может его выполнять.

Поскольку это не исполняемый файл, мы не можем использовать конвейер с оператором | для перенаправления на /dev/null. Единственный способ — использовать перенаправления файлов (>, >> или <, <<).

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

Давайте теперь рассмотрим некоторые распространенные варианты использования /dev/null.

Перенаправление на /dev/null в Linux

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

Например, мы можем попробовать отбрасывать сообщения echo, используя этот трюк.

echo 'Hello from JournalDev' > /dev/null

Вы не получите никакого вывода, так как он отбрасывается!

Давайте попробуем запустить команду неправильно и направить ее вывод в /dev/null.

cat --INCORRECT_OPTION > /dev/null

Мы по-прежнему получаем такой вывод:

cat: unrecognized option '--INCORRECT'
Try 'cat --help' for more information.

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

Мы также должны учитывать stderr.

Сбросить сообщения об ошибках

Давайте перенаправим stderr в /dev/null вместе с stdout. Для этого мы можем использовать файловый дескриптор для stderr(=2).

cat --INCORRECT_OPTION > /dev/null 2>/dev/null

Это даст нам то, что нам нужно!

Есть и другой способ сделать то же самое; сначала перенаправив stderr на stdout, а затем перенаправив stdout на /dev/null.

Синтаксис для этого будет:

command > /dev/null 2>&1

Обратите внимание на 2>&1 в конце. Мы перенаправляем stderr(2) на stdout(1). Мы используем &1, чтобы сообщить оболочке, что конечный файл является файловым дескриптором, а не именем файла.

cat --INCORRECT_OPTION > dev/null 2>&1

Поэтому, если мы используем 2>1, мы перенаправим stderr только в файл с именем 1. Это не то, что мы хотим!

Заключение

Надеюсь, это немного проясняет ситуацию, так что теперь вы можете использовать /dev/null в Linux, зная, что это значит! Не стесняйтесь задавать вопросы в разделе комментариев ниже.

Рекомендации

  • Вопрос о StackOverflow