Dev null linux это

Глава 28. /dev/zero и /dev/null

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

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

Подавление вывода на stderr (from Пример 12-2).

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

Удаление содержимого файла, сохраняя, при этом, сам файл, со всеми его правами доступа (очистка файла) (из Пример 2-1 и Пример 2-2):

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

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

Подобно псевдоустройству /dev/null, /dev/zero так же является псевдоустройством, с той лишь разницей, что содержит нули. Информация, выводимая в этот файл, так же бесследно исчезает. Чтение нулей из этого файла может вызвать некоторые затруднения, однако это можно сделать, к примеру, с помощью команды od или шестнадцатиричного редактора. В основном, /dev/zero используется для создания заготовки файла с заданой длиной.

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

Еще одна область применения /dev/zero — «очистка» специального файла заданного размера, например файлов, монтируемых как loopback-устройства (см. Пример 13-6) или для безопасного удаления файла (см. Пример 12-42).

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

Источник

♾️ Что такое /dev/null в Linux?

С технической точки зрения «/dev/null» является файлом виртуального устройства.

Что касается программ, то они обрабатываются как реальные файлы.

Утилиты могут запрашивать данные из такого рода источников, а операционная система передает им данные.

Но вместо чтения с диска операционная система генерирует эти данные динамически.

Примером такого файла является «/dev/zero».

В этом случае, однако, вы будете записывать в файл устройства

Все, что вы пишете в «/dev/null», отбрасывается, забывается и выбрасывается в пустоту.

Чтобы понять, почему это полезно, вы должны сначала иметь представление о стандартном выводе и стандартной ошибке в операционных системах Linux или * nix.

stdout и stder

Утилита командной строки может генерировать два типа вывода.

Стандартный вывод отправляется на stdout.

Ошибки отправляются в stderr.

По умолчанию stdout и stderr связаны с окном вашего терминала (или консолью).

Это означает, что все, что отправлено на stdout и stderr, обычно отображается на вашем экране.

Но с помощью перенаправления оболочки вы можете изменить это поведение.

Например, вы можете перенаправить стандартный вывод в файл.

Таким образом, вместо отображения вывода на экране, он будет сохранен в файл, который вы сможете прочитать позже, или вы можете перенаправить стандартный вывод на физическое устройство, например, на цифровой светодиод или ЖК-дисплей.

  • С 2> вы перенаправляете стандартные сообщения об ошибках. Пример: 2> /dev/null или 2> /home/user/error.log.
  • С 1> вы перенаправляете стандартный вывод.
  • С &> вы перенаправляете как стандартную ошибку, так и стандартный вывод.
Читайте также:  Mac os как делать скрин

Используйте /dev/null, чтобы избавиться от вывода, который вам не нужен

Поскольку существует два типа вывода: стандартный вывод и стандартная ошибка, первый вариант использования – отфильтровать один тип или другой.

Это легче понять на практическом примере.

Допустим, вы ищете строку в «/sys», чтобы найти файлы, которые относятся к настройкам питания.

Будет много файлов, которые обычный пользователь без прав root не сможет прочитать.

Это приведет к множеству ошибок «Отказано в доступе».

Это затрудняет поиск результатов, которые вы ищете.

Поскольку ошибки «Permission denied» являются частью stderr, вы можете перенаправить их на «/dev/null».

Как видите, это гораздо легче читать.

В других случаях может быть полезно сделать обратное: отфильтровать стандартный вывод, чтобы вы могли видеть только ошибки.

На приведенном выше примере показано, что без перенаправления ping отображает свой обычный вывод, когда он может достичь конечного компьютера.

Во втором случае ничего не отображается, когда машина подключена к сети, но как только она отключается, отображаются только сообщения об ошибках.

Вы можете перенаправить как stdout, так и stderr в два разных места.

В этом случае сообщения стандартного вывода вообще не будут отображаться, а сообщения об ошибках будут сохраняться в файле «error.log».

Перенаправить весь вывод в /dev/null

Иногда полезно избавиться от всего вывода.

Есть два способа сделать это.

Строка > /dev/null означает «отправить stdout в /dev/null», а вторая часть, 2>&1, означает отправить stderr в stdout.

В этом случае вы должны ссылаться на стандартный вывод как «&1» вместо простого «1.».

Запись «2>1» просто перенаправит стандартный вывод в файл с именем «1».

Здесь важно отметить, что порядок важен.

Если вы измените параметры перенаправления следующим образом:

