/dev/null — одно из наиболее часто используемых специальных виртуальных устройств в Linux. В этой статье мы обсудим это и продемонстрируем различные способы его использования.
Что такое /Dev/Null в Linux
Linux рассматривает все как файл, будь то драйвер или устройство. Каталог /dev используется для хранения всех физических и виртуальных устройств. Если вы работали с разбиением диска, вы, возможно, видели, как используется каталог /dev. Например: /dev/sda, /dev/sdb1 и т. д.
Каждое из специальных виртуальных устройств обладает уникальными свойствами. Например, чтение из /dev/zero возвращает символы ASCII NUL. Некоторые из популярных виртуальных устройств включают в себя:
- /dev/null
- /dev/zero
- /dev/random
- /dev/urandom
/dev/null — это нулевое устройство, которое отбрасывает любые записанные на него данные. Однако он сообщает, что операция записи прошла успешно. В терминологии UNIX это нулевое устройство также называется битовым ведром или черной дырой.
Использование /Dev/Null в Linux
Свойства /Dev/Null
При попытке чтения из /dev/null возвращается символ EOF:
$ cat /dev/null
root@andreyex:~# |
Несмотря на свои уникальные особенности, /dev/null является допустимым файлом. Мы можем проверить это с помощью следующей команды:
$ stat /dev/null
root@andreyex:-# stat /dev/nu11 File: /dev/nul1 Size: 0 Device: 5h/5d Inode: 5 glocks: Links: Access: ( (0666/crw-rw-rw-) uid: (65534/ Access: 2023-04-21 01:26:47.820896809 +0000 I0 Block: 4096 character special file nobody) Device type: 1, 3 Gid: (65534/ nogroup) Modify: 2 :2023-04-21 01:26:47.820896809 +0000 Change: 2 2023-04-21 01:26:47.820896809 +0000 Birth: root@andreyex:~#
Основное использование
Все, что записывается в /dev/null, исчезает навсегда. Следующий пример демонстрирует это свойство:
$ echo "hello world" > /dev/null $ cat /dev/null
root@andreyex:~# echo "hello world" > /dev/null root@andreyex:~# cat /dev/nu11 root@andreyex:~# |
Здесь мы перенаправляем STDOUT команды echo на /dev/null . С помощью команды cat мы читаем содержимое файла /dev/null.
Поскольку /dev/null не хранит никаких данных, в выводе команды cat ничего нет.
Перенаправление выходных данных команды в /Dev/Null
Нужно запустить команду, не имея дело с ее выводом? Мы можем перенаправить данные в /dev/null для безопасного удаления. Для реализации этого метода требуется предварительное знание файловых дескрипторов: STDIN, STDOUT и STDERR.
Пример 1:
Проверьте первый пример:
$ echo "hello world" > /dev/null
root@ubuntu2204-1xc:~# echo "hello world" > /dev/nul1 root@ubuntu2204-1xc:~# |
Здесь мы перенаправляем STDOUT команды echo на /dev/null. Вот почему он не будет выводить ничего на экран консоли.
Пример 2.
Посмотрите следующий пример:
$ asdfghjkl > /dev/null
root@andreyex:~# asdfghjk1 > /dev/nu11 asdfghjk1: command not found root@andreyex:~# |
Здесь команды asdfghjkl не существует. Итак, Bash выдает ошибку. Однако сообщение об ошибке не было сброшено в /dev/null. Это потому, что сообщение об ошибке хранится в STDERR. Итак, нам также нужно указать перенаправление STDERR (2). Вот обновленная команда:
$ asdfghjkl 2> /dev/null
root@andreyex:~# asdfghjk1 2> /dev/nu11
root@andreyex:~# |
Пример 3:
Что, если мы хотим перенаправить и STDOUT, и STDERR на /dev/null? Структура команды будет выглядеть так:
$ <command> > /dev/null 2> /dev/null
root@andreyex:~# cat lorem-ipsum.txt > /dev/nu11 2> /dev/nu11 root@andreyex:~# |
Хотя эта структура полностью действительна, она многословна и избыточна. Есть способ резко сократить структуру: сначала перенаправить STDERR на STDOUT, а затем перенаправить STDOUT на /dev/null.
Проверьте обновленную команду:
$ <command> > /dev/null 2>&1
root@andreyex:~# cat 1orem-ipsum.txt > /dev/nu11 2>&1 root@andreyex:~# |
Здесь STDOUT перенаправляется на /dev/null. Затем мы перенаправляем STDERR (2) на STDOUT (1). «&1» сообщает оболочке, что пунктом назначения является файловый дескриптор, а не имя файла.
Теперь команда более эффективна для реализации.
Заключение
Мы узнали о /dev/null, нулевом устройстве в Linux. Мы также продемонстрировали, как это работает, на различных примерах. Эти методы широко используются в сценариях оболочки.
Удачных вычислений!