/dev/null
- це один з найпоширеніших спеціальних віртуальних пристроїв у Linux. У цьому посібнику ми про це поговоримо і покажемо різні способи його використання.
Що таке /Dev/Null у Linux
Linux розглядає все як файли, незалежно від того, чи це драйвер, чи пристрій. Каталог /dev
використовується для зберігання всіх фізичних і віртуальних пристроїв. Якщо ви працювали з розбиттям диска на розділи, ви могли бачити, як використовується каталог /dev
. Наприклад: /dev/sda
, /dev/sdb1
тощо.
Кожен зі спеціальних віртуальних пристроїв має унікальні властивості. Наприклад, читання з /dev/zero
повертає символи ASCII NUL. Деякі з популярних віртуальних пристроїв включають:
- /dev/null
- /dev/zero
- /dev/random
- /dev/urandom
/dev/null
- це нульовий пристрій, який відкидає будь-які дані, що на нього записуються. Однак, він повідомляє, що операція запису пройшла успішно. У термінології UNIX цей нульовий пристрій також називають бітовим відром або чорною дірою.
Використання /Dev/Null у Linux
Властивості /Dev/Null
При спробі читання з /dev/null повертається символ EOF
:
$ cat /dev/null
$
Попри свої унікальні особливості, /dev/null
є повноцінним файлом. Ми можемо перевірити це за допомогою наступної команди
$ stat /dev/null
File: /dev/null
Size: 0 Blocks: 0 IO Block: 4096 character special file
Device: 5h/5d Inode: 5 Links: 1 Device type: 1,3
Access: (0666/crw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-08-21 11:04:59.656627857 +0300
Modify: 2023-08-21 11:04:59.656627857 +0300
Change: 2023-08-21 11:04:59.656627857 +0300
Birth: 2023-08-21 11:04:55.224000000 +0300
Базове використання
Все, що записано до /dev/null
, буде знищено назавжди. Наступний приклад демонструє цю властивість:
$ echo "hello world" > /dev/null
$ cat /dev/null
$
Тут ми перенаправили STDOUT
команди echo на /dev/null
. За допомогою команди cat ми зчитуємо вміст /dev/null
.
Оскільки /dev/null
не зберігає жодних даних, у виводі команди cat нічого не буде.
Перенаправлення виводу команд до /Dev/Null
Потрібно запустити команду, не цікавлячись її виводом? Ми можемо перенаправити дані до /dev/null
для безпечного скидання. Для реалізації цієї техніки потрібні попередні знання дескрипторів файлів: STDIN
, STDOUT
і STDERR
.
Приклад 1:
Розглянемо перший приклад:
$ echo "hello world" > /dev/null
$
Тут ми перенаправляємо STDOUT
команди echo до /dev/null
. Тому вона не буде виводитися на екран консолі.
Приклад 2:
Розглянемо наступний приклад:
$ asdfghjkl > /dev/null
asdfghjkl: command not found
$
Тут команди asdfghjkl
не існує. Отже, Bash видасть помилку. Однак, повідомлення про помилку не було скинуто до /dev/null
. Це тому, що повідомлення про помилку зберігається в STDERR
. Отже, нам також потрібно вказати перенаправлення на STDERR
(2). Ось оновлена команда:
$ asdfghjkl 2> /dev/null
$
Приклад 3:
Що робити, якщо ми хочемо перенаправити як STDOUT
, так і STDERR
на /dev/null
? Структура команд буде виглядати наступним чином:
$ cat somefile.txt > /dev/null 2> /dev/null
$
Хоча ця структура є абсолютно правильною, вона є багатослівною та надлишковою. Існує спосіб значно скоротити структуру: спочатку перенаправити STDERR
на STDOUT
, а потім перенаправити STDOUT
на /dev/null
.
Ознайомтеся з оновленою командою:
$ cat employees.txt > /dev/null 2>&1
$
Тут STDOUT
перенаправлено на /dev/null
. Потім ми перенаправляємо STDERR (2)
на STDOUT (1)
. "&1
" вказує командному інтерпретатору, що призначенням є дескриптор файлу, а не ім'я файлу.
Тепер команда стала ефективнішою.
Висновок
Ми дізналися про /dev/null
, нульовий пристрій у Linux. Ми також продемонстрували, як він працює на різних прикладах. Ці методи широко використовуються в командному інтерпретаторі.
Ще немає коментарів