это не будет работать как задумано.

Это потому, что, как только 2>&1 интерпретируется, stderr отправляется на стандартный вывод и отображается на экране.

Затем stdout подавляется при отправке в «/dev/null».

В конечном итоге вы увидите ошибки на экране вместо того, чтобы подавлять все выходные данные.

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

В этом случае &>/dev/null эквивалентно сообщению «перенаправить как stdout, так и stderr в это местоположение».

Другие примеры, где это может быть полезно для перенаправления в /dev/null

Скажем, вы хотите увидеть, как быстро ваш диск может читать последовательные данные.

Источник

Что означает «> /dev/null 2>&1»?

Долгое время никто не мог объяснить мне, что за амперсанды, знаки и цифры идут после юниксовых команд. При этом все примеры были показаны без объяснения — зачем все это? Гугл также не давал ответа. Особенно заметно использование таких команд во время работы компилятора. В этой статье постараюсь объяснить эти странные команды.

К примеру, у нас есть такая строчка:
cron job command > /dev/null 2>&1

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

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

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

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

Но часто к ним обращаются не по имени, а по номеру:
0 — STDIN, 1 — STDOUT и 2 — STDERR
По умолчанию, если вы не укажете номер, то будет подразумеваться STDOUT.

Читайте также:  What to choose linux or windows

В нашем примере видно, что команда направляет свой стандартный вывод в /dev/null (псевдоустройство, которое может принять произвольный объём данных, не сохраняя их совершенно нигде, следовательно, подавив стандартный вывод). Затем все ошибки (то есть STDERR) перенаправить в стандартный вывод. Необходимо поставить амперсанд «&» перед номером назначения.

Смысл вкратце — «весь вывод указанной команды спихнуть в черную дыру!«.
Это один из способов сделать программу по-настоящему безмолвной. Добавлю, что команда в примере аналогична команде cron job command >/dev/null 2>/dev/null

Официальный FAQ FreeBSD предупреждает: отправка данных в /dev/null/ перегревает ваш процессор 🙂

Источник

что такое /dev/null ?

Здравствуйте. У меня есть вопрос, который может показаться странным. Что такое /dev/null? Я очень часто встречаю на различных форумах например в графе «Откуда» некоторые пишут — «из /dev/null». Илиже в разговорах используют «это примеком отправится в /dev/null» (когда говорят о вещах которые совсем не связаны с *nixом). Пытаясь найти определение /dev/null я наткнулся на статейку в вики http://ru.wikipedia.org/wiki//dev/null, но из приведённого там определения особо не стало ясно как связывают /dev/null с местом жительства и т.д.

Re: что такое /dev/null ?

Это символьное устройство. Оно реализовано в *nix-системах, в т.ч. в Linux (см. drivers/char/mem.c). По FHS, оно должно находится здесь:

crw-rw-rw- 1 root root 1, 3 Сен 17 22:31 /dev/null

Устройство это замечательно тем, что для него всегда выполняются операции read (всегда возвращает 0) и write (всегда возвращает размер записываемых данных) без реального выполнения каких-либо действий.

Re: что такое /dev/null ?

попробуй «cat /dev/null»

Re: что такое /dev/null ?

read оттуда возвращает только eof, а не нули. А write никогда не вызывает переполнения.

Re: что такое /dev/null ?

Это такая штука, куда можно засунуть что угодно. А вот вытащить нельзя.

Re: что такое /dev/null ?

>The null device is typically used for disposing of unwanted output streams of a process, or as a convenient empty file for input streams. This is usually done by redirection.

>This entity is a common inspiration for technical jargon expressions and metaphors by Unix programmers, e.g. «please send complaints to /dev/null,» «my mail got archived in /dev/null,» and «redirect to /dev/null,» being jocular ways of saying, respectively: «don’t bother to send any complaints,» «my mail got deleted,» and «go to hell.» A famous advertisement for the Titanium PowerBook G4 read The Titanium Powerbook G4 Sends other UNIX boxes to /dev/null.

Re: что такое /dev/null ?

Спасибо большое всем ответившим и в частности Legioner за простое и очень понятное обьяснение которого я и ждал.

Источник

Что такое /dev/null и как его использовать в Bash

Linux — это интересная операционная система, в которой размещены некоторые виртуальные устройства для различных целей. Для программ, работающих в системе, эти виртуальные устройства действуют так, как будто это реальные файлы. Инструменты могут запрашивать и получать данные из этих источников. Данные генерируются ОС вместо того, чтобы считывать их с диска.

