Модули

  • @All

    Что такое /dev/null и почему туда направляют данные?

    Если вы активно работаете в командной строке, то, вероятно, использовали файл /dev/null для следующих целей:

    1️⃣ Убрать из вывода всю ненужную инфу (предупреждения, ошибки и т.д.):

    find / -name "*.conf" 2>/dev/null

    2️⃣ Передать утилите пустой ресурс в качестве аргумента. Делаться это может с целью исключения пользовательских и системных конфигов и применения дефолтных настроек на стороне программы:

    picom --config /dev/null

    3️⃣ Полностью очистить файл:

    cat /dev/null > bigfile

    ❓ Окей, принято, а чем является этот самый /dev/null?

    В сущности - это cимвольное псевдо-устройство, которое создается на этапе запуска системы и работает с потоками данных:
    ls -l
    crw-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/null

    File: /dev/null
    Size: 0 Blocks: 0 IO Block: 4096   character special file
    Access: (0666/crw-rw-rw-)  Uid: (0/ root)   Gid: (0/ root)
    Access: 2025-01-25 14:42:20.101000002 +0300
    ...

    Этот вывод показывает, что файл имеет размер 0 байт, для него выделено 0 блоков на диске, дата создания = дата запуска системы:

    who -b
    system boot  2025-01-25 14:42

    Права доступа установлены таким образом, что любой может читать и записывать в него, но никто не может его выполнять:

    echo hello | /dev/null
    -bash2: /dev/null: Permission denied

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

    Ответов: 0 Репостов: 0 Лайков: 6
    0/360