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.

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

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

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

Источник

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

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

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

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

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

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

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

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

меню

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

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

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

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

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

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

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

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

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

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

Читайте также:  какой крем сделать для шоколадного бисквита

меню

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

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

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

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

Источник

/dev/null

/dev/null — специальный файл в системах класса EOF).

Создание

Псевдоустройство /dev/null считается символьным. Оно создаётся с помощью утилиты mknod следующим образом: в

В Solaris аналогичное действие будет иметь вид

Здесь FILE — имя для нового пустого устройства. На этапе установки системы оно создаётся таким образом со «стандартным» именем /dev/null.

Примеры использования

См. также

Полезное

Смотреть что такое «/dev/null» в других словарях:

/dev/null — (englisch null: dt. „nichts“) ist der Name einer speziellen virtuellen Gerätedatei, dem Nulldevice, auf UNIX und Unix ähnlichen Betriebssystemen, die jegliche Daten, die dorthin geschrieben werden, verwirft. Unter DOS und… … Deutsch Wikipedia

Dev/null — /dev/null ist der POSIX genormte Name einer speziellen virtuellen Gerätedatei auf UNIX und Unix ähnlichen Betriebssystemen. Details Das Gerät /dev/null dient als „Ausguss“ im Datenstrom. Alle Daten, die dorthin geschrieben werden, werden… … Deutsch Wikipedia

/dev/null — est un fichier spécial des systèmes d exploitation Unix. Ce pseudo périphérique (device, en anglais) sert à rediriger un contenu dont on n a pas besoin, et qui ne doit pas être sauvegardé ni affiché à l écran. Toute information envoyée vers ce… … Wikipédia en Français

/dev/null — In Unix like operating systems, /dev/null or the null device is a special file that discards all data written to it (but reports that the write operation succeeded) and provides no data to any process that reads from it (yielding EOF immediately) … Wikipedia

Dev Null — was an animated virtual reality character created in 1996 by Leo Laporte for MSNBC s computer and technology TV series, The Site. Espresso barista Dev talked with host Soledad O Brien each weeknight in a five minute segment. Laporte was awarded a … Wikipedia

/dev/null — noun a) A device file, present in Unix and Unix like operating systems, that discards all data written to it and yields no input. Its possible to suppress the compilers warnings by redirecting standard error to /dev/null. b) Nowhere; often… … Wiktionary

Null Dave — /dev/null Sur les systèmes de type Unix, il existe un pseudo périphérique (device, en anglais) spécial vers lequel on peut rediriger un contenu qui ne doit pas être sauvegardé ni affiché à l écran. Ce périphérique est appelé null et il est situé… … Wikipédia en Français

Null — Pour le musicien japonais, voir Kazuyuki K. Null. NULL est un mot clef présent dans de nombreux langages informatiques, et qui désigne l état d un pointeur qui n a pas de cible ou d une variable qui n a pas de valeur. La notion de valeur ou … Wikipédia en Français

/dev — (от англ. devices устройства) директория в системах типа UNIX, содержащая так называемые специальные файлы интерфейсы работы с драйверами ядра. Как правило (хотя и не всегда), /dev является обычной директорией в… … Википедия

Null (computer programming) — Null has several meanings in computer programming.;Null pointer or null reference * Null is a special pointer value (or other kind of object reference) used to signify that a pointer intentionally does not point to (or refer to) an object. Such a … Wikipedia

Источник

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

Обновл. 14 Окт 2021 |

С технической точки зрения /dev/null в Linux — это файл виртуального устройства. Программы и утилиты могут взаимодействовать с ним как с настоящим файлом: запрашивать данные, а также отправлять в него любую информацию. Но всё, что вы пишете в /dev/null, отправляется в пустоту и забывается (другими словами, отправляется в чёрную дыру). Чтобы понять, почему это полезно, вы должны сначала иметь базовое представление о стандартном потоке вывода данных (stdout) и стандартном потоке вывода ошибок (stderr).

Читайте также:  какой объем смеси должен съедать ребенок новорожденный

stdout и stderr

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

По умолчанию stdout и stderr связаны с окном терминала (или консолью). Это означает, что всё, что отправляется в stdout и stderr, обычно отображается на нашем экране. Но с помощью перенаправления вывода мы можем изменить это поведение. Например, мы можем перенаправить вывод stdout в файл. Таким образом, вместо отображения информации о выполнении команды на экране терминала, она будет сохранена в файле, который мы позже сможем прочитать. Или же можно перенаправить stdout на физическое устройство, скажем, на цифровой ЖК-дисплей.

1> используется для перенаправления стандартного вывода данных (stdout);

2> используется для перенаправления вывода сообщений об ошибках (stderr). Например, 2>/dev/null отправляет сообщения об ошибках в «чёрную дыру», а 2>/home/user/error.log — в файл error.log.

&> используется для перенаправления как стандартного вывода данных (stdout), так и вывода сообщений об ошибках (stderr).

/dev/null как средство избавления от ненужного вывода

Допустим, нам нужно найти файлы в каталоге /sys, которые относятся к настройкам питания:

В выводе команды будет много файлов, которые обычный пользователь (не root) не сможет прочитать (мы получим сообщение об ошибке «Отказано в доступе»). Эти сообщения загромождают терминал и затрудняют поиск. Поскольку ошибки «Отказано в доступе» являются частью stderr, то мы можем перенаправить их в «чёрную дыру», используя /dev/null:

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

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

ping ravesli.com 1>/dev/null

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

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

ping google.com 1>/dev/null 2>error.log

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

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

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

Часть >/dev/null означает «перенаправить данные из stdout в /dev/null», а часть 2>&1 означает «перенаправить данные из stderr в stdout». Таким образом мы перенаправили весь вывод команды в пустоту.

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

…то это сработает не так, как задумывалось. Часть 2>&1 перенаправит stderr в stdout, отобразит вывод на экране, после чего перенаправит stdout в /dev/null. Конечным результатом станет то, что вместо искомой информации вы увидите сообщения об ошибках. Если вы не можете запомнить правильный порядок составляющих, есть более простое перенаправление:

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

Еще примеры использования /dev/null

dd if= of=/dev/null status=progress bs=1M iflag=direct

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

Заключение

/dev/null — это файл виртуального устройства, который при записи в него всё отправляет в пустоту, а при чтении из него — считывает ноль. Истинный потенциал /dev/null очень хорошо раскрывается в различных bash-сценариях.

Читайте также:  что делать если вам поцарапали машину

Поделиться в социальных сетях:

20 забавных команд в Linux, которые оживят ваш терминал

Источник

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

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

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

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

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

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

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

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

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

stdout и stder

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

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

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

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

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

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

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

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

Используйте /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

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

Источник

Сказочный портал