ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Что такое /Dev/Null

Что такое /Dev/Null

/dev/null — одно из наиболее часто используемых специальных виртуальных устройств в Linux. В этой статье мы обсудим это и продемонстрируем различные способы его использования.

 

Что такое /Dev/Null в Linux

Linux рассматривает все как файл, будь то драйвер или устройство. Каталог /dev используется для хранения всех физических и виртуальных устройств. Если вы работали с разбиением диска, вы, возможно, видели, как используется каталог /dev. Например: /dev/sda, /dev/sdb1 и т. д.

Каждое из специальных виртуальных устройств обладает уникальными свойствами. Например, чтение из /dev/zero возвращает символы ASCII NUL. Некоторые из популярных виртуальных устройств включают в себя:

 

/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. Мы также продемонстрировали, как это работает, на различных примерах. Эти методы широко используются в сценариях оболочки.

Удачных вычислений!

Exit mobile version