Dev null что это
Перейти к содержимому

Dev null что это

  • автор:

Как работает файл /dev/null в Linux

/dev/null в Linux — это файл нулевого устройства. Он удаляет все записанное в него и возвращает при чтении EOF ( End of File) .

Проще говоря, это такой специальный хак командной строки, который действует как пылесос — затягивает все, что ему брошено.

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

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

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

Валидность файла можно проверить с помощью:

Данная команда вернет:

 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 мы сообщаем оболочке, что конечный файл на самом деле является файловым дескриптором.

Поэтому если мы используем 2>1 (без амперсанда), мы просто перенаправим stderr в файл по имени 1 — а это не то, что нам нужно.

Dev null что это

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

Подавление вывода на stdout.

cat $filename >/dev/null # Содержимое файла $filename не появится на stdout.
rm $badname 2>/dev/null # Сообщение об ошибке "уйдет в никуда".

Подавление вывода, как на stdout, так и на stderr.

cat $filename 2>/dev/null >/dev/null # Если "$filename" не будет найден, то вы не увидите сообщения об ошибке. # Если "$filename" существует, то вы не увидите его содержимое. # Таким образом, вышеприведенная команда ничего не выводит на экран. # # Такая методика бывает полезной, когда необходимо лишь проверить код завершения команды #+ и нежелательно выводить результат работы команды на экран. # # cat $filename &>/dev/null # дает тот же результат, автор примечания Baris Cicek.
cat /dev/null > /var/log/messages # : > /var/log/messages дает тот же эффект, но не порождает дочерний процесс. cat /dev/null > /var/log/wtmp

Автоматическая очистка содержимого системного журнала (logfile) (особенно хороша для борьбы с надоедливыми рекламными идентификационными файлами ( «cookies» )):

Пример 28-1. Удаление cookie-файлов

if [ -f ~/.netscape/cookies ] # Удалить, если имеются. then rm -f ~/.netscape/cookies fi ln -s /dev/null ~/.netscape/cookies # Теперь, все cookie-файлы, вместо того, чтобы сохраняться на диске, будут "вылетать в трубу".

Пример 28-2. Создание файла подкачки (swapfile), с помощью /dev/zero

#!/bin/bash # Создание файла подкачки. # Этот сценарий должен запускаться с правами root. ROOT_UID=0 # Для root -- $UID 0. E_WRONG_USER=65 # Не root? FILE=/swap BLOCKSIZE=1024 MINBLOCKS=40 SUCCESS=0 if [ "$UID" -ne "$ROOT_UID" ] then echo; echo "Этот сценарий должен запускаться с правами root."; echo exit $E_WRONG_USER fi blocks=$ # По-умолчанию -- 40 блоков, #+ если размер не задан из командной строки. # Ниже приводится эквивалентный набор команд. # -------------------------------------------------- # if [ -n "$1" ] # then # blocks=$1 # else # blocks=$MINBLOCKS # fi # -------------------------------------------------- if [ "$blocks" -lt $MINBLOCKS ] then blocks=$MINBLOCKS # Должно быть как минимум 40 блоков. fi echo "Создание файла подкачки размером $blocks блоков (KB)." dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks # "Забить" нулями. mkswap $FILE $blocks # Назначить как файл подкачки. swapon $FILE # Активировать. echo "Файл подкачки создан и активирован." exit $SUCCESS

Пример 28-3. Создание электронного диска

