Модули
-
Что такое /dev/null и почему туда направляют данные?
Если вы активно работаете в командной строке, то, вероятно, использовали файл /dev/null для следующих целей:
1️⃣ Убрать из вывода всю ненужную инфу (предупреждения, ошибки и т.д.):
find / -name "*.conf" 2>/dev/null2️⃣ Передать утилите пустой ресурс в качестве аргумента. Делаться это может с целью исключения пользовательских и системных конфигов и применения дефолтных настроек на стороне программы:
picom --config /dev/null3️⃣ Полностью очистить файл:
cat /dev/null > bigfile❓ Окей, принято, а чем является этот самый /dev/null?
В сущности - это cимвольное псевдо-устройство, которое создается на этапе запуска системы и работает с потоками данных:
ls -lcrw-rw-rw- 1 root root 1, 3 Sep 6 08:37 nullО типе устройства говорит первый бит режима файла
- c "character".Ресурс удаляет все записанное в него и возвращает при чтении EOF (End of File). Когда мы взаимодействуем с
/dev/null, неявно отрабатывает специальный драйвер ядра, в который и зашита логика.Если интересно, можно порыться в исходниках с реализацией:
drivers/char/mem.c(https://github.com/torvalds/linux/blob/master/drivers/char/mem.c). Код имеет отношение не только к /dev/null, но и к другим символьным устройствам.Развернем более подробную информацию:
stat /dev/nullFile: /dev/nullSize: 0 Blocks: 0 IO Block: 4096 character special fileAccess: (0666/crw-rw-rw-) Uid: (0/ root) Gid: (0/ root)Access: 2025-01-25 14:42:20.101000002 +0300
...Этот вывод показывает, что файл имеет размер 0 байт, для него выделено 0 блоков на диске, дата создания = дата запуска системы:
who -bsystem boot 2025-01-25 14:42Права доступа установлены таким образом, что любой может читать и записывать в него, но никто не может его выполнять:
echo hello | /dev/null-bash2: /dev/null: Permission deniedПоскольку файл не исполняемый, мы не можем использовать конвейер |. Единственный способ — использовать перенаправление файлов >, >>.