File Management

Що таке / dev / null і як ним користуватися

Що таке / dev / null і як ним користуватися
Linux - це цікава операційна система, в якій розміщено деякі віртуальні пристрої для багатьох цілей. Що стосується програм, що працюють у системі, то ці віртуальні пристрої діють так, ніби це справжні файли. Інструменти можуть запитувати та подавати дані з цих джерел. Дані генеруються ОС замість зчитування їх з диска.

Одним з таких прикладів є / dev / null. Це спеціальний файл, який присутній у кожній окремій системі Linux. Однак, на відміну від більшості інших віртуальних файлів, він замість читання використовується для запису. Все, що ви пишете в / dev / null, буде викинуто, забуто в порожнечу. Він відомий як нульовий пристрій в системі UNIX.

Чому ви хочете щось викинути у порожнечу?? Давайте перевіримо, що таке / dev / null та його використання.

Передумови

Перш ніж заглибитися в використання / dev / null, ми повинні чітко зрозуміти stdout і stderr потік даних. Ознайомтеся з цим поглибленим посібником на stdin, stderr, і stdout.

Давайте швидко освіжимось. Щоразу, коли запускається будь-яка утиліта командного рядка, вона генерує два виходи. Вихід надходить до stdout і помилка (якщо генерується) переходить до stderr. За замовчуванням обидва ці потоки даних пов'язані з терміналом.

Наприклад, наступна команда роздрукує рядок у подвійних лапках. Тут вихідні дані зберігаються в stdout.

$ echo “Hello World”

Наступна команда покаже нам статус виходу з попередньо запущеної команди.

$ echo $?

Оскільки попередня команда успішно виконана, статус виходу - 0. В іншому випадку стан виходу буде іншим. Що трапляється при спробі запустити недійсну команду?

$ adfadsf
$ echo $?

Тепер нам потрібно знати про дескриптор файлу. В екосистемі UNIX це цілі значення, присвоєні файлу. І те, і інше stdout (дескриптор файлу = 1) та stderr (дескриптор файлу = 2) мають певний дескриптор файлу. Використовуючи дескриптор файлу (1 і 2 у цій ситуації), ми можемо перенаправити файл stdout і stderr до інших файлів.

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

$ echo “Hello World”> журнал.txt

Наступна команда перенаправить файл stderr у текстовий файл.

$ asdfadsa 2> помилка.txt

Використання / dev / null

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

Тепер ми готові навчитися використовувати / dev / null. По-перше, давайте перевіримо, як фільтрувати нормальний вихід і помилки. У наступній команді grep спробує знайти рядок (у цьому випадку - привіт) у каталозі “/ sys”.

$ grep -r привіт / sys /

Однак це призведе до великої кількості помилок, оскільки без права root, grep не може отримати доступ до ряду файлів. У такому випадку це призведе до помилок "Дозвіл відмовлено". Тепер, використовуючи переспрямування, ми можемо отримати більш чіткий результат.

$ grep -r hello / sys / 2> / dev / null

Результат виглядає набагато краще, правильно? Нічого! У цьому випадку grep не має доступу до великої кількості файлів, а ті, які доступні, не мають рядка “привіт”.

У наступному прикладі ми будемо пінгувати Google.

$ ping Google.ком

Однак ми не хочемо бачити всі ці успішні результати пінгу. Натомість ми хочемо зосередитись на помилках лише тоді, коли пінг не може дістатися до Google. Як ми це робимо?

$ ping Google.com 1> / dev / null

Тут вміст stdout скидаються в / dev / null, залишаючи лише помилки.

Перенаправити всі вихідні дані на / dev / null

У певних ситуаціях висновок може бути зовсім не корисним. Використовуючи переспрямування, ми можемо скинути всі вихідні дані у порожнечу.

$ grep -r hello / sys /> / dev / null 2> & 1

Давайте трохи порушимо цю команду. По-перше, ми скидаємо всі stdout до / dev / null. Потім, у другій частині, ми говоримо bash надіслати stderr до stdout. У цьому прикладі немає чого виводити. Однак, якщо ви заплуталися, ви завжди можете перевірити, чи команда успішно виконана.

$ echo $?

Значення дорівнює 2, оскільки команда спричинила багато помилок.

Якщо ви схильні забути дескриптор файлу stdout і stderr, наступна команда буде добре працювати. Це більш узагальнений формат попередньої команди. І те, і інше stdout і stderr буде перенаправлено на / dev / null.

$ grep -r hello / sys / &> / dev / null

Інші приклади

Це цікаво. Запам’ятайте інструмент dd? Це потужний інструмент для перетворення та копіювання файлів. Дізнайтеся більше про dd. За допомогою dd ми можемо перевірити послідовну швидкість читання вашого диска. Звичайно, це не точне вимірювання. Однак для швидкого тесту це досить корисно.

$ dd, якщо = of = / dev / null status = progress bs = 1M iflag = direct

Тут я використовував Ubuntu 18.04.4 ISO як великий файл.

Так само ви можете перевірити швидкість завантаження вашого Інтернет-з'єднання.

$ wget -O / dev / null

Заключні думки

Сподіваємось, ви чітко розумієте, що це за файл / dev / null. Це спеціальний пристрій, який, якщо на нього записано, відкидає, а якщо читає з нього, читає нуль. Справжній потенціал цієї цікавої функції полягає у цікавих скриптах bash.

Ви зацікавлені в скриптах bash? Ознайомтесь з посібником для початківців щодо скриптів Bash.

Насолоджуйтесь!

Найкращі ігри для гри з відстеженням рук
Нещодавно Oculus Quest представив чудову ідею відстеження рук без контролерів. Завдяки постійно зростаючій кількості ігор та заходів, які виконують пі...
Як показати накладання екранного меню в повноекранному додатку та іграх для Linux
Гра у повноекранні ігри або використання додатків у повноекранному повноекранному режимі може відключити від відповідної системної інформації, видимої...
Топ 5 карт для захоплення ігор
Ми всі бачили і любили потокові ігри на YouTube. PewDiePie, Jakesepticye та Markiplier - лише деякі з найкращих геймерів, які заробили мільйони, заван...