- Глава 28. /dev/zero и /dev/null
- ♾️ Что такое /dev/null в Linux?
- stdout и stder
- Используйте /dev/null, чтобы избавиться от вывода, который вам не нужен
- Перенаправить весь вывод в /dev/null
- Другие примеры, где это может быть полезно для перенаправления в /dev/null
- Dev zero in linux
- 2、/dev/zero
- 3. /dev/random and /dev/urandom
- Linux/Unix: Difference between /dev/null and /dev/zero files
- Как создаются файлы «/ dev» для 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> вы перенаправляете стандартный вывод.
- С &> вы перенаправляете как стандартную ошибку, так и стандартный вывод.
Используйте /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 zero in linux
/dev/null It represents the empty device file of Linux. All the content written into this file will be lost, commonly known as «black hole». The more common usage is to redirect unwanted output to this file.
This command redirects standard output and error output to /dev/null. Running this script will not output any information to the terminal.
The following analysis of this command: rm -f test.log> /dev/null 2>&1
In linux system, when the shell command is executed, 3 files will be opened by default, and each file has a corresponding file descriptor to facilitate our use.
File descriptor | Types of | Default | Corresponding file handle position |
0 | Standard input | Get input from the keyboard | /proc/self/fd/0 |
1 | Standard output | Output to the screen (ie console) | /proc/self/fd/1 |
2 | Error output | Output to the screen (ie console) | /proc/self/fd/2 |
The function of this command is to redirect standard output 1 to /dev/null in. What does the latter 2>&1 mean? &1 means file descriptor 1, 1 identifies standard output, stdout. So for 2, it means standard error, stderr. 2>&1 means to redirect standard error to standard output. Here standard output has been redirected to /dev/null. Then the standard error will also be output to /dev/null. Therefore, no matter whether this command is executed correctly or incorrectly, nothing will be displayed.
2、/dev/zero
«Zero» device can provide unlimited null characters (0x00, ASCII code NUL). It is commonly used to generate a file of a specific size.
For example, we use the dd command to generate a 50M test.log file. dd command reference:https://www.cnblogs.com/misswangxing/p/10911969.html
dd command: Copy a file with a block of specified size, and perform the specified conversion while copying.
Commonly used parameters:
if: if=file name: input file name, default is standard input. That is, the source file is specified. Here is /dev/zero.
of: of=file name: output file name, default is standard output. Namely specify the destination file. This is test.log.
bs: bs=bytes: At the same time set the block size of the read/output to bytes.
count: count=blocks: Only copy blocks, the block size is equal to the number of bytes specified by ibs.
3. /dev/random and /dev/urandom
/dev/random and /dev/urandom are random pseudo devices provided in the Linux system. The task of these two devices is to provide a random byte data stream that is never empty. Many decryption programs and security applications (such as SSH Keys, SSL Keys, etc.) require random data streams provided by them.reference.
The difference between these two devices is that the random pool of /dev/random depends on system interrupts. Therefore, when the number of system interrupts is insufficient, the /dev/random device will always be blocked, and the process that tries to read will enter a waiting state until The number of system interrupts is sufficient, and the /dev/random device can guarantee the randomness of data. /dev/urandom does not depend on the interruption of the system, and will not cause the process to be busy waiting, but the randomness of the data is not high.
Read 1KB byte stream from /dev/random:
Found that the speed of /dev/urandom is much faster than /dev/random.
How to write a line of data stream from a random device and convert it to hexadecimal?
Use the cat command to read the data streams of /dev/random and /dev/urandom, but the output is a binary data stream, which is difficult to read. You can use the od command to convert to hexadecimal. cat /dev/urandom | od -x | head -n 1, the first column is not a random data stream, again use cut to take out the next few fields.
Источник
Linux/Unix: Difference between /dev/null and /dev/zero files
/dev/zero and /dev/null are two pseudo files which are useful for creating empty files. Many people consider there is no difference or puzzled with what could be the difference between two files. There is considerable difference when writing data using these hardware files.
/dev/zero: This file is used to create a file with no data but with required size(A file with all zero’s). In other words this will create a data file with all zeros in the file which will give the size to a file.
Create a file with /dev/zero file
dd if=/dev/zero of=/opt/abc.txt bs=4096 count=1000
We can see what /dev/zero file writes to a file using below strace command.
root@linuxnix.com:/dev# strace cat /dev/zero
execve(“/bin/cat”, [“cat”, “/dev/zero”], [/* 46 vars */]) = 0
fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
read(3, “”…, 32768) = 32768
write(1, “”…, 32768) = 32768
read(3, “”…, 32768) = 32768
write(1, “”…, 32768) = 32768
read(3, “”…, 32768) = 32768
write(1, “”…, 32768) = 32768
read(3, “”…, 32768) = 32768
write(1, “”…, 32768) = 32768
read(3, “”…, 32768) = 32768
write(1, “”…, 32768) = 32768
read(3, “”…, 32768) = 32768
write(1, “”…, 32768) = 32768
read(3, “”…, 32768) = 32768
If you see the strace command on /dev/zero, it’s continuous zeros which it will write to a file.
So we conclude that /dev/zero is a file use full for creating a file with some required size without any meaning to the data.
/dev/null: This is one more Pseudo file which is useful in many places like redirecting unwanted output/error etc to this file. This file acts as a black hole(Which eat up everything and do not show any output). So whenever you feed some data to this file, you can not retrieve the data which is fed to it. This file even useful for creating files with zero size.
surendra@linuxnix.com:/etc/init.d$ dd if=/dev/null of=/home/surendra/abc.read bs=512 count=10
0+0 records in
0+0 records out
0 bytes (0 B) copied, 4.506e-05 s, 0.0 kB/s
surendra@linuxnix.com:/etc/init.d$ du -hs /home/surendra/abc.read
0 /home/surendra/abc.read
surendra@linuxnix.com:/etc/init.d$ dd if=/dev/zero of=/home/surendra/abc.read bs=512 count=10
10+0 records in
10+0 records out
5120 bytes (5.1 kB) copied, 0.000392949 s, 13.0 MB/s
surendra@linuxnix.com:/etc/init.d$ du -hs /home/surendra/abc.read
8.0K /home/surendra/abc.read
Now you can see the difference between /dev/null and /dev/zero.
Источник
Как создаются файлы «/ dev» для Linux?
В Linux есть специальные файлы, которые на самом деле не являются файлами.
Наиболее заметные и наглядные примеры из них находятся в dev папке «файлы», например:
- /dev/null — игнорирует все, что вы пишете в файл
- /dev/random — выводит случайные данные вместо содержимого файла
- /dev/tcp — Отправляет любые данные, которые вы пишете в этот файл по сети
Прежде всего, как называются эти типы «файлов», которые на самом деле являются замаскированным скриптом или двоичным файлом?
Во-вторых, как они созданы? Эти файлы встроены в систему на уровне ядра, или есть способ создать «волшебный файл» самостоятельно (как насчет a /dev/rickroll )?
/dev/zero является примером «специального файла» — в частности, «узла устройства». Обычно они получают созданные в процессе установки дистрибутива, но вы можете полностью создать их самостоятельно , если вы хотите.
Если вы спросите ls о /dev/zero :
«C» в начале говорит вам, что это «символьное устройство»; другой тип — «блочное устройство» (печатается ls как «b»). Грубо говоря, устройства с произвольным доступом, такие как жесткие диски, как правило, являются блочными устройствами, в то время как последовательные устройства, такие как ленточные накопители или ваша звуковая карта, обычно являются символьными устройствами.
Часть «1, 5» — это «основной номер устройства» и «вспомогательный номер устройства».
Имея эту информацию, мы можем использовать mknod команду для создания нашего собственного узла устройства:
Это создает новый файл с именем foobar , в текущей папке, которая делает точно то же самое , как /dev/zero . (Конечно, вы можете установить для него различные разрешения, если хотите.) Все, что действительно содержит этот «файл», это три элемента выше — тип устройства, основной номер, вспомогательный номер. Вы можете использовать ls для поиска кодов для других устройств и воссоздать их тоже. Когда вам надоест, просто используйте, rm чтобы удалить узлы устройства, которые вы только что создали.
В основном, старший номер сообщает ядру Linux, с каким драйвером устройства следует обращаться, а младший номер указывает драйверу устройства, о каком устройстве вы говорите. (Например, у вас, вероятно, один контроллер SATA, но, возможно, к нему подключено несколько жестких дисков.)
Если вы хотите изобретать новые устройства, которые делают что-то новое . ну, вам нужно отредактировать исходный код для ядра Linux и скомпилировать собственное ядро. Так что давайте не будем этого делать! 🙂 Но вы можете добавить файлы устройств, которые дублируют те, которые вы уже получили, просто отлично. Автоматизированная система , как Udev в основном просто наблюдая за событиями устройства и вызова mknod / rm автоматически. Ничего более волшебного, чем это.
Есть еще другие виды специальных файлов:
Linux считает каталог специальным видом файла. (Обычно вы не можете напрямую открыть каталог, но если бы вы могли, вы обнаружите, что это обычный файл, который содержит данные в специальном формате и сообщает ядру, где найти все файлы в этом каталоге.)
Симлинк это специальный файл. (Но жесткой ссылки нет.) Вы можете создавать символические ссылки с помощью ln -s команды. (Поищите справочную страницу для этого.)
Есть также вещь, называемая «именованный канал» или «FIFO» (очередь «первым пришел — первым вышел»). Вы можете создать один с mkfifo . FIFO — это магический файл, который может быть открыт сразу двумя программами — одно чтение, одно письмо. Когда это происходит, это работает как обычная оболочка. Но вы можете запустить каждую программу отдельно .
Файл, который не является «специальным» в любом случае, называется «обычным файлом». Вы иногда увидите упоминание об этом в документации Unix. Вот что это значит; файл, который не является узлом устройства, символической ссылкой или чем-то еще. Просто обычный, каждый день файл без магических свойств.
Источник