#!/bin/bash # ramdisk.sh # "электронный диск" -- это область в ОЗУ компьютера #+ с которой система взаимодействует как с файловой системой. # Основное преимущество -- очень высокая скорость чтения/записи. # Недостатки -- энергозависимость, уменьшение объема ОЗУ, доступного системе, # относительно небольшой размер. # # Чем хорош электронный диск? # При хранении наборов данных, таких как таблиц баз данных или словарей, на электронном диске #+ вы получаете высокую скорость работы с этими наборами, поскольку время доступа к ОЗУ # неизмеримо меньше времени доступа к жесткому диску. E_NON_ROOT_USER=70 # Сценарий должен запускаться с правами root. ROOTUSER_NAME=root MOUNTPT=/mnt/ramdisk SIZE=2000 # 2K блоков (измените, если это необходимо) BLOCKSIZE=1024 # размер блока -- 1K (1024 байт) DEVICE=/dev/ram0 # Первое устройство ram username=`id -nu` if [ "$username" != "$ROOTUSER_NAME" ] then echo "Сценарий должен запускаться с правами root." exit $E_NON_ROOT_USER fi if [ ! -d "$MOUNTPT" ] # Проверка наличия точки монтирования, then #+ благодаря этой проверке, при повторных запусках сценария mkdir $MOUNTPT #+ ошибки возникать не будет. fi dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # Очистить электронный диск. mke2fs $DEVICE # Создать файловую систему ext2. mount $DEVICE $MOUNTPT # Смонтировать. chmod 777 $MOUNTPT # Сделать электронный диск доступным для обычных пользователей. # Но при этом, только root сможет его отмонтировать. echo "Электронный диск \"$MOUNTPT\" готов к работе." # Теперь электронный диск доступен для любого пользователя в системе. # Внимание! Электронный диск -- это энергозависимое устройство! Все данные, хранящиеся на нем, #+ будут утеряны при остановке или перезагрузке системы. # Если эти данные представляют для вас интерес, то сохраняйте их копии в обычном каталоге. # После перезагрузки, чтобы вновь создать электронный диск, запустите этот сценарий. # Простое монтирование /mnt/ramdisk, без выполнения подготовительных действий, не будет работать. exit 0
Назад К началу Вперед
/proc Наверх Отладка сценариев

Что значит /dev/null 2>&1

Шел бы ты, мальчик, в /dev/null. Знать бы еще, куда кого-то только что послал.

Вот пример команды:

wibble > /dev/null 2>&1

Перенаправление вывода

Операторы greater-thans (>) в командах, переадресовывают вывод программы куда-нибудь. В данном случае, кое-что переадресовывается в /dev/null, и кое-что переадресовывается в &1.

Стандартные ввод, вывод и ошибка

Есть три стандартных значения ввода и вывода для программ. Стандартный ввод обычно получают от клавиатуры, если это — диалоговая программа, или из программы, если она обрабатывает вывод другой программы. Программа обычно выводит в стандартной вывод, и иногда выводит в стандартную ошибку. Это три дескриптора файла (Вы можете представить их как «каналы данных») называются: STDIN, STDOUT и STDERR.

Иногда их не именуют, а нумеруют! Встроенные нумерации для них соответственно — 0, 1 и 2. По умолчанию, если Вы не указывете номер или явно указываете номер 1, Вы имеете дело с STDOUT.

В данном случае, Вы видите, что команда выше переадресовывает стандартный вывод в/dev/null (часто называемый bit-bucket [битоприемник]), который является местом, куда Вы можете скинуть что-нибудь не нужное, затем переадресовывая стандартную ошибку в стандартный вывод.

Короткое объяснение этому, «весь вывод этой команды, нужно спихнуть в черную дыру.» Это — один хороший способ заставить программу быть действительно безмолвной!

Авторизуйтесь для добавления комментариев!

Почтовый сервер Mikrotik VPN 3proxy Шифрование Squid Резервное копирование Защита почты Виртуальные машины Настройка сервера java kvm Групповые политики SELinux OpenVPN IPFW WDS Lightsquid Samba firewalld systemd Mobile libvirt Remote desktop WiFi Iptables NAT Postfix Dovecot Удаление данных Софт Безопасность Winbox User agent Хостинг Передача данных Онлайн сервисы Privacy LetsEncrypt VPN сервер Настройка прокси RRDTool sendmail Rsync Linux SSH Система Windows Синхронизация Облако fail2ban FreeBSD

Что такое /Dev/Null 3 мин для чтения

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

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

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

L inux рассматривает все как файл, будь то драйвер или устройство. Каталог /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 ничего нет.

Читать Лучшие эмуляторы игровой консоли для Linux

Перенаправление выходных данных команды в /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? Структура команды будет выглядеть так:

$ > /dev/null 2> /dev/null
root@andreyex:~# cat lorem-ipsum.txt > /dev/nu11 2> /dev/nu11 root@andreyex:~# |

Хотя эта структура полностью действительна, она многословна и избыточна. Есть способ резко сократить структуру: сначала перенаправить STDERR на STDOUT, а затем перенаправить STDOUT на /dev/null.

Проверьте обновленную команду:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *