- What is Processes can’t be detached if they have any connections to the local TTY. This replaces FD 0, stdin, with a handle on /dev/null . 4 Answers 4 nohup myscript.sh >myscript.log 2>&1 /dev/null Вывод выглядит намного лучше, верно? Ничего! В этом случае у grep нет доступа ко многим файлам, а в тех, что есть, нет строки "hello". В следующем примере мы будем пинговать Google. Однако мы не хотим видеть все эти успешные результаты пинга. Вместо этого мы хотим сосредоточиться только на ошибках, когда ping не смог достичь Google. Как нам это сделать? Здесь содержимое stdout сбрасывается в /dev/null , оставляя только ошибки. Перенаправить весь вывод в /dev/null В некоторых ситуациях вывод может оказаться бесполезным. Используя перенаправление, мы можем сбросить весь вывод в пустоту. $ grep -r hello /sys/ > /dev/null 2>&1 Давайте немного разобьем эту команду. Сначала мы сбрасываем весь stdout в /dev/null . Затем, во второй части, мы говорим bash отправить stderr в stdout . В этом примере выводить нечего. Однако, если вы запутались, вы всегда можете проверить, успешно ли выполнилась команда. Значение равно 2, потому что команда выдала много ошибок. Если вы склонны забывать файловый дескриптор stdout и stderr, следующая команда подойдет как нельзя лучше. Это более обобщенный формат предыдущей команды. И stdout, и stderr будут перенаправлены в /dev/null. $ grep -r hello /sys/ &> /dev/null Другие примеры Это интересный пример. Знаете инструмент dd ? Это мощный инструмент для преобразования и копирования файлов. Узнайте больше о dd . Используя dd , мы можем проверить скорость последовательного чтения вашего диска. Конечно, это не точное измерение. Однако для быстрого теста это довольно полезно. $ dd if= of=/dev/null status=progress bs=1M iflag=direct Здесь я использовал Ubuntu 18.04.4 ISO в качестве большого файла. Аналогичным образом вы также можете проверить скорость загрузки вашего интернет-соединения. Надеемся, у вас есть четкое понимание того, что такое файл /dev/null. Это специальное устройство, которое при записи в него отбрасывает, а при чтении из него считывает null. Истинный потенциал этой интересной возможности заключается в интересных bash-скриптах. Источник Черная дыра Linux: что такое нулевое устройство и как его можно использовать? Мы уже неоднократно говорили про то, что основной принцип Linux-дистрибутивов звучит как «все есть файл». Среди огромного множества всего, что можно назвать файлом, согласно этому подходу, есть вещи, представляющие особый интерес. Одной из таких вещей является так называемое «нулевое устройство» или /dev/null. Про то, что это такое и как можно это «устройство» использовать поговорим дальше. Среди подписчиков канала проходит розыгрыш. Чтобы принять в нем участие подпишитесь на канал и перейдите по ссылке ниже. Таким образом убьете двух зайцев: будете получать интересный и полезный контент по Linux и получите возможность стать обладателем одного из интересных призов. Конкурс на 1000 подписчиков на канале Просто Код Обещанный конкурс в связи с 1000 подписчиков на канале Просто Код объявляю открытым! Долго думал, как его организовать и провести, наконец мысли сошлись в единый паззл. Условия конкурса Принять участие могут только подписчики канала Просто Код, данный пост будет доступен только им. Так как Дзен не позволяет получать данные о подписчиках, то… Что такое /dev/null? Это специальный файл, который является виртуальным устройством (то есть, устройством не связанным с реальным, физическим оборудованием вашего ПК) и который, в отличии от других виртуальных файлов Linux, используется для записи в него данных. При этом, все что вы в него будете записывать будет отброшено, забыто, стерто. Этакая черная дыра, поглощающая все, что в нее попадает и ничего не отдающая обратно. Для чего же необходимо направлять данные в эту «черную дыру»? Рассмотрим популярные сценарии использования. Перенаправление вывода в /dev/null Помните про стандартные потоки ввода/вывода/ошибки, про которые мы говорили в предыдущей заметке? Именно работа с ними явно покажет, как и зачем можно использовать нулевое устройство. Вспоминаем, что при запуске любой программы в Linux она генерирует два стандартных потока - stdout (поток вывода) и stderr (поток ошибки). Каждый из них имеет численное обозначение, называемое также файловый дескриптор - stdout обозначается как 1, stderr как 2. И опять-таки, используя эти дескрипторы мы можем перенаправить потоки в файлы. Но что если, запуская команду, мы знаем, что там будут ошибки и показывать их в выводе просто-напросто не нужно? Для такого случая как раз и подойдет нулевое устройство. Например, давайте попробуем найти строку hello в системном каталоге /sys при помощи швейцарского ножа grep. Источник
- 4 Answers 4
- What Is /Dev/Null
- What Is /Dev/Null in Linux
- Using /Dev/Null in Linux
- Redirecting the Command Outputs to /Dev/Null
- Conclusion
- About the author
- Sidratul Muntaha
- Что такое /dev/null и как его использовать в Bash
- Предварительно
- Использование /dev/null
- Перенаправление вывода в /dev/null
- Перенаправить весь вывод в /dev/null
- Другие примеры
- Черная дыра Linux: что такое нулевое устройство и как его можно использовать?
- Что такое /dev/null?
- Перенаправление вывода в /dev/null
What is
Processes can’t be detached if they have any connections to the local TTY. This replaces FD 0, stdin, with a handle on /dev/null .
4 Answers 4
nohup myscript.sh >myscript.log 2>&1
will move to background the command, outputting both stdout and stderr to myscript.log without waiting for any input.
Redirecting /dev/null to stdin will give an immediate EOF to any read call from that process. This is typically useful to detach a process from a tty (such a process is called a daemon). For example, when starting a background process remotely over ssh, you must redirect stdin to prevent the process waiting for local input.
Another reason to redirect to /dev/null is to prevent an unused file descriptor being created for stdin. This can minimize the total open file handles when you have many long running processes.
It is a way to close stdin , as if EOF ( ^D ) were sent to it. It can be used as in this example with the mail command to signify it that the command should no more expect input from stdin .
It is also often used to daemonize processes (Stop 6 of the recommended approach for creating well-behaved daemons)
What Is /Dev/Null
The /dev/null is one of the most commonly used special virtual devices on Linux. In this guide, we will discuss about it and showcase the various ways of using it.
What Is /Dev/Null in Linux
Linux treats everything as a file, be it a driver or a device. The /dev directory is used to store all the physical and virtual devices. If you worked with disk partitioning, you may have seen the /dev directory in use. For example: /dev/sda, /dev/sdb1, etc.
Each of the special virtual devices come with unique properties. For example, reading from /dev/zero returns the ASCII NUL characters. Some of the popular virtual devices include:
The /dev/null is a null device that discards any data that is written to it. However, it reports back that the write operation is successful. In UNIX terminology, this null device is also referred to as the bit bucket or black hole.
Using /Dev/Null in Linux
Properties of /Dev/Null
When trying to read from the /dev/null, it returns an EOF character:
Despite its unique features, /dev/null is a valid file. We can verify it using the following command:
Basic Usage
Anything that is written to /dev/null vanishes for good. The following example demonstrates this property:
Here, we redirect the STDOUT of the echo command to the /dev/null. Using the cat command, we read the content of the /dev/null.
Since /dev/null doesn’t store any data, there’s nothing in the output of the cat command.
Redirecting the Command Outputs to /Dev/Null
Need to run a command without dealing with its output? We can redirect the data to the /dev/null to discard safely. To implement this technique, it requires prior knowledge of file descriptors: STDIN, STDOUT, and STDERR.
Example 1:
Check out the first example:
Here, we redirect the STDOUT of the echo command to /dev/null. That’s why it won’t produce any output in the console screen.
Example 2:
Check out the next example:
Here, the asdfghjkl command doesn’t exist. So, Bash produces an error. However, the error message didn’t get flushed to /dev/null. It’s because the error message is stored in STDERR. So, we need to specify the STDERR (2) redirection as well. Here’s the updated command:
Example 3:
What if we want to redirect both STDOUT and STDERR to /dev/null? The command structure would look like this:
While this structure is completely valid, it’s verbose and redundant. There’s a way to shorten the structure dramatically: redirecting STDERR to STDOUT first, then redirecting STDOUT to /dev/null.
Check out the updated command:
Here, STDOUT is redirected to /dev/null. Then, we redirect the STDERR (2) to STDOUT (1). The “&1” describes to the shell that the destination is a file descriptor, not a file name.
Now, the command is more efficient to implement.
Conclusion
We learned about /dev/null, the null device in Linux. We also demonstrated how it operates using various examples. These techniques are widely used in shell scripting.
Interested in learning more? Check out the Bash programming sub-category that contains numerous guides on various concepts of Bash scripting.
About the author
Sidratul Muntaha
Student of CSE. I love Linux and playing with tech and gadgets. I use both Ubuntu and Linux Mint.
Что такое /dev/null и как его использовать в Bash
Linux - это интересная операционная система, в которой размещены некоторые виртуальные устройства для различных целей. Для программ, работающих в системе, эти виртуальные устройства действуют так, как будто это реальные файлы. Инструменты могут запрашивать и получать данные из этих источников. Данные генерируются ОС вместо того, чтобы считывать их с диска. Одним из таких примеров является /dev/null . Это специальный файл, который присутствует в каждой системе Linux. Однако, в отличие от большинства других виртуальных файлов, вместо чтения он используется для записи. Все, что вы запишете в /dev/null , будет отброшено, забыто в пустоте. В системе UNIX он известен как нулевое устройство. Зачем вам выбрасывать что-то в пустоту? Давайте посмотрим, что такое /dev/null и как он используется.
Предварительно
Прежде чем углубиться в использование /dev/null , мы должны иметь четкое представление о потоке данных stdout и stderr . Ознакомьтесь с этим коротким руководством по stdin, stderr и stdout.
Давайте сделаем небольшое уточнение. При запуске любой утилиты командной строки она генерирует два вывода. Вывод идет на stdout , а ошибка (если она возникла) - на stderr . По умолчанию оба этих потока данных связаны с терминалом.
Например, следующая команда выведет строку, заключенную в двойные кавычки. Здесь вывод сохраняется в stdout .
Следующая команда покажет нам статус выхода ранее запущенной команды.
Поскольку предыдущая команда была выполнена успешно, статус выхода равен 0. В противном случае статус выхода будет другим. Что произойдет, если вы попытаетесь выполнить недопустимую команду?
Теперь нам нужно разобраться в файловом дескрипторе. В экосистеме UNIX это целочисленные значения, присвоенные файлу. И stdout , и stderr имеют определенный дескриптор файла: stdout = 1 , stderr = 2 . Используя дескриптор файла (1 и 2), мы можем перенаправить stdout и stderr в другие файлы.
Cледующий пример перенаправит stdout команды echo в текстовый файл. Здесь мы не указали дескриптор файла. Если он не указан, bash будет использовать stdout по умолчанию.
Следующая команда перенаправит stderr в текстовый файл.
Использование /dev/null
Перенаправление вывода в /dev/null
Теперь мы готовы узнать, как использовать /dev/null . Сначала давайте проверим, как фильтровать обычный вывод и ошибки. В следующей команде grep попытается найти строку (hello, в данном случае) в каталоге "/sys".
Однако это вызовет множество ошибок, поскольку без привилегий root grep не может получить доступ к ряду файлов. В этом случае он выдаст ошибку "Permission denied". Теперь, используя перенаправление, мы можем получить более четкий результат.
$ grep -r hello /sys/ 2> /dev/null
Вывод выглядит намного лучше, верно? Ничего! В этом случае у grep нет доступа ко многим файлам, а в тех, что есть, нет строки "hello".
В следующем примере мы будем пинговать Google.
Однако мы не хотим видеть все эти успешные результаты пинга. Вместо этого мы хотим сосредоточиться только на ошибках, когда ping не смог достичь Google. Как нам это сделать?
Здесь содержимое stdout сбрасывается в /dev/null , оставляя только ошибки.
Перенаправить весь вывод в /dev/null
В некоторых ситуациях вывод может оказаться бесполезным. Используя перенаправление, мы можем сбросить весь вывод в пустоту.
$ grep -r hello /sys/ > /dev/null 2>&1
Давайте немного разобьем эту команду. Сначала мы сбрасываем весь stdout в /dev/null . Затем, во второй части, мы говорим bash отправить stderr в stdout . В этом примере выводить нечего. Однако, если вы запутались, вы всегда можете проверить, успешно ли выполнилась команда.
Значение равно 2, потому что команда выдала много ошибок.
Если вы склонны забывать файловый дескриптор stdout и stderr, следующая команда подойдет как нельзя лучше. Это более обобщенный формат предыдущей команды. И stdout, и stderr будут перенаправлены в /dev/null.
$ grep -r hello /sys/ &> /dev/null
Другие примеры
Это интересный пример. Знаете инструмент dd ? Это мощный инструмент для преобразования и копирования файлов. Узнайте больше о dd . Используя dd , мы можем проверить скорость последовательного чтения вашего диска. Конечно, это не точное измерение. Однако для быстрого теста это довольно полезно.
$ dd if= of=/dev/null status=progress bs=1M iflag=direct
Здесь я использовал Ubuntu 18.04.4 ISO в качестве большого файла.
Аналогичным образом вы также можете проверить скорость загрузки вашего интернет-соединения.
Надеемся, у вас есть четкое понимание того, что такое файл /dev/null. Это специальное устройство, которое при записи в него отбрасывает, а при чтении из него считывает null. Истинный потенциал этой интересной возможности заключается в интересных bash-скриптах.
Черная дыра Linux: что такое нулевое устройство и как его можно использовать?
Мы уже неоднократно говорили про то, что основной принцип Linux-дистрибутивов звучит как «все есть файл». Среди огромного множества всего, что можно назвать файлом, согласно этому подходу, есть вещи, представляющие особый интерес. Одной из таких вещей является так называемое «нулевое устройство» или /dev/null. Про то, что это такое и как можно это «устройство» использовать поговорим дальше.
Среди подписчиков канала проходит розыгрыш. Чтобы принять в нем участие подпишитесь на канал и перейдите по ссылке ниже. Таким образом убьете двух зайцев: будете получать интересный и полезный контент по Linux и получите возможность стать обладателем одного из интересных призов.
Конкурс на 1000 подписчиков на канале Просто Код Обещанный конкурс в связи с 1000 подписчиков на канале Просто Код объявляю открытым! Долго думал, как его организовать и провести, наконец мысли сошлись в единый паззл. Условия конкурса Принять участие могут только подписчики канала Просто Код, данный пост будет доступен только им. Так как Дзен не позволяет получать данные о подписчиках, то…
Что такое /dev/null?
Это специальный файл, который является виртуальным устройством (то есть, устройством не связанным с реальным, физическим оборудованием вашего ПК) и который, в отличии от других виртуальных файлов Linux, используется для записи в него данных. При этом, все что вы в него будете записывать будет отброшено, забыто, стерто. Этакая черная дыра, поглощающая все, что в нее попадает и ничего не отдающая обратно.
Для чего же необходимо направлять данные в эту «черную дыру»? Рассмотрим популярные сценарии использования.
Перенаправление вывода в /dev/null
Помните про стандартные потоки ввода/вывода/ошибки, про которые мы говорили в предыдущей заметке? Именно работа с ними явно покажет, как и зачем можно использовать нулевое устройство.
Вспоминаем, что при запуске любой программы в Linux она генерирует два стандартных потока - stdout (поток вывода) и stderr (поток ошибки). Каждый из них имеет численное обозначение, называемое также файловый дескриптор - stdout обозначается как 1, stderr как 2. И опять-таки, используя эти дескрипторы мы можем перенаправить потоки в файлы.
Но что если, запуская команду, мы знаем, что там будут ошибки и показывать их в выводе просто-напросто не нужно? Для такого случая как раз и подойдет нулевое устройство. Например, давайте попробуем найти строку hello в системном каталоге /sys при помощи швейцарского ножа grep.