Що таке / dev / null і як це може вам допомогти?

Якщо ми вже маємо деякі поняття про дерево каталогів GNU / Linux, ми повинні, принаймні, бути знайомими з / dev / reference, де фактично зберігаються всі файли, пов'язані з апаратних пристроїв.

Якщо ми заглянемо в каталог / dev / ми побачимо "файл" з назвою нулю, але якщо ми хочемо відкрити його, щоб побачити його вміст, система скаже нам, що це неможливо, оскільки це не звичайний вміст. Я додав слово word, оскільки, як ви всі знаєте для Linux, все (апаратне та програмне забезпечення) представлено у вигляді файлу.

Це внесок Даніеля Дюранте, ставши таким чином одним з переможців нашого щотижневого конкурсу: «Поділіться своїми знаннями про Linux«. Вітаємо, Данило!

Якому пристрою відповідає / dev / null?

Для практичних цілей уявіть сміттєвий бак, бездонну яму або космічний простір, куди можна кинути що-небудь, не маючи можливості відновити це (як би не старалися хлопці з НАСА).

Але якщо у мене вже є такі команди, як rm, чому я хочу щось нове, що видаляю?

Оскільки спосіб роботи обох "чорних дір" абсолютно інший: як би ви замінили стандартний вивід помилки в команді в сценарії оболонки під час виконання? Тут виникає / dev / null.

Подивимось на прикладі.

Ми створили файл під назвою тести, що містить рядок "Hello World". Якщо ми хочемо представити вміст цього файлу в командному рядку, ми можемо зробити це наступним чином:

user @ laptop: ~ $ тест на кішку
Привіт Світ

Якщо файл не існував або був названий тестами (з позначкою `` в кінці ''), ми отримаємо таку помилку в консолі:

user @ laptop: ~ $ тести на котів
cat: tests: Файл або каталог не існує

Що ми можемо зробити, щоб уникнути повідомлення про помилку? Ну, просто перенаправіть висновок команди, на випадок помилки, у "сміттєвий бак", тобто на / dev / null

Як ми можемо вказати це на випадок помилки? Тут ви вводите стандартні значення вхідних, вихідних та помилок для програми: STDIN, STDOUT і STDERR (які можна замінити 0, 1 і 2 відповідно). Таким чином, якщо ми покладемо ...

user @ laptop: ~ $ cat тести 2> / dev / null
користувач @ ноутбук: ~ $

... Ми побачимо, що повідомлення про помилку не з’явиться на консолі.

Ви повинні бути обережними, оскільки синтаксис є важливим: між символами 2 та> не повинно бути пробілу. В іншому випадку це дало б таке:

user @ laptop: ~ $ cat тести 2> / dev / null
cat: tests: Файл або каталог не існує
cat: 2: Файл або каталог не існує

На відміну від цього, пробіл між> та / dev / null не буде негативно впливати на результат.

Ми також можемо використовувати перенаправлення помилок, наприклад, для фіксації помилок у файлі журналу наступним чином:

user @ laptop: ~ $ cat tests 2> err.log

Іншим цікавим випадком було б збирання результатів в іншому файлі, поки не виникає помилка, для якої ми б поставили:

user @ laptop: ~ $ cat test 1> output_result 2> err.log

Нарешті, варто поставити вираз «> / dev / null 2> & 1», в якому стандартний вивід і вихід помилок поєднуються, перенаправляючи їх так, щоб ні в якому разі не отримувати вихідну інформацію.


Додати як пріоритетне джерело