Одним из таких примеров является /dev/null . Это специальный файл, который присутствует в каждой системе Linux. Однако, в отличие от большинства других виртуальных файлов, вместо чтения он используется для записи. Все, что вы запишете в /dev/null , будет отброшено, забыто в пустоте. В системе UNIX он известен как нулевое устройство.

Зачем вам выбрасывать что-то в пустоту? Давайте посмотрим, что такое /dev/null и как он используется.

Читайте также:  Как обновить ос windows до выпуска

Предварительно

Прежде чем углубиться в использование /dev/null , мы должны иметь четкое представление о потоке данных stdout и stderr . Ознакомьтесь с этим коротким руководством по stdin, stderr и stdout.

Давайте сделаем небольшое уточнение. При запуске любой утилиты командной строки она генерирует два вывода. Вывод идет на stdout , а ошибка (если она возникла) — на stderr . По умолчанию оба этих потока данных связаны с терминалом.

Например, следующая команда выведет строку, заключенную в двойные кавычки. Здесь вывод сохраняется в stdout .

Следующая команда покажет нам статус выхода ранее запущенной команды.

Поскольку предыдущая команда была выполнена успешно, статус выхода равен 0. В противном случае статус выхода будет другим. Что произойдет, если вы попытаетесь выполнить недопустимую команду?

Теперь нам нужно разобраться в файловом дескрипторе. В экосистеме UNIX это целочисленные значения, присвоенные файлу. И stdout (дескриптор файла = 1), и stderr (дескриптор файла = 2) имеют определенный дескриптор файла. Используя дескриптор файла (1 и 2), мы можем перенаправить stdout и stderr в другие файлы.

Для начала, следующий пример перенаправит stdout команды echo в текстовый файл. Здесь мы не указали дескриптор файла. Если он не указан, bash будет использовать stdout по умолчанию.

Следующая команда перенаправит stderr в текстовый файл.

меню

Использование /dev/null

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

Теперь мы готовы узнать, как использовать /dev/null . Сначала давайте проверим, как фильтровать обычный вывод и ошибки. В следующей команде grep попытается найти строку (hello, в данном случае) в каталоге «/sys».

Однако это вызовет множество ошибок, поскольку без привилегий root grep не может получить доступ к ряду файлов. В этом случае он выдаст ошибку «Permission denied». Теперь, используя перенаправление, мы можем получить более четкий результат.

Вывод выглядит намного лучше, верно? Ничего! В этом случае у grep нет доступа ко многим файлам, а в тех, что есть, нет строки «hello».

В следующем примере мы будем пинговать Google.

Однако мы не хотим видеть все эти успешные результаты пинга. Вместо этого мы хотим сосредоточиться только на ошибках, когда ping не смог достичь Google. Как нам это сделать?

Здесь содержимое stdout сбрасывается в /dev/null , оставляя только ошибки.

Перенаправить весь вывод в /dev/null

В некоторых ситуациях вывод может оказаться бесполезным. Используя перенаправление, мы можем сбросить весь вывод в пустоту.

Давайте немного разобьем эту команду. Сначала мы сбрасываем весь stdout в /dev/null . Затем, во второй части, мы говорим bash отправить stderr в stdout . В этом примере выводить нечего. Однако, если вы запутались, вы всегда можете проверить, успешно ли выполнилась команда.

Значение равно 2, потому что команда выдала много ошибок.

Если вы склонны забывать файловый дескриптор stdout и stderr, следующая команда подойдет как нельзя лучше. Это более обобщенный формат предыдущей команды. И stdout, и stderr будут перенаправлены в /dev/null.

меню

Другие примеры

Это интересный пример. Знаете инструмент dd ? Это мощный инструмент для преобразования и копирования файлов. Узнайте больше о dd . Используя dd , мы можем проверить скорость последовательного чтения вашего диска. Конечно, это не точное измерение. Однако для быстрого теста это довольно полезно.

Здесь я использовал Ubuntu 18.04.4 ISO в качестве большого файла.

Аналогичным образом вы также можете проверить скорость загрузки вашего интернет-соединения.

Надеемся, у вас есть четкое понимание того, что такое файл /dev/null. Это специальное устройство, которое при записи в него отбрасывает, а при чтении из него считывает null. Истинный потенциал этой интересной возможности заключается в интересных bash-скриптах.

Источник

Оцените статью