- Unix and Linux: Redirect Error Output To null Command
- What is a null (/dev/null) file in a Linux or Unix-like systems?
- Syntax: Standard Error (stderr -2 no) to a file or /dev/null
- Linux and Unix redirect all output and error to file
- ♾️ Что такое /dev/null в Linux?
- stdout и stder
- Используйте /dev/null, чтобы избавиться от вывода, который вам не нужен
- Перенаправить весь вывод в /dev/null
- Другие примеры, где это может быть полезно для перенаправления в /dev/null
- Shell Redirect Output And Errors To The Null Device In Bash
- Overview
- Concepts
- File descriptors
- Null device
- Redirect to the null device.
- Examples
- Summary
- Что означает «> /dev/null 2>&1»?
Unix and Linux: Redirect Error Output To null Command
- stdin – 0 – Standard Input (usually keyboard or file)
- stdout – 1 – Standard Output (usually screen)
- stderr – 2 – Standard Error (usually screen)
[donotprint]
Tutorial details | |
---|---|
Difficulty level | Easy |
Root privileges | No |
Requirements | None |
Est. reading time | 1m |
[/donotprint]
What is a null (/dev/null) file in a Linux or Unix-like systems?
/dev/null is nothing but a special file that discards all data written to it. The length of the null device is always zero. In this example, first, send output of date command to the screen and later to the /dev/null i.e. discards date command output:
Syntax: Standard Error (stderr -2 no) to a file or /dev/null
The syntax is as follows:
In this example, send output of find command to /dev/null:
$ find /etc -type f -name ‘*’ 2>/dev/null
The following example will cause the stderr ouput of a program to be written to a file called errors.txt:
$ find /etc/ -type f -name «*» 2> errors.txt
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
Linux and Unix redirect all output and error to file
If you want both stderr and stdout in same file, try:
Use cat command to display log.txt on screen:
cat log.txt
See man pages for more information – ksh(1).
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Category | List of Unix and Linux commands |
---|---|
Documentation | help • mandb • man • pinfo |
Disk space analyzers | df • duf • ncdu • pydf |
File Management | cat • cp • less • mkdir • more • tree |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Linux Desktop Apps | Skype • Spotify • VLC 3 |
Modern utilities | bat • exa |
Network Utilities | NetHogs • dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • glances • gtop • jobs • killall • kill • pidof • pstree • pwdx • time • vtop |
Searching | ag • grep • whereis • which |
Shell builtins | compgen • echo • printf |
Text processing | cut • rev |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
Comments on this entry are closed.
Your command will send output to both screen and file.
Источник
♾️ Что такое /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> вы перенаправляете стандартный вывод.
- С &> вы перенаправляете как стандартную ошибку, так и стандартный вывод.
Используйте /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
Скажем, вы хотите увидеть, как быстро ваш диск может читать последовательные данные.
Источник
Shell Redirect Output And Errors To The Null Device In Bash
How to redirect output and errors to /dev/null in Bash
Overview
In shell scripting, you often want to avoid printing error messages to the console or discard any possible output the script could generate. Capturing program output can be done with I/O Redirection in Linux.
Concepts
In Linux, everything is a file, even data streams and devices are treated like ordinary files.
There are always three default files open:
stdin the keyboard stdout the screen stderr error messages output to the screen
Output from these files can be captured and sent as input to another file, command, program or script. This is called redirection.
How do you choose what file to handle? With file descriptors.
File descriptors
A file descriptor is simply a number that the operating system assigns to an open file to keep track of it. Consider it a simplified type of file pointer. It is analogous to a file handle in C.
Kowing the file descriptors of each file, we can select with which one we want to work and process redirection between them.
The file descriptors for our open files are:
Then we can use M>N in each command to redirect the file descriptor M to N:
- M: file descriptor, which defaults to 1, if not explicitly set.
N can be:
- N: filename,
- &N: another file descriptor
Null device
Linux has a special device file that discards all data written to it. In Linux this device is /dev/null.
Redirect to the null device.
The way to discard commands output and error messages is to redirect them to the null device.
This can be done explicitely redirecting both output and/or errors in many ways:
Redirect stdout to the null device:
Redirect stderr to the null device
Redirect both stdout and stderr to the null device
Redirect stderr to the same file of stdout
Examples
Let’s see a simple example with the ls command:
stdout file descriptor isn’t present so it defaults to 1, any error would be echoed to the screen.
we only redirect stdout but we still see the error generated by the command.
we produce an error with ls but redirects the error output to the null device, so we don’t see any output in the screen.
we avoid outputting errors and the standard command output.
Summary
Understanding file descriptors is key to handle commands output and errors.
This is a common practice to avoid outputting anything in cronjobs where the output would be sent to the users email.
Additionally, it is very useful to work with bash redirection not only to the null device.
Источник
Что означает «> /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/ перегревает ваш процессор 🙂
